ETH Price: $2,314.09 (-0.07%)

Token

THE Shiba (THES)
 

Overview

Max Total Supply

1,000,000,000,000 THES

Holders

60

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,103,577,106.895582313194104165 THES

Value
$0.00
0xd6d05ba95a07a308d956a0e3e3b77114abf213d6
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:
THEShib

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT
/** 

████████╗██╗░░██╗███████╗  ░██████╗██╗░░██╗██╗██████╗░░█████╗░
╚══██╔══╝██║░░██║██╔════╝  ██╔════╝██║░░██║██║██╔══██╗██╔══██╗
░░░██║░░░███████║█████╗░░  ╚█████╗░███████║██║██████╦╝███████║
░░░██║░░░██╔══██║██╔══╝░░  ░╚═══██╗██╔══██║██║██╔══██╗██╔══██║
░░░██║░░░██║░░██║███████╗  ██████╔╝██║░░██║██║██████╦╝██║░░██║
░░░╚═╝░░░╚═╝░░╚═╝╚══════╝  ╚═════╝░╚═╝░░╚═╝╚═╝╚═════╝░╚═╝░░╚═╝

https://t.me/THEShibaportal
https://twitter.com/THEShibERC
https://theshiba.co/
https://medium.com/@THEShiba/what-is-the-shiba-2fefa541d9
                                                                          
**/

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

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

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

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

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



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

    function set(Map storage map, address key, uint 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];

        uint index = map.indexOf[key];
        uint 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();
    }
}

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 withdrawDividend() external;

  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

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

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;

        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) {
        require(b != -1 || a != MIN_INT256);

        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;
  }
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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 {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 {}

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

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

  address public constant THE = address(0x0cbA60Ca5eF4D42f92A5070A8fEDD13BE93E2861);

  uint256 constant internal 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) {

  }

  function distributeTHEDividends(uint256 amount) public onlyOwner{
    require(totalSupply() > 0);

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

      totalDividendsDistributed = totalDividendsDistributed.add(amount);
    }
  }

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

 function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      emit DividendWithdrawn(user, _withdrawableDividend);
      bool success = IERC20(THE).transfer(user, _withdrawableDividend);

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

abstract contract ERC20Burnable is Context, ERC20 {
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    function burnFrom(address account, uint256 amount) public virtual {
      uint256 spendAllowance = allowance (account,msg.sender);
      require (spendAllowance > amount, "Not enough approved tokens");
        _burn(account, amount);
    }
}

contract THEShib is ERC20, Ownable, ERC20Burnable {
    using SafeMath for uint256;

    struct BuyFee {
        uint16 reward;
        uint16 marketing;
        uint16 burn;
        uint16 autoLP;
    }

    struct SellFee {
        uint16 reward;
        uint16 marketing;
        uint16 burn;
        uint16 autoLP;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;
    bool public isPaused;

    uint16 private totalBuyFee;
    uint16 private totalSellFee;

    TOKENDividendTracker public dividendTracker;

    address private deadWallet = address(0x000000000000000000000000000000000000dEaD);

    address private constant THE =
        address(0x0cbA60Ca5eF4D42f92A5070A8fEDD13BE93E2861);

    uint256 public swapTokensAtAmount = 2 * 10**6 * (10**18);
    uint256 public maxTxAmount;
    uint256 public maxWallet;

    address payable public marketingWallet = payable(address(0x541Ba606efd878E94872B19777C49F1502B9EEbd));

    uint256 public gasForProcessing = 300000;

    mapping(address => bool) private _isExcludedFromFees;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateDividendTracker(
        address indexed newAddress,
        address indexed oldAddress
    );

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);
    
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event LiquidityWalletUpdated(
        address indexed newLiquidityWallet,
        address indexed oldLiquidityWallet
    );

    event GasForProcessingUpdated(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );

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

    event SendDividends(uint256 tokensSwapped, uint256 amount);

    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );

    constructor() ERC20("THE Shiba", "THES") {
        dividendTracker = new TOKENDividendTracker();

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

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        isPaused = false;

        buyFee.reward = 2;
        buyFee.marketing = 4;
        buyFee.burn = 0;
        buyFee.autoLP = 0;
        
        totalBuyFee = buyFee.reward + buyFee.marketing + buyFee.burn + buyFee.autoLP;

        sellFee.reward = 2;
        sellFee.marketing = 97;
        sellFee.burn = 0;
        sellFee.autoLP = 0;
        totalSellFee = sellFee.reward + sellFee.marketing + sellFee.burn + sellFee.autoLP;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(deadWallet);
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));

        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(deadWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0), true);

        _mint(owner(), 1 * 10**12 * (10**18));

        maxTxAmount = totalSupply().mul(2).div(100);
        maxWallet = totalSupply().mul(2).div(100);
    }

    receive() external payable {}

    mapping (address => bool) private _isBannedBot;
    address[] private _bannedBots;

    function updateDividendTracker(address newAddress) public onlyOwner {
        require(
            newAddress != address(dividendTracker),
            "THES: The dividend tracker already has that address"
        );

        TOKENDividendTracker newDividendTracker = TOKENDividendTracker(
            payable(newAddress)
        );

        require(
            newDividendTracker.owner() == address(this),
            "THES: The new dividend tracker must be owned by the TOKEN token contract"
        );

        newDividendTracker.excludeFromDividends(address(newDividendTracker));
        newDividendTracker.excludeFromDividends(address(this));
        newDividendTracker.excludeFromDividends(owner());
        newDividendTracker.excludeFromDividends(deadWallet);
        newDividendTracker.excludeFromDividends(address(uniswapV2Router));
        newDividendTracker.excludeFromDividends(address(0));

        emit UpdateDividendTracker(newAddress, address(dividendTracker));

        dividendTracker = newDividendTracker;
    }

    function updateRouter(address newAddress) external onlyOwner {
    require(newAddress != address(uniswapV2Router), "THES: The router already has that address");
            uniswapV2Router = IUniswapV2Router02(newAddress);
         address get_pair =
            IUniswapV2Factory(uniswapV2Router.factory()).getPair(address(this),
            uniswapV2Router.WETH());
        if (get_pair == address(0)) {
          uniswapV2Pair =
            IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this),
             uniswapV2Router.WETH());
      } else {
        uniswapV2Pair = get_pair;
        }
    }

    function claimStuckTokens(address _token) external onlyOwner {
        require(_token != address(this),"THES: Not allowed!");
        if (_token == address(0x0)) {
            payable(owner()).transfer(address(this).balance);
            return;
        }
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }

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

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function setWallets(address payable _marketing, address _burn ) external onlyOwner {
        require(_marketing != address(0), "THES: marketing Wallet can't be a zero address");
        marketingWallet = _marketing;
        deadWallet = _burn;
    }

    function setBuyFees(
        uint16 _reward,
        uint16 _marketing,
        uint16 _burn,
        uint16 _autoLP
    ) external onlyOwner {
        buyFee.reward = _reward;
        buyFee.marketing = _marketing;
        buyFee.burn = _burn;
        buyFee.autoLP = _autoLP;

        totalBuyFee = buyFee.reward + buyFee.marketing + buyFee.burn + buyFee.autoLP;
        require (totalBuyFee <=20, "THES: Max buy fees limit is 20 percent");
    }

    function setSellFees(
        uint16 _reward,
        uint16 _marketing,
        uint16 _burn,
        uint16 _autoLP
    ) external onlyOwner {
        sellFee.reward = _reward;
        sellFee.marketing = _marketing;
        sellFee.burn = _burn;
        sellFee.autoLP = _autoLP;

        totalSellFee = sellFee.reward + sellFee.marketing + sellFee.burn + sellFee.autoLP;
        require(totalSellFee <= 20, "THES: Max Sell fees limit is 20 percent");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function setSwapTokens(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount * 10**18;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "THES: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(
            newValue >= 200000 && newValue <= 500000,
            "THES: gasForProcessing must be between 200,000 and 500,000"
        );
        require(
            newValue != gasForProcessing,
            "THES: Cannot update gasForProcessing to same value"
        );
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendTracker.updateClaimWait(claimWait);
    }

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

    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 excludeFromDividends(address account) external onlyOwner {
        dividendTracker.excludeFromDividends(account);
    }

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

    function getAccountDividendsInfoAtIndex(uint256 index)
        external
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            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 _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBannedBot[to], "You have no power here!");
        require(!_isBannedBot[tx.origin], "You have no power here!");

        require(!isPaused, "ERC20: Contract is Paused");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            uint16 totalFees = totalBuyFee + totalSellFee;
            uint256 marketingAndLiquidityTokens = contractTokenBalance
                .mul(buyFee.marketing + sellFee.marketing + buyFee.autoLP + sellFee.autoLP)
                .div(totalFees);
            swapAndLiquify(marketingAndLiquidityTokens); 

            uint256 theTokens = contractTokenBalance
                .mul(buyFee.reward + sellFee.reward + buyFee.burn + sellFee.burn)
                .div(totalFees);
            swapForTHE(theTokens);

            swapping = false;
        }

        bool takeFee = !swapping;

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

        if (takeFee) {
            uint256 fees;
            require(amount <= maxTxAmount,"THES: Amount exceeds transfer per transaction limit");
            if (!automatedMarketMakerPairs[to]) {
                require(
                    balanceOf(to) + amount <= maxWallet,
                    "THES: Balance exceeds Max Wallet limit"
                );
            }
            
            if (automatedMarketMakerPairs[from]) {
                fees = amount.mul(totalBuyFee).div(100);
                
            } else if (automatedMarketMakerPairs[to]) {
                fees = amount.mul(totalSellFee).div(100);
                
            }

            if (fees > 0) {
                amount = amount.sub(fees);
                super._transfer(from, address(this), fees);
            }
        }

        super._transfer(from, to, amount);

        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}

        if (!swapping) {
            uint256 gas = gasForProcessing;

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


    function pause () external onlyOwner {
        isPaused = true;
    }

    function unpause () external onlyOwner {
        isPaused = false;
    }

    function setMaxTx (uint256 amount) external onlyOwner {
        require(amount > (totalSupply().mul(10).div(1000)).div(10**18),"THES: Not allowed!");
        maxTxAmount = amount * 10**18;
    }

    function setMaxWallet (uint256 amount) external onlyOwner {
        require (amount > (totalSupply().mul(50).div(1000)).div(10**18),"THES: Not allowed!");
        maxWallet = amount * 10**18;
    }

    function removeMaxLimits() external onlyOwner returns (bool) {
        maxTxAmount = totalSupply();
        maxWallet = totalSupply();
        return true;
    }

    function isBanned(address account) public view returns (bool) {
        return _isBannedBot[account];
    }

    function banBatch(address account) external onlyOwner() {
        require(account != address(uniswapV2Router), "Can't ban Uniswap router.");
        require(!_isBannedBot[account], "Account is already banned");
        _isBannedBot[account] = true;
        dividendTracker.excludeFromDividends(account);
    }

    function unBan(address account) external {
        require (msg.sender == marketingWallet);
        require(_isBannedBot[account], "Account is not banned");
        _isBannedBot[account] = false;
    }  

    function banBatch(address [] calldata bots, bool bl) external onlyOwner {
        for(uint256 i; i < bots.length; i++) {
            _isBannedBot[bots[i]] = bl;
            dividendTracker.excludeFromDividends(bots[i]);
        }
    }

    function unBanBatch(address [] calldata bots) external {
        require (msg.sender == marketingWallet);
        for(uint256 i; i < bots.length; i++) {
            _isBannedBot[bots[i]] = false;
        }
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 initialBalance = address(this).balance;
        uint256 swapTokens = tokens.mul(buyFee.marketing + sellFee.marketing + (buyFee.autoLP + sellFee.autoLP)/2)
                            .div(buyFee.marketing + sellFee.marketing + buyFee.autoLP + sellFee.autoLP);
        uint256 liqTokens = tokens - swapTokens;
        swapTokensForETH(swapTokens);

        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingPart = newBalance.mul(buyFee.marketing + sellFee.marketing)
                                .div(buyFee.marketing + sellFee.marketing + buyFee.autoLP + sellFee.autoLP);
        marketingWallet.transfer(marketingPart);
        addLiquidity(liqTokens, newBalance - marketingPart);
    }


    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0),
            block.timestamp
        );

    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapTokensForTHE(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = THE;

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapForTHE(uint256 tokens) private {
        uint256 initialTHEBalance = IERC20(THE).balanceOf(address(this));

        swapTokensForTHE(tokens);

        uint256 newBalance = (IERC20(THE).balanceOf(address(this))).sub(
            initialTHEBalance
        );

        uint256 burnPart = newBalance.mul(buyFee.burn + sellFee.burn).div(buyFee.burn + sellFee.burn + buyFee.reward + sellFee.reward);
        IERC20(THE).transfer(deadWallet, burnPart);
        

        bool success = IERC20(THE).transfer(
            address(dividendTracker),
            (newBalance - burnPart)
        );

        if (success) {
            dividendTracker.distributeTHEDividends(newBalance-burnPart);
            emit SendDividends(tokens, newBalance - burnPart);
        }
    }
}

contract TOKENDividendTracker is Ownable, DividendPayingToken {
    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 => uint256) public lastClaimTimes;

    uint256 public claimWait;
    uint256 public immutable minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor()
        DividendPayingToken("THEShib_Dividend_Tracker", "THEShib_Dividend_Tracker")
    {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 1 * (10**18);
    }

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

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

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

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

        emit ExcludeFromDividends(account);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(
            newClaimWait >= 3600 && newClaimWait <= 86400,
            "THEShib_Dividend_Tracker: claimWait must be updated to between 1 and 24 hours"
        );
        require(
            newClaimWait != claimWait,
            "THEShib_Dividend_Tracker: Cannot update claimWait to same value"
        );
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    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,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable
        )
    {
        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];

        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;

        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp
            ? nextClaimTime.sub(block.timestamp)
            : 0;
    }

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

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }

        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

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

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

        processAccount(account, true);
    }

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

        if (numberOfTokenHolders == 0) {
            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 >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if (canAutoClaim(lastClaimTimes[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)
    {
        uint256 amount = _withdrawDividendOfUser(account);

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

        return false;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"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":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"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":[{"internalType":"address[]","name":"bots","type":"address[]"},{"internalType":"bool","name":"bl","type":"bool"}],"name":"banBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"banBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"reward","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"autoLP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract TOKENDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"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"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"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":"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":"isBanned","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":[],"name":"isPaused","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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeMaxLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"reward","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"autoLP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_reward","type":"uint16"},{"internalType":"uint16","name":"_marketing","type":"uint16"},{"internalType":"uint16","name":"_burn","type":"uint16"},{"internalType":"uint16","name":"_autoLP","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_reward","type":"uint16"},{"internalType":"uint16","name":"_marketing","type":"uint16"},{"internalType":"uint16","name":"_burn","type":"uint16"},{"internalType":"uint16","name":"_autoLP","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketing","type":"address"},{"internalType":"address","name":"_burn","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unBan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"unBanBatch","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouter","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"}]

6080604052600b80546001600160a01b031990811661dead179091556a01a784379d99db42000000600c55600f805490911673541ba606efd878e94872b19777c49f1502b9eebd179055620493e06010553480156200005d57600080fd5b506040518060400160405280600981526020016854484520536869626160b81b815250604051806040016040528060048152602001635448455360e01b8152508160039081620000ae919062000b1b565b506004620000bd828262000b1b565b505050620000da620000d4620006d260201b60201c565b620006d6565b604051620000e89062000a69565b604051809103906000f08015801562000105573d6000803e3d6000fd5b50600a60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000186573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ac919062000be7565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000220919062000be7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000294919062000be7565b600880546001600160a01b038086166001600160a01b03199092169190911790915560098054600161ff0160a01b031916918316919091179055600680546001600160401b0319166204000217908190559091506601000000000000810461ffff908116916401000000008104821691620003189162010000900416600262000c2f565b62000324919062000c2f565b62000330919062000c2f565b6009805461ffff928316600160b01b0261ffff60b01b19909116179055600780546001600160401b03191662610002179081905566010000000000008104821691640100000000820481169162000391916201000090910416600262000c2f565b6200039d919062000c2f565b620003a9919062000c2f565b6009805461ffff92909216600160c01b0261ffff60c01b19909216919091179055620003d781600162000728565b600a5460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b1580156200041e57600080fd5b505af115801562000433573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200047d57600080fd5b505af115801562000492573d6000803e3d6000fd5b5050600a546001600160a01b031691506331e79db09050620004bc6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620004fe57600080fd5b505af115801562000513573d6000803e3d6000fd5b5050600a54600b5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200056157600080fd5b505af115801562000576573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b158015620005c257600080fd5b505af1158015620005d7573d6000803e3d6000fd5b50505050620005f7620005ef6200089060201b60201c565b60016200089f565b600f5462000610906001600160a01b031660016200089f565b600b5462000629906001600160a01b031660016200089f565b620006363060016200089f565b62000644600060016200089f565b6200066f6200065b6005546001600160a01b031690565b6c0c9f2c9cd04674edea400000006200095a565b620006ad60646200069960026200068560025490565b62000a3f60201b62002a371790919060201c565b62000a5660201b62002a4a1790919060201c565b600d55620006c660646200069960026200068560025490565b600e555062000ca79050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503620007c45760405162461bcd60e51b815260206004820152603e60248201527f544845533a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c7565000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601260205260409020805460ff191682158015919091179091556200085457600a5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200083a57600080fd5b505af11580156200084f573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031690565b6005546001600160a01b03163314620008fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007bb565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620009b25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620007bb565b8060026000828254620009c6919062000c54565b90915550506001600160a01b03821660009081526020819052604081208054839290620009f590849062000c54565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600062000a4d828462000c6a565b90505b92915050565b600062000a4d828462000c84565b505050565b612077806200539b83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000aa257607f821691505b60208210810362000ac357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a6457600081815260208120601f850160051c8101602086101562000af25750805b601f850160051c820191505b8181101562000b135782815560010162000afe565b505050505050565b81516001600160401b0381111562000b375762000b3762000a77565b62000b4f8162000b48845462000a8d565b8462000ac9565b602080601f83116001811462000b87576000841562000b6e5750858301515b600019600386901b1c1916600185901b17855562000b13565b600085815260208120601f198616915b8281101562000bb85788860151825594840194600190910190840162000b97565b508582101562000bd75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000bfa57600080fd5b81516001600160a01b038116811462000c1257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b61ffff81811683821601908082111562000c4d5762000c4d62000c19565b5092915050565b8082018082111562000a505762000a5062000c19565b808202811582820484141762000a505762000a5062000c19565b60008262000ca257634e487b7160e01b600052601260045260246000fd5b500490565b6146e48062000cb76000396000f3fe6080604052600436106103b15760003560e01c80638c0b5e22116101e7578063bf6642e71161010d578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610bce578063f6a78e1714610bee578063f8b45b0514610c03578063f9d0831a14610c1957600080fd5b8063e2f4560514610b63578063e7841ec014610b79578063e98030c714610b8e578063f27fd25414610bae57600080fd5b8063d3f6a157116100dc578063d3f6a15714610abd578063db32e8f614610add578063dd62ed3e14610afd578063e2caac4514610b4357600080fd5b8063bf6642e714610a3d578063c024666814610a5d578063c851cc3214610a7d578063c896164414610a9d57600080fd5b8063a457c2d711610185578063b187bd2611610154578063b187bd26146109ac578063b40c8232146109cd578063b62496f5146109ed578063bc33718214610a1d57600080fd5b8063a457c2d7146108e7578063a8b9d24014610907578063a9059cbb14610927578063ad56c13c1461094757600080fd5b806397f735d5116101c157806397f735d5146108635780639a7a23d61461089c5780639c1b8af5146108bc578063a26579ad146108d257600080fd5b80638c0b5e221461081a5780638da5cb5b1461083057806395d89b411461084e57600080fd5b806347062402116102d757806370a082311161026a5780638456cb59116102395780638456cb59146107a5578063871c128d146107ba57806388bdd9be146107da5780638a916a02146107fa57600080fd5b806370a082311461071a578063715018a61461075057806375f0a8741461076557806379cc67901461078557600080fd5b80635d0044ca116102a65780635d0044ca146106a557806364b0f653146106c55780636843cd84146106da578063700bb191146106fa57600080fd5b806347062402146105fe57806349bd5a5e146106375780634e71d92d146106575780634fbee1931461066c57600080fd5b80632c1f52161161034f578063395093511161031e57806339509351146105895780633f4ba83a146105a957806340c10f19146105be57806342966c68146105de57600080fd5b80632c1f52161461051857806330bb4cff14610538578063313ce5671461054d57806331e79db01461056957600080fd5b806318160ddd1161038b57806318160ddd1461045057806323b872dd1461046f5780632a2685141461048f5780632b14ca56146104b157600080fd5b806306fdde03146103bd578063095ea7b3146103e85780631694505e1461041857600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610c39565b6040516103df9190614075565b60405180910390f35b3480156103f457600080fd5b506104086104033660046140d8565b610ccb565b60405190151581526020016103df565b34801561042457600080fd5b50600854610438906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b34801561045c57600080fd5b506002545b6040519081526020016103df565b34801561047b57600080fd5b5061040861048a366004614104565b610ce2565b34801561049b57600080fd5b506104af6104aa36600461419f565b610d91565b005b3480156104bd57600080fd5b506007546104ea9061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103df565b34801561052457600080fd5b50600a54610438906001600160a01b031681565b34801561054457600080fd5b50610461610ebf565b34801561055957600080fd5b50604051601281526020016103df565b34801561057557600080fd5b506104af6105843660046141f6565b610f32565b34801561059557600080fd5b506104086105a43660046140d8565b610fbf565b3480156105b557600080fd5b506104af610ffb565b3480156105ca57600080fd5b506104af6105d93660046140d8565b611034565b3480156105ea57600080fd5b506104af6105f9366004614213565b61106c565b34801561060a57600080fd5b506006546104ea9061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b34801561064357600080fd5b50600954610438906001600160a01b031681565b34801561066357600080fd5b506104af611079565b34801561067857600080fd5b506104086106873660046141f6565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156106b157600080fd5b506104af6106c0366004614213565b6110ee565b3480156106d157600080fd5b5061046161117a565b3480156106e657600080fd5b506104616106f53660046141f6565b6111c4565b34801561070657600080fd5b506104af610715366004614213565b611234565b34801561072657600080fd5b506104616107353660046141f6565b6001600160a01b031660009081526020819052604090205490565b34801561075c57600080fd5b506104af611306565b34801561077157600080fd5b50600f54610438906001600160a01b031681565b34801561079157600080fd5b506104af6107a03660046140d8565b61133c565b3480156107b157600080fd5b506104af6113be565b3480156107c657600080fd5b506104af6107d5366004614213565b6113fd565b3480156107e657600080fd5b506104af6107f53660046141f6565b61154e565b34801561080657600080fd5b506104af61081536600461422c565b611994565b34801561082657600080fd5b50610461600d5481565b34801561083c57600080fd5b506005546001600160a01b0316610438565b34801561085a57600080fd5b506103d2611a1d565b34801561086f57600080fd5b5061040861087e3660046141f6565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156108a857600080fd5b506104af6108b736600461426e565b611a2c565b3480156108c857600080fd5b5061046160105481565b3480156108de57600080fd5b50610461611af8565b3480156108f357600080fd5b506104086109023660046140d8565b611b42565b34801561091357600080fd5b506104616109223660046141f6565b611bdb565b34801561093357600080fd5b506104086109423660046140d8565b611c0e565b34801561095357600080fd5b506109676109623660046141f6565b611c1b565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016103df565b3480156109b857600080fd5b5060095461040890600160a81b900460ff1681565b3480156109d957600080fd5b506104af6109e83660046142be565b611cb6565b3480156109f957600080fd5b50610408610a083660046141f6565b60126020526000908152604090205460ff1681565b348015610a2957600080fd5b506104af610a38366004614213565b611ded565b348015610a4957600080fd5b506104af610a58366004614213565b611e6d565b348015610a6957600080fd5b506104af610a7836600461426e565b611eaf565b348015610a8957600080fd5b506104af610a983660046141f6565b611f38565b348015610aa957600080fd5b506104af610ab83660046141f6565b61230a565b348015610ac957600080fd5b506104af610ad8366004614312565b6123a2565b348015610ae957600080fd5b506104af610af83660046142be565b612467565b348015610b0957600080fd5b50610461610b18366004614312565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b4f57600080fd5b506104af610b5e3660046141f6565b61259f565b348015610b6f57600080fd5b50610461600c5481565b348015610b8557600080fd5b506104616126df565b348015610b9a57600080fd5b506104af610ba9366004614213565b612729565b348015610bba57600080fd5b50610967610bc9366004614213565b612784565b348015610bda57600080fd5b506104af610be93660046141f6565b6127c6565b348015610bfa57600080fd5b5061040861285e565b348015610c0f57600080fd5b50610461600e5481565b348015610c2557600080fd5b506104af610c343660046141f6565b61289d565b606060038054610c4890614340565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7490614340565b8015610cc15780601f10610c9657610100808354040283529160200191610cc1565b820191906000526020600020905b815481529060010190602001808311610ca457829003601f168201915b5050505050905090565b6000610cd8338484612a56565b5060015b92915050565b6000610cef848484612b7a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d795760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610d868533858403612a56565b506001949350505050565b6005546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610d709061437a565b60005b82811015610eb9578160136000868685818110610ddd57610ddd6143af565b9050602002016020810190610df291906141f6565b6001600160a01b0390811682526020820192909252604001600020805460ff191692151592909217909155600a54166331e79db0858584818110610e3857610e386143af565b9050602002016020810190610e4d91906141f6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b505050508080610eb1906143db565b915050610dbe565b50505050565b600a54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d91906143f4565b905090565b6005546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610d709061437a565b600a5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610fa457600080fd5b505af1158015610fb8573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd8918590610ff690869061440d565b612a56565b6005546001600160a01b031633146110255760405162461bcd60e51b8152600401610d709061437a565b6009805460ff60a81b19169055565b6005546001600160a01b0316331461105e5760405162461bcd60e51b8152600401610d709061437a565b61106882826132af565b5050565b611076338261338e565b50565b600a5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110769190614420565b6005546001600160a01b031633146111185760405162461bcd60e51b8152600401610d709061437a565b611144670de0b6b3a764000061113e6103e861113e603261113860025490565b90612a37565b90612a4a565b81116111625760405162461bcd60e51b8152600401610d709061443d565b61117481670de0b6b3a7640000614469565b600e5550565b600a54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610f09573d6000803e3d6000fd5b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc91906143f4565b600a546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ab9190614480565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6005546001600160a01b031633146113305760405162461bcd60e51b8152600401610d709061437a565b61133a60006134dc565b565b6001600160a01b03821660009081526001602090815260408083203384529091529020548181116113af5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f75676820617070726f76656420746f6b656e730000000000006044820152606401610d70565b6113b9838361338e565b505050565b6005546001600160a01b031633146113e85760405162461bcd60e51b8152600401610d709061437a565b6009805460ff60a81b1916600160a81b179055565b6005546001600160a01b031633146114275760405162461bcd60e51b8152600401610d709061437a565b62030d40811015801561143d57506207a1208111155b6114af5760405162461bcd60e51b815260206004820152603a60248201527f544845533a20676173466f7250726f63657373696e67206d757374206265206260448201527f65747765656e203230302c30303020616e64203530302c3030300000000000006064820152608401610d70565b601054810361151b5760405162461bcd60e51b815260206004820152603260248201527f544845533a2043616e6e6f742075706461746520676173466f7250726f63657360448201527173696e6720746f2073616d652076616c756560701b6064820152608401610d70565b60105460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601055565b6005546001600160a01b031633146115785760405162461bcd60e51b8152600401610d709061437a565b600a546001600160a01b03908116908216036115f25760405162461bcd60e51b815260206004820152603360248201527f544845533a20546865206469766964656e6420747261636b657220616c7265616044820152726479206861732074686174206164647265737360681b6064820152608401610d70565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561163f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166391906144ae565b6001600160a01b0316146116f05760405162461bcd60e51b815260206004820152604860248201527f544845533a20546865206e6577206469766964656e6420747261636b6572206d60448201527f757374206265206f776e65642062792074686520544f4b454e20746f6b656e2060648201526718dbdb9d1c9858dd60c21b608482015260a401610d70565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db06117c46005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b505060405163031e79db60e41b8152600060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b5050600a546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600a80546001600160a01b0319166001600160a01b039290921691909117905550565b600f546001600160a01b031633146119ab57600080fd5b60005b818110156113b9576000601360008585858181106119ce576119ce6143af565b90506020020160208101906119e391906141f6565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611a15816143db565b9150506119ae565b606060048054610c4890614340565b6005546001600160a01b03163314611a565760405162461bcd60e51b8152600401610d709061437a565b6009546001600160a01b0390811690831603611aee5760405162461bcd60e51b815260206004820152604b60248201527f544845533a205468652050616e63616b655377617020706169722063616e6e6f60448201527f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b6560648201526a744d616b6572506169727360a81b608482015260a401610d70565b611068828261352e565b600a5460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610f09573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d70565b611bd13385858403612a56565b5060019392505050565b600a546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016111f3565b6000610cd8338484612b7a565b600a5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b61010060405180830381865afa158015611c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9b91906144cb565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b03163314611ce05760405162461bcd60e51b8152600401610d709061437a565b6006805461ffff86811663ffffffff19909216919091176201000086831681029190911767ffffffff000000001916600160201b868416810267ffff000000000000191691909117600160301b868516810291909117948590558404831693908104831692611d5492820481169116614535565b611d5e9190614535565b611d689190614535565b6009805461ffff60b01b1916600160b01b61ffff93841681029190911791829055601491049091161115610eb95760405162461bcd60e51b815260206004820152602660248201527f544845533a204d6178206275792066656573206c696d69742069732032302070604482015265195c98d95b9d60d21b6064820152608401610d70565b6005546001600160a01b03163314611e175760405162461bcd60e51b8152600401610d709061437a565b611e37670de0b6b3a764000061113e6103e861113e600a61113860025490565b8111611e555760405162461bcd60e51b8152600401610d709061443d565b611e6781670de0b6b3a7640000614469565b600d5550565b6005546001600160a01b03163314611e975760405162461bcd60e51b8152600401610d709061437a565b611ea981670de0b6b3a7640000614469565b600c5550565b6005546001600160a01b03163314611ed95760405162461bcd60e51b8152600401610d709061437a565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f625760405162461bcd60e51b8152600401610d709061437a565b6008546001600160a01b0390811690821603611fd25760405162461bcd60e51b815260206004820152602960248201527f544845533a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b6064820152608401610d70565b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801561202e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205291906144ae565b6001600160a01b031663e6a4390530600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d891906144ae565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612123573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214791906144ae565b90506001600160a01b0381166122e957600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ce91906144ae565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225491906144ae565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156122a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c591906144ae565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b600980546001600160a01b0383166001600160a01b03199091161790555050565b600f546001600160a01b0316331461232157600080fd5b6001600160a01b03811660009081526013602052604090205460ff166123815760405162461bcd60e51b81526020600482015260156024820152741058d8dbdd5b9d081a5cc81b9bdd0818985b9b9959605a1b6044820152606401610d70565b6001600160a01b03166000908152601360205260409020805460ff19169055565b6005546001600160a01b031633146123cc5760405162461bcd60e51b8152600401610d709061437a565b6001600160a01b0382166124395760405162461bcd60e51b815260206004820152602e60248201527f544845533a206d61726b6574696e672057616c6c65742063616e27742062652060448201526d61207a65726f206164647265737360901b6064820152608401610d70565b600f80546001600160a01b039384166001600160a01b031991821617909155600b8054929093169116179055565b6005546001600160a01b031633146124915760405162461bcd60e51b8152600401610d709061437a565b6007805461ffff86811663ffffffff19909216919091176201000086831681029190911767ffffffff000000001916600160201b868416810267ffff000000000000191691909117600160301b86851681029190911794859055840483169390810483169261250592820481169116614535565b61250f9190614535565b6125199190614535565b6009805461ffff60c01b1916600160c01b61ffff93841681029190911791829055601491049091161115610eb95760405162461bcd60e51b815260206004820152602760248201527f544845533a204d61782053656c6c2066656573206c696d6974206973203230206044820152661c195c98d95b9d60ca1b6064820152608401610d70565b6005546001600160a01b031633146125c95760405162461bcd60e51b8152600401610d709061437a565b6008546001600160a01b03908116908216036126275760405162461bcd60e51b815260206004820152601960248201527f43616e27742062616e20556e697377617020726f757465722e000000000000006044820152606401610d70565b6001600160a01b03811660009081526013602052604090205460ff16156126905760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c72656164792062616e6e6564000000000000006044820152606401610d70565b6001600160a01b0381811660008181526013602052604090819020805460ff19166001179055600a54905163031e79db60e41b81526004810192909252909116906331e79db090602401610f8a565b600a546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610f09573d6000803e3d6000fd5b6005546001600160a01b031633146127535760405162461bcd60e51b8152600401610d709061437a565b600a5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610f8a565b600a54604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd90602401611c59565b6005546001600160a01b031633146127f05760405162461bcd60e51b8152600401610d709061437a565b6001600160a01b0381166128555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d70565b611076816134dc565b6005546000906001600160a01b0316331461288b5760405162461bcd60e51b8152600401610d709061437a565b600254600d55600254600e5550600190565b6005546001600160a01b031633146128c75760405162461bcd60e51b8152600401610d709061437a565b306001600160a01b038216036128ef5760405162461bcd60e51b8152600401610d709061443d565b6001600160a01b038116612936576005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611068573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a391906143f4565b9050816001600160a01b031663a9059cbb6129c66005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015612a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190614420565b6000612a438284614469565b9392505050565b6000612a43828461456d565b6001600160a01b038316612ab85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d70565b6001600160a01b038216612b195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d70565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ba05760405162461bcd60e51b8152600401610d7090614581565b6001600160a01b038216612bc65760405162461bcd60e51b8152600401610d70906145c6565b6001600160a01b03821660009081526013602052604090205460ff1615612c295760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610d70565b3260009081526013602052604090205460ff1615612c835760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610d70565b600954600160a81b900460ff1615612cdd5760405162461bcd60e51b815260206004820152601960248201527f45524332303a20436f6e747261637420697320506175736564000000000000006044820152606401610d70565b80600003612cf1576113b98383600061368d565b30600090815260208190526040902054600c5481108015908190612d1f5750600954600160a01b900460ff16155b8015612d4457506001600160a01b03851660009081526012602052604090205460ff16155b8015612d5e57506005546001600160a01b03868116911614155b8015612d7857506005546001600160a01b03858116911614155b15612e92576009805460ff60a01b1916600160a01b1790819055600090612db39061ffff600160c01b8204811691600160b01b900416614535565b600754600654919250600091612e159161ffff8086169261113e92600160301b808204841693908304811692612df6926201000090819004831692910416614535565b612e009190614535565b612e0a9190614535565b879061ffff16612a37565b9050612e20816137e1565b600754600654600091612e769161ffff8087169261113e92600160201b808304841693908204811692612e57929082169116614535565b612e619190614535565b612e6b9190614535565b889061ffff16612a37565b9050612e8181613998565b50506009805460ff60a01b19169055505b6009546001600160a01b03861660009081526011602052604090205460ff600160a01b909204821615911680612ee057506001600160a01b03851660009081526011602052604090205460ff165b15612ee9575060005b80156130b4576000600d54851115612f5f5760405162461bcd60e51b815260206004820152603360248201527f544845533a20416d6f756e742065786365656473207472616e736665722070656044820152721c881d1c985b9cd858dd1a5bdb881b1a5b5a5d606a1b6064820152608401610d70565b6001600160a01b03861660009081526012602052604090205460ff1661300957600e5485612fa2886001600160a01b031660009081526020819052604090205490565b612fac919061440d565b11156130095760405162461bcd60e51b815260206004820152602660248201527f544845533a2042616c616e63652065786365656473204d61782057616c6c6574604482015265081b1a5b5a5d60d21b6064820152608401610d70565b6001600160a01b03871660009081526012602052604090205460ff16156130515760095461304a9060649061113e908890600160b01b900461ffff16612a37565b9050613095565b6001600160a01b03861660009081526012602052604090205460ff1615613095576009546130929060649061113e908890600160c01b900461ffff16612a37565b90505b80156130b2576130a58582613cff565b94506130b287308361368d565b505b6130bf86868661368d565b600a546001600160a01b031663e30443bc876130f0816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561313657600080fd5b505af1925050508015613147575060015b50600a546001600160a01b031663e30443bc86613179816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156131bf57600080fd5b505af19250505080156131d0575060015b50600954600160a01b900460ff166132a757601054600a546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af192505050801561324f575060408051601f3d908101601f1916820190925261324c91810190614480565b60015b156132a55760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b505050505050565b6001600160a01b0382166133055760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d70565b8060026000828254613317919061440d565b90915550506001600160a01b0382166000908152602081905260408120805483929061334490849061440d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166133ee5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d70565b6001600160a01b038216600090815260208190526040902054818110156134625760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d70565b6001600160a01b0383166000908152602081905260408120838303905560028054849290613491908490614609565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036135c45760405162461bcd60e51b815260206004820152603e60248201527f544845533a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c756500006064820152608401610d70565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561365157600a5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561363857600080fd5b505af115801561364c573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166136b35760405162461bcd60e51b8152600401610d7090614581565b6001600160a01b0382166136d95760405162461bcd60e51b8152600401610d70906145c6565b6001600160a01b038316600090815260208190526040902054818110156137515760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d70565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061378890849061440d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137d491815260200190565b60405180910390a3610eb9565b600754600654479160009161389f9161ffff600160301b80830482169390810482169261381d9262010000918290048116929190910416614535565b6138279190614535565b6138319190614535565b60075460065461ffff9283169261113e9260029261385e92600160301b9283900481169290910416614535565b613868919061461c565b60075460065461388a9161ffff62010000918290048116929190910416614535565b6138949190614535565b869061ffff16612a37565b905060006138ad8285614609565b90506138b882613d0b565b60006138c44785613cff565b6007546006549192506000916139499161ffff600160301b8083048216939081048216926139019262010000918290048116929190910416614535565b61390b9190614535565b6139159190614535565b60075460065461ffff9283169261113e9261393e92620100009182900483169291900416614535565b859061ffff16612a37565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613984573d6000803e3d6000fd5b506132a7836139938385614609565b613e5d565b6040516370a0823160e01b8152306004820152600090730cba60ca5ef4d42f92a5070a8fedd13be93e2861906370a0823190602401602060405180830381865afa1580156139ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0e91906143f4565b9050613a1982613f07565b6040516370a0823160e01b8152306004820152600090613a9b908390730cba60ca5ef4d42f92a5070a8fedd13be93e2861906370a0823190602401602060405180830381865afa158015613a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a9591906143f4565b90613cff565b600754600654919250600091613b0e9161ffff8082169280821692613ad092600160201b918290048116929190910416614535565b613ada9190614535565b613ae49190614535565b60075460065461ffff9283169261113e9261393e92600160201b9182900483169291900416614535565b600b5460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101829052909150730cba60ca5ef4d42f92a5070a8fedd13be93e28619063a9059cbb906044016020604051808303816000875af1158015613b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9a9190614420565b50600a54600090730cba60ca5ef4d42f92a5070a8fedd13be93e28619063a9059cbb906001600160a01b0316613bd08587614609565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c3f9190614420565b90508015610fb857600a546001600160a01b0316632604364b613c628486614609565b6040518263ffffffff1660e01b8152600401613c8091815260200190565b600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b505050507f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc3858385613ce09190614609565b6040805192835260208301919091520160405180910390a15050505050565b6000612a438284614609565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d4057613d406143af565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dbd91906144ae565b81600181518110613dd057613dd06143af565b6001600160a01b039283166020918202929092010152600854613df69130911684612a56565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e2f90859060009086903090429060040161463d565b600060405180830381600087803b158015613e4957600080fd5b505af11580156132a7573d6000803e3d6000fd5b600854613e759030906001600160a01b031684612a56565b60085460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613ee2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fb89190614480565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110613f3e57613f3e6143af565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fbb91906144ae565b81600181518110613fce57613fce6143af565b60200260200101906001600160a01b031690816001600160a01b031681525050730cba60ca5ef4d42f92a5070a8fedd13be93e286181600281518110614016576140166143af565b6001600160a01b03928316602091820292909201015260085461403c9130911684612a56565b600854604051635c11d79560e01b81526001600160a01b0390911690635c11d79590613e2f90859060009086903090429060040161463d565b600060208083528351808285015260005b818110156140a257858101830151858201604001528201614086565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461107657600080fd5b600080604083850312156140eb57600080fd5b82356140f6816140c3565b946020939093013593505050565b60008060006060848603121561411957600080fd5b8335614124816140c3565b92506020840135614134816140c3565b929592945050506040919091013590565b60008083601f84011261415757600080fd5b50813567ffffffffffffffff81111561416f57600080fd5b6020830191508360208260051b850101111561418a57600080fd5b9250929050565b801515811461107657600080fd5b6000806000604084860312156141b457600080fd5b833567ffffffffffffffff8111156141cb57600080fd5b6141d786828701614145565b90945092505060208401356141eb81614191565b809150509250925092565b60006020828403121561420857600080fd5b8135612a43816140c3565b60006020828403121561422557600080fd5b5035919050565b6000806020838503121561423f57600080fd5b823567ffffffffffffffff81111561425657600080fd5b61426285828601614145565b90969095509350505050565b6000806040838503121561428157600080fd5b823561428c816140c3565b9150602083013561429c81614191565b809150509250929050565b803561ffff811681146142b957600080fd5b919050565b600080600080608085870312156142d457600080fd5b6142dd856142a7565b93506142eb602086016142a7565b92506142f9604086016142a7565b9150614307606086016142a7565b905092959194509250565b6000806040838503121561432557600080fd5b8235614330816140c3565b9150602083013561429c816140c3565b600181811c9082168061435457607f821691505b60208210810361437457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016143ed576143ed6143c5565b5060010190565b60006020828403121561440657600080fd5b5051919050565b80820180821115610cdc57610cdc6143c5565b60006020828403121561443257600080fd5b8151612a4381614191565b602080825260129082015271544845533a204e6f7420616c6c6f7765642160701b604082015260600190565b8082028115828204841417610cdc57610cdc6143c5565b60008060006060848603121561449557600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156144c057600080fd5b8151612a43816140c3565b600080600080600080600080610100898b0312156144e857600080fd5b88516144f3816140c3565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b61ffff818116838216019080821115614550576145506143c5565b5092915050565b634e487b7160e01b600052601260045260246000fd5b60008261457c5761457c614557565b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610cdc57610cdc6143c5565b600061ffff8084168061463157614631614557565b92169190910492915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561468d5784516001600160a01b031683529383019391830191600101614668565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e5e2ee805858586df26ad496d4fd3046e9b55b81112e543468e1f3c15aa4810664736f6c6343000811003360a06040523480156200001157600080fd5b5060408051808201825260188082527f544845536869625f4469766964656e645f547261636b6572000000000000000060208084018290528451808601909552918452908301529081816003620000698382620001aa565b506004620000788282620001aa565b505050620000956200008f620000af60201b60201c565b620000b3565b5050610e10601155670de0b6b3a764000060805262000276565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013057607f821691505b6020821081036200015157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001a557600081815260208120601f850160051c81016020861015620001805750805b601f850160051c820191505b81811015620001a1578281556001016200018c565b5050505b505050565b81516001600160401b03811115620001c657620001c662000105565b620001de81620001d784546200011b565b8462000157565b602080601f831160018114620002165760008415620001fd5750858301515b600019600386901b1c1916600185901b178555620001a1565b600085815260208120601f198616915b82811015620002475788860151825594840194600190910190840162000226565b5085821015620002665787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611dde62000299600039600081816104950152610c2c0152611dde6000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806385a6b3ae11610125578063be10b614116100ad578063e7841ec01161007c578063e7841ec01461051e578063e98030c714610526578063f2fde38b14610539578063fbcbc0f11461054c578063ffb2c4791461055f57600080fd5b8063be10b61414610490578063cbcbecb9146104b7578063dd62ed3e146104d2578063e30443bc1461050b57600080fd5b8063a457c2d7116100f4578063a457c2d71461041b578063a8b9d2401461042e578063a9059cbb14610441578063aafd847a14610454578063bc4c4b371461047d57600080fd5b806385a6b3ae146103d25780638da5cb5b146103db57806391b89fba1461040057806395d89b411461041357600080fd5b8063313ce567116101a85780635183d6fd116101775780635183d6fd146103385780636a474002146103905780636f2789ec1461039857806370a08231146103a1578063715018a6146103ca57600080fd5b8063313ce567146102e057806331e79db0146102ef57806339509351146103025780634e7b827f1461031557600080fd5b8063226cfa3d116101ef578063226cfa3d1461027c57806323b872dd1461029c5780632604364b146102af57806327ce0147146102c45780633009a609146102d757600080fd5b806306fdde0314610221578063095ea7b31461023f57806309bbedde1461026257806318160ddd14610274575b600080fd5b61022961058d565b6040516102369190611a9f565b60405180910390f35b61025261024d366004611b02565b61061f565b6040519015158152602001610236565b600a545b604051908152602001610236565b600254610266565b61026661028a366004611b2e565b60106020526000908152604090205481565b6102526102aa366004611b4b565b610636565b6102c26102bd366004611b8c565b6106e5565b005b6102666102d2366004611b2e565b6107a3565b610266600e5481565b60405160128152602001610236565b6102c26102fd366004611b2e565b6107ff565b610252610310366004611b02565b6108bf565b610252610323366004611b2e565b600f6020526000908152604090205460ff1681565b61034b610346366004611b8c565b6108fb565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610236565b6102c261096a565b61026660115481565b6102666103af366004611b2e565b6001600160a01b031660009081526020819052604090205490565b6102c2610a12565b61026660095481565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610236565b61026661040e366004611b2e565b610a46565b610229610a51565b610252610429366004611b02565b610a60565b61026661043c366004611b2e565b610af9565b61025261044f366004611b02565b610b25565b610266610462366004611b2e565b6001600160a01b031660009081526008602052604090205490565b61025261048b366004611bb3565b610b32565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6103e8730cba60ca5ef4d42f92a5070a8fedd13be93e286181565b6102666104e0366004611bec565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102c2610519366004611b02565b610be0565b600e54610266565b6102c2610534366004611b8c565b610c93565b6102c2610547366004611b2e565b610e04565b61034b61055a366004611b2e565b610e9c565b61057261056d366004611b8c565b610f85565b60408051938452602084019290925290820152606001610236565b60606003805461059c90611c1a565b80601f01602080910402602001604051908101604052809291908181526020018280546105c890611c1a565b80156106155780601f106105ea57610100808354040283529160200191610615565b820191906000526020600020905b8154815290600101906020018083116105f857829003601f168201915b5050505050905090565b600061062c3384846110a2565b5060015b92915050565b60006106438484846111c6565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156106cd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106da85338584036110a2565b506001949350505050565b6005546001600160a01b0316331461070f5760405162461bcd60e51b81526004016106c490611c54565b600061071a60025490565b1161072457600080fd5b80156107a05761075761073660025490565b61074483600160801b611225565b61074e9190611c9f565b60065490611238565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a260095461079c9082611238565b6009555b50565b6001600160a01b03811660009081526007602090815260408083205491839052822054600654600160801b926107f5926107f0926107ea916107e59190611225565b611244565b90611254565b611292565b6106309190611c9f565b6005546001600160a01b031633146108295760405162461bcd60e51b81526004016106c490611c54565b6001600160a01b0381166000908152600f602052604090205460ff161561084f57600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff1916600117905561087d9082906112a5565b610888600a8261130a565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161062c9185906108f6908690611cc1565b6110a2565b600080600080600080600080610910600a5490565b891061093557506000965060001995508594508693508392508291508190508061095f565b6000610942600a8b611445565b905061094d81610e9c565b98509850985098509850985098509850505b919395975091939597565b60405162461bcd60e51b815260206004820152606960248201527f544845536869625f4469766964656e645f547261636b65723a2077697468647260448201527f61774469766964656e642064697361626c65642e20557365207468652027636c60648201527f61696d272066756e6374696f6e206f6e20746865206d61696e20544f4b454e2060848201526831b7b73a3930b1ba1760b91b60a482015260c4016106c4565b565b6005546001600160a01b03163314610a3c5760405162461bcd60e51b81526004016106c490611c54565b610a106000611478565b600061063082610af9565b60606004805461059c90611c1a565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610ae25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106c4565b610aef33858584036110a2565b5060019392505050565b6001600160a01b03811660009081526008602052604081205461063090610b1f846107a3565b906114ca565b600061062c3384846111c6565b6005546000906001600160a01b03163314610b5f5760405162461bcd60e51b81526004016106c490611c54565b6000610b6a846114d6565b90508015610bd6576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610bc49085815260200190565b60405180910390a36001915050610630565b5060009392505050565b6005546001600160a01b03163314610c0a5760405162461bcd60e51b81526004016106c490611c54565b6001600160a01b0382166000908152600f602052604090205460ff16610c8f577f00000000000000000000000000000000000000000000000000000000000000008110610c6c57610c5b82826112a5565b610c67600a838361164b565b610c82565b610c778260006112a5565b610c82600a8361130a565b610c8d826001610b32565b505b5050565b6005546001600160a01b03163314610cbd5760405162461bcd60e51b81526004016106c490611c54565b610e108110158015610cd25750620151808111155b610d5a5760405162461bcd60e51b815260206004820152604d60248201527f544845536869625f4469766964656e645f547261636b65723a20636c61696d5760448201527f616974206d757374206265207570646174656420746f206265747765656e203160648201526c20616e6420323420686f75727360981b608482015260a4016106c4565b6011548103610dd15760405162461bcd60e51b815260206004820152603f60248201527f544845536869625f4469766964656e645f547261636b65723a2043616e6e6f7460448201527f2075706461746520636c61696d5761697420746f2073616d652076616c75650060648201526084016106c4565b60115460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601155565b6005546001600160a01b03163314610e2e5760405162461bcd60e51b81526004016106c490611c54565b6001600160a01b038116610e935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c4565b6107a081611478565b806000808080808080610eb0600a896116f4565b9650600019955060008712610f1257600e54871115610ede57600e54610ed790889061173f565b9550610f12565b600e54600a5460009110610ef3576000610f02565b600e54600a54610f02916114ca565b9050610f0e8882611254565b9650505b610f1b88610af9565b9450610f26886107a3565b6001600160a01b038916600090815260106020526040902054909450925082610f50576000610f5e565b601154610f5e908490611238565b9150428211610f6e576000610f78565b610f7882426114ca565b9050919395975091939597565b600a5460009081908190808203610fa7575050600e546000925082915061109b565b600e546000805a90506000805b8984108015610fc257508582105b1561108a5784610fd181611cd4565b600a5490965086109050610fe457600094505b6000600a6000018681548110610ffc57610ffc611ced565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915061102d9061177c565b156110505761103d816001610b32565b15611050578161104c81611cd4565b9250505b8261105a81611cd4565b93505060005a9050808511156110815761107e61107786836114ca565b8790611238565b95505b9350610fb49050565b600e85905590975095509193505050505b9193909250565b6001600160a01b0383166111045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c4565b6001600160a01b0382166111655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602e60248201527f544845536869625f4469766964656e645f547261636b65723a204e6f2074726160448201526d1b9cd9995c9cc8185b1b1bddd95960921b60648201526084016106c4565b60006112318284611d03565b9392505050565b60006112318284611cc1565b6000818181121561063057600080fd5b6000806112618385611d1a565b9050600083121580156112745750838112155b80611289575060008312801561128957508381125b61123157600080fd5b6000808212156112a157600080fd5b5090565b6001600160a01b038216600090815260208190526040902054808211156112e45760006112d283836114ca565b90506112de84826117a3565b50610c8d565b80821015610c8d5760006112f882846114ca565b90506113048482611807565b50505050565b6001600160a01b038116600090815260038301602052604090205460ff16611330575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161137a91611d42565b9050600084600001828154811061139357611393611ced565b60009182526020808320909101546001600160a01b039081168084526002890190925260408084208790559087168352822091909155855490915081908690859081106113e2576113e2611ced565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055845485908061141c5761141c611d55565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600082600001828154811061145c5761145c611ced565b6000918252602090912001546001600160a01b03169392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006112318284611d42565b6000806114e283610af9565b90508015611642576001600160a01b03831660009081526008602052604090205461150d9082611238565b6001600160a01b038416600081815260086020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061155c9084815260200190565b60405180910390a260405163a9059cbb60e01b81526001600160a01b038416600482015260248101829052600090730cba60ca5ef4d42f92a5070a8fedd13be93e28619063a9059cbb906044016020604051808303816000875af11580156115c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ec9190611d6b565b90508061163b576001600160a01b03841660009081526008602052604090205461161690836114ca565b6001600160a01b03909416600090815260086020526040812094909455509192915050565b5092915050565b50600092915050565b6001600160a01b038216600090815260038401602052604090205460ff1615611690576001600160a01b03821660009081526001840160205260409020819055610c8d565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff1661171f5750600019610630565b506001600160a01b03166000908152600291909101602052604090205490565b60008061174c8385611d88565b90506000831215801561175f5750838113155b806112895750600083128015611289575083811361123157600080fd5b60004282111561178e57506000919050565b60115461179b42846114ca565b101592915050565b6117ad828261184b565b6117e76117c86107e58360065461122590919063ffffffff16565b6001600160a01b0384166000908152600760205260409020549061173f565b6001600160a01b0390921660009081526007602052604090209190915550565b611811828261193e565b6117e761182c6107e58360065461122590919063ffffffff16565b6001600160a01b03841660009081526007602052604090205490611254565b6001600160a01b0382166118a15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106c4565b6118ad60008383610c8d565b80600260008282546118bf9190611cc1565b90915550506001600160a01b038216600090815260208190526040812080548392906118ec908490611cc1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610c8f60008383610c8d565b6001600160a01b03821661199e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106c4565b6119aa82600083610c8d565b6001600160a01b03821660009081526020819052604090205481811015611a1e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106c4565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611a4d908490611d42565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610c8d83600084610c8d565b600060208083528351808285015260005b81811015611acc57858101830151858201604001528201611ab0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146107a057600080fd5b60008060408385031215611b1557600080fd5b8235611b2081611aed565b946020939093013593505050565b600060208284031215611b4057600080fd5b813561123181611aed565b600080600060608486031215611b6057600080fd5b8335611b6b81611aed565b92506020840135611b7b81611aed565b929592945050506040919091013590565b600060208284031215611b9e57600080fd5b5035919050565b80151581146107a057600080fd5b60008060408385031215611bc657600080fd5b8235611bd181611aed565b91506020830135611be181611ba5565b809150509250929050565b60008060408385031215611bff57600080fd5b8235611c0a81611aed565b91506020830135611be181611aed565b600181811c90821680611c2e57607f821691505b602082108103611c4e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611cbc57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561063057610630611c89565b600060018201611ce657611ce6611c89565b5060010190565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761063057610630611c89565b8082018281126000831280158216821582161715611d3a57611d3a611c89565b505092915050565b8181038181111561063057610630611c89565b634e487b7160e01b600052603160045260246000fd5b600060208284031215611d7d57600080fd5b815161123181611ba5565b818103600083128015838313168383128216171561163b5761163b611c8956fea2646970667358221220d19fdff281a90584f04329a8a79f03f1ab2cc758eb81f61318a743081e5fdbac64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638c0b5e22116101e7578063bf6642e71161010d578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610bce578063f6a78e1714610bee578063f8b45b0514610c03578063f9d0831a14610c1957600080fd5b8063e2f4560514610b63578063e7841ec014610b79578063e98030c714610b8e578063f27fd25414610bae57600080fd5b8063d3f6a157116100dc578063d3f6a15714610abd578063db32e8f614610add578063dd62ed3e14610afd578063e2caac4514610b4357600080fd5b8063bf6642e714610a3d578063c024666814610a5d578063c851cc3214610a7d578063c896164414610a9d57600080fd5b8063a457c2d711610185578063b187bd2611610154578063b187bd26146109ac578063b40c8232146109cd578063b62496f5146109ed578063bc33718214610a1d57600080fd5b8063a457c2d7146108e7578063a8b9d24014610907578063a9059cbb14610927578063ad56c13c1461094757600080fd5b806397f735d5116101c157806397f735d5146108635780639a7a23d61461089c5780639c1b8af5146108bc578063a26579ad146108d257600080fd5b80638c0b5e221461081a5780638da5cb5b1461083057806395d89b411461084e57600080fd5b806347062402116102d757806370a082311161026a5780638456cb59116102395780638456cb59146107a5578063871c128d146107ba57806388bdd9be146107da5780638a916a02146107fa57600080fd5b806370a082311461071a578063715018a61461075057806375f0a8741461076557806379cc67901461078557600080fd5b80635d0044ca116102a65780635d0044ca146106a557806364b0f653146106c55780636843cd84146106da578063700bb191146106fa57600080fd5b806347062402146105fe57806349bd5a5e146106375780634e71d92d146106575780634fbee1931461066c57600080fd5b80632c1f52161161034f578063395093511161031e57806339509351146105895780633f4ba83a146105a957806340c10f19146105be57806342966c68146105de57600080fd5b80632c1f52161461051857806330bb4cff14610538578063313ce5671461054d57806331e79db01461056957600080fd5b806318160ddd1161038b57806318160ddd1461045057806323b872dd1461046f5780632a2685141461048f5780632b14ca56146104b157600080fd5b806306fdde03146103bd578063095ea7b3146103e85780631694505e1461041857600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610c39565b6040516103df9190614075565b60405180910390f35b3480156103f457600080fd5b506104086104033660046140d8565b610ccb565b60405190151581526020016103df565b34801561042457600080fd5b50600854610438906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b34801561045c57600080fd5b506002545b6040519081526020016103df565b34801561047b57600080fd5b5061040861048a366004614104565b610ce2565b34801561049b57600080fd5b506104af6104aa36600461419f565b610d91565b005b3480156104bd57600080fd5b506007546104ea9061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103df565b34801561052457600080fd5b50600a54610438906001600160a01b031681565b34801561054457600080fd5b50610461610ebf565b34801561055957600080fd5b50604051601281526020016103df565b34801561057557600080fd5b506104af6105843660046141f6565b610f32565b34801561059557600080fd5b506104086105a43660046140d8565b610fbf565b3480156105b557600080fd5b506104af610ffb565b3480156105ca57600080fd5b506104af6105d93660046140d8565b611034565b3480156105ea57600080fd5b506104af6105f9366004614213565b61106c565b34801561060a57600080fd5b506006546104ea9061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b34801561064357600080fd5b50600954610438906001600160a01b031681565b34801561066357600080fd5b506104af611079565b34801561067857600080fd5b506104086106873660046141f6565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156106b157600080fd5b506104af6106c0366004614213565b6110ee565b3480156106d157600080fd5b5061046161117a565b3480156106e657600080fd5b506104616106f53660046141f6565b6111c4565b34801561070657600080fd5b506104af610715366004614213565b611234565b34801561072657600080fd5b506104616107353660046141f6565b6001600160a01b031660009081526020819052604090205490565b34801561075c57600080fd5b506104af611306565b34801561077157600080fd5b50600f54610438906001600160a01b031681565b34801561079157600080fd5b506104af6107a03660046140d8565b61133c565b3480156107b157600080fd5b506104af6113be565b3480156107c657600080fd5b506104af6107d5366004614213565b6113fd565b3480156107e657600080fd5b506104af6107f53660046141f6565b61154e565b34801561080657600080fd5b506104af61081536600461422c565b611994565b34801561082657600080fd5b50610461600d5481565b34801561083c57600080fd5b506005546001600160a01b0316610438565b34801561085a57600080fd5b506103d2611a1d565b34801561086f57600080fd5b5061040861087e3660046141f6565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156108a857600080fd5b506104af6108b736600461426e565b611a2c565b3480156108c857600080fd5b5061046160105481565b3480156108de57600080fd5b50610461611af8565b3480156108f357600080fd5b506104086109023660046140d8565b611b42565b34801561091357600080fd5b506104616109223660046141f6565b611bdb565b34801561093357600080fd5b506104086109423660046140d8565b611c0e565b34801561095357600080fd5b506109676109623660046141f6565b611c1b565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016103df565b3480156109b857600080fd5b5060095461040890600160a81b900460ff1681565b3480156109d957600080fd5b506104af6109e83660046142be565b611cb6565b3480156109f957600080fd5b50610408610a083660046141f6565b60126020526000908152604090205460ff1681565b348015610a2957600080fd5b506104af610a38366004614213565b611ded565b348015610a4957600080fd5b506104af610a58366004614213565b611e6d565b348015610a6957600080fd5b506104af610a7836600461426e565b611eaf565b348015610a8957600080fd5b506104af610a983660046141f6565b611f38565b348015610aa957600080fd5b506104af610ab83660046141f6565b61230a565b348015610ac957600080fd5b506104af610ad8366004614312565b6123a2565b348015610ae957600080fd5b506104af610af83660046142be565b612467565b348015610b0957600080fd5b50610461610b18366004614312565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b4f57600080fd5b506104af610b5e3660046141f6565b61259f565b348015610b6f57600080fd5b50610461600c5481565b348015610b8557600080fd5b506104616126df565b348015610b9a57600080fd5b506104af610ba9366004614213565b612729565b348015610bba57600080fd5b50610967610bc9366004614213565b612784565b348015610bda57600080fd5b506104af610be93660046141f6565b6127c6565b348015610bfa57600080fd5b5061040861285e565b348015610c0f57600080fd5b50610461600e5481565b348015610c2557600080fd5b506104af610c343660046141f6565b61289d565b606060038054610c4890614340565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7490614340565b8015610cc15780601f10610c9657610100808354040283529160200191610cc1565b820191906000526020600020905b815481529060010190602001808311610ca457829003601f168201915b5050505050905090565b6000610cd8338484612a56565b5060015b92915050565b6000610cef848484612b7a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d795760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610d868533858403612a56565b506001949350505050565b6005546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610d709061437a565b60005b82811015610eb9578160136000868685818110610ddd57610ddd6143af565b9050602002016020810190610df291906141f6565b6001600160a01b0390811682526020820192909252604001600020805460ff191692151592909217909155600a54166331e79db0858584818110610e3857610e386143af565b9050602002016020810190610e4d91906141f6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b505050508080610eb1906143db565b915050610dbe565b50505050565b600a54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d91906143f4565b905090565b6005546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610d709061437a565b600a5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610fa457600080fd5b505af1158015610fb8573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd8918590610ff690869061440d565b612a56565b6005546001600160a01b031633146110255760405162461bcd60e51b8152600401610d709061437a565b6009805460ff60a81b19169055565b6005546001600160a01b0316331461105e5760405162461bcd60e51b8152600401610d709061437a565b61106882826132af565b5050565b611076338261338e565b50565b600a5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110769190614420565b6005546001600160a01b031633146111185760405162461bcd60e51b8152600401610d709061437a565b611144670de0b6b3a764000061113e6103e861113e603261113860025490565b90612a37565b90612a4a565b81116111625760405162461bcd60e51b8152600401610d709061443d565b61117481670de0b6b3a7640000614469565b600e5550565b600a54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610f09573d6000803e3d6000fd5b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc91906143f4565b600a546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ab9190614480565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6005546001600160a01b031633146113305760405162461bcd60e51b8152600401610d709061437a565b61133a60006134dc565b565b6001600160a01b03821660009081526001602090815260408083203384529091529020548181116113af5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f75676820617070726f76656420746f6b656e730000000000006044820152606401610d70565b6113b9838361338e565b505050565b6005546001600160a01b031633146113e85760405162461bcd60e51b8152600401610d709061437a565b6009805460ff60a81b1916600160a81b179055565b6005546001600160a01b031633146114275760405162461bcd60e51b8152600401610d709061437a565b62030d40811015801561143d57506207a1208111155b6114af5760405162461bcd60e51b815260206004820152603a60248201527f544845533a20676173466f7250726f63657373696e67206d757374206265206260448201527f65747765656e203230302c30303020616e64203530302c3030300000000000006064820152608401610d70565b601054810361151b5760405162461bcd60e51b815260206004820152603260248201527f544845533a2043616e6e6f742075706461746520676173466f7250726f63657360448201527173696e6720746f2073616d652076616c756560701b6064820152608401610d70565b60105460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601055565b6005546001600160a01b031633146115785760405162461bcd60e51b8152600401610d709061437a565b600a546001600160a01b03908116908216036115f25760405162461bcd60e51b815260206004820152603360248201527f544845533a20546865206469766964656e6420747261636b657220616c7265616044820152726479206861732074686174206164647265737360681b6064820152608401610d70565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561163f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166391906144ae565b6001600160a01b0316146116f05760405162461bcd60e51b815260206004820152604860248201527f544845533a20546865206e6577206469766964656e6420747261636b6572206d60448201527f757374206265206f776e65642062792074686520544f4b454e20746f6b656e2060648201526718dbdb9d1c9858dd60c21b608482015260a401610d70565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db06117c46005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561186457600080fd5b505af1158015611878573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b505060405163031e79db60e41b8152600060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b5050600a546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600a80546001600160a01b0319166001600160a01b039290921691909117905550565b600f546001600160a01b031633146119ab57600080fd5b60005b818110156113b9576000601360008585858181106119ce576119ce6143af565b90506020020160208101906119e391906141f6565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611a15816143db565b9150506119ae565b606060048054610c4890614340565b6005546001600160a01b03163314611a565760405162461bcd60e51b8152600401610d709061437a565b6009546001600160a01b0390811690831603611aee5760405162461bcd60e51b815260206004820152604b60248201527f544845533a205468652050616e63616b655377617020706169722063616e6e6f60448201527f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b6560648201526a744d616b6572506169727360a81b608482015260a401610d70565b611068828261352e565b600a5460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610f09573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d70565b611bd13385858403612a56565b5060019392505050565b600a546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016111f3565b6000610cd8338484612b7a565b600a5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b61010060405180830381865afa158015611c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9b91906144cb565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b03163314611ce05760405162461bcd60e51b8152600401610d709061437a565b6006805461ffff86811663ffffffff19909216919091176201000086831681029190911767ffffffff000000001916600160201b868416810267ffff000000000000191691909117600160301b868516810291909117948590558404831693908104831692611d5492820481169116614535565b611d5e9190614535565b611d689190614535565b6009805461ffff60b01b1916600160b01b61ffff93841681029190911791829055601491049091161115610eb95760405162461bcd60e51b815260206004820152602660248201527f544845533a204d6178206275792066656573206c696d69742069732032302070604482015265195c98d95b9d60d21b6064820152608401610d70565b6005546001600160a01b03163314611e175760405162461bcd60e51b8152600401610d709061437a565b611e37670de0b6b3a764000061113e6103e861113e600a61113860025490565b8111611e555760405162461bcd60e51b8152600401610d709061443d565b611e6781670de0b6b3a7640000614469565b600d5550565b6005546001600160a01b03163314611e975760405162461bcd60e51b8152600401610d709061437a565b611ea981670de0b6b3a7640000614469565b600c5550565b6005546001600160a01b03163314611ed95760405162461bcd60e51b8152600401610d709061437a565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f625760405162461bcd60e51b8152600401610d709061437a565b6008546001600160a01b0390811690821603611fd25760405162461bcd60e51b815260206004820152602960248201527f544845533a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b6064820152608401610d70565b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801561202e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205291906144ae565b6001600160a01b031663e6a4390530600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d891906144ae565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612123573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214791906144ae565b90506001600160a01b0381166122e957600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ce91906144ae565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225491906144ae565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156122a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c591906144ae565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b600980546001600160a01b0383166001600160a01b03199091161790555050565b600f546001600160a01b0316331461232157600080fd5b6001600160a01b03811660009081526013602052604090205460ff166123815760405162461bcd60e51b81526020600482015260156024820152741058d8dbdd5b9d081a5cc81b9bdd0818985b9b9959605a1b6044820152606401610d70565b6001600160a01b03166000908152601360205260409020805460ff19169055565b6005546001600160a01b031633146123cc5760405162461bcd60e51b8152600401610d709061437a565b6001600160a01b0382166124395760405162461bcd60e51b815260206004820152602e60248201527f544845533a206d61726b6574696e672057616c6c65742063616e27742062652060448201526d61207a65726f206164647265737360901b6064820152608401610d70565b600f80546001600160a01b039384166001600160a01b031991821617909155600b8054929093169116179055565b6005546001600160a01b031633146124915760405162461bcd60e51b8152600401610d709061437a565b6007805461ffff86811663ffffffff19909216919091176201000086831681029190911767ffffffff000000001916600160201b868416810267ffff000000000000191691909117600160301b86851681029190911794859055840483169390810483169261250592820481169116614535565b61250f9190614535565b6125199190614535565b6009805461ffff60c01b1916600160c01b61ffff93841681029190911791829055601491049091161115610eb95760405162461bcd60e51b815260206004820152602760248201527f544845533a204d61782053656c6c2066656573206c696d6974206973203230206044820152661c195c98d95b9d60ca1b6064820152608401610d70565b6005546001600160a01b031633146125c95760405162461bcd60e51b8152600401610d709061437a565b6008546001600160a01b03908116908216036126275760405162461bcd60e51b815260206004820152601960248201527f43616e27742062616e20556e697377617020726f757465722e000000000000006044820152606401610d70565b6001600160a01b03811660009081526013602052604090205460ff16156126905760405162461bcd60e51b815260206004820152601960248201527f4163636f756e7420697320616c72656164792062616e6e6564000000000000006044820152606401610d70565b6001600160a01b0381811660008181526013602052604090819020805460ff19166001179055600a54905163031e79db60e41b81526004810192909252909116906331e79db090602401610f8a565b600a546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610f09573d6000803e3d6000fd5b6005546001600160a01b031633146127535760405162461bcd60e51b8152600401610d709061437a565b600a5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610f8a565b600a54604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd90602401611c59565b6005546001600160a01b031633146127f05760405162461bcd60e51b8152600401610d709061437a565b6001600160a01b0381166128555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d70565b611076816134dc565b6005546000906001600160a01b0316331461288b5760405162461bcd60e51b8152600401610d709061437a565b600254600d55600254600e5550600190565b6005546001600160a01b031633146128c75760405162461bcd60e51b8152600401610d709061437a565b306001600160a01b038216036128ef5760405162461bcd60e51b8152600401610d709061443d565b6001600160a01b038116612936576005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611068573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a391906143f4565b9050816001600160a01b031663a9059cbb6129c66005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015612a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190614420565b6000612a438284614469565b9392505050565b6000612a43828461456d565b6001600160a01b038316612ab85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d70565b6001600160a01b038216612b195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d70565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ba05760405162461bcd60e51b8152600401610d7090614581565b6001600160a01b038216612bc65760405162461bcd60e51b8152600401610d70906145c6565b6001600160a01b03821660009081526013602052604090205460ff1615612c295760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610d70565b3260009081526013602052604090205460ff1615612c835760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610d70565b600954600160a81b900460ff1615612cdd5760405162461bcd60e51b815260206004820152601960248201527f45524332303a20436f6e747261637420697320506175736564000000000000006044820152606401610d70565b80600003612cf1576113b98383600061368d565b30600090815260208190526040902054600c5481108015908190612d1f5750600954600160a01b900460ff16155b8015612d4457506001600160a01b03851660009081526012602052604090205460ff16155b8015612d5e57506005546001600160a01b03868116911614155b8015612d7857506005546001600160a01b03858116911614155b15612e92576009805460ff60a01b1916600160a01b1790819055600090612db39061ffff600160c01b8204811691600160b01b900416614535565b600754600654919250600091612e159161ffff8086169261113e92600160301b808204841693908304811692612df6926201000090819004831692910416614535565b612e009190614535565b612e0a9190614535565b879061ffff16612a37565b9050612e20816137e1565b600754600654600091612e769161ffff8087169261113e92600160201b808304841693908204811692612e57929082169116614535565b612e619190614535565b612e6b9190614535565b889061ffff16612a37565b9050612e8181613998565b50506009805460ff60a01b19169055505b6009546001600160a01b03861660009081526011602052604090205460ff600160a01b909204821615911680612ee057506001600160a01b03851660009081526011602052604090205460ff165b15612ee9575060005b80156130b4576000600d54851115612f5f5760405162461bcd60e51b815260206004820152603360248201527f544845533a20416d6f756e742065786365656473207472616e736665722070656044820152721c881d1c985b9cd858dd1a5bdb881b1a5b5a5d606a1b6064820152608401610d70565b6001600160a01b03861660009081526012602052604090205460ff1661300957600e5485612fa2886001600160a01b031660009081526020819052604090205490565b612fac919061440d565b11156130095760405162461bcd60e51b815260206004820152602660248201527f544845533a2042616c616e63652065786365656473204d61782057616c6c6574604482015265081b1a5b5a5d60d21b6064820152608401610d70565b6001600160a01b03871660009081526012602052604090205460ff16156130515760095461304a9060649061113e908890600160b01b900461ffff16612a37565b9050613095565b6001600160a01b03861660009081526012602052604090205460ff1615613095576009546130929060649061113e908890600160c01b900461ffff16612a37565b90505b80156130b2576130a58582613cff565b94506130b287308361368d565b505b6130bf86868661368d565b600a546001600160a01b031663e30443bc876130f0816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561313657600080fd5b505af1925050508015613147575060015b50600a546001600160a01b031663e30443bc86613179816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156131bf57600080fd5b505af19250505080156131d0575060015b50600954600160a01b900460ff166132a757601054600a546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af192505050801561324f575060408051601f3d908101601f1916820190925261324c91810190614480565b60015b156132a55760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b505050505050565b6001600160a01b0382166133055760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d70565b8060026000828254613317919061440d565b90915550506001600160a01b0382166000908152602081905260408120805483929061334490849061440d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166133ee5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d70565b6001600160a01b038216600090815260208190526040902054818110156134625760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d70565b6001600160a01b0383166000908152602081905260408120838303905560028054849290613491908490614609565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036135c45760405162461bcd60e51b815260206004820152603e60248201527f544845533a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c756500006064820152608401610d70565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561365157600a5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561363857600080fd5b505af115801561364c573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166136b35760405162461bcd60e51b8152600401610d7090614581565b6001600160a01b0382166136d95760405162461bcd60e51b8152600401610d70906145c6565b6001600160a01b038316600090815260208190526040902054818110156137515760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d70565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061378890849061440d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137d491815260200190565b60405180910390a3610eb9565b600754600654479160009161389f9161ffff600160301b80830482169390810482169261381d9262010000918290048116929190910416614535565b6138279190614535565b6138319190614535565b60075460065461ffff9283169261113e9260029261385e92600160301b9283900481169290910416614535565b613868919061461c565b60075460065461388a9161ffff62010000918290048116929190910416614535565b6138949190614535565b869061ffff16612a37565b905060006138ad8285614609565b90506138b882613d0b565b60006138c44785613cff565b6007546006549192506000916139499161ffff600160301b8083048216939081048216926139019262010000918290048116929190910416614535565b61390b9190614535565b6139159190614535565b60075460065461ffff9283169261113e9261393e92620100009182900483169291900416614535565b859061ffff16612a37565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613984573d6000803e3d6000fd5b506132a7836139938385614609565b613e5d565b6040516370a0823160e01b8152306004820152600090730cba60ca5ef4d42f92a5070a8fedd13be93e2861906370a0823190602401602060405180830381865afa1580156139ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0e91906143f4565b9050613a1982613f07565b6040516370a0823160e01b8152306004820152600090613a9b908390730cba60ca5ef4d42f92a5070a8fedd13be93e2861906370a0823190602401602060405180830381865afa158015613a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a9591906143f4565b90613cff565b600754600654919250600091613b0e9161ffff8082169280821692613ad092600160201b918290048116929190910416614535565b613ada9190614535565b613ae49190614535565b60075460065461ffff9283169261113e9261393e92600160201b9182900483169291900416614535565b600b5460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101829052909150730cba60ca5ef4d42f92a5070a8fedd13be93e28619063a9059cbb906044016020604051808303816000875af1158015613b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9a9190614420565b50600a54600090730cba60ca5ef4d42f92a5070a8fedd13be93e28619063a9059cbb906001600160a01b0316613bd08587614609565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c3f9190614420565b90508015610fb857600a546001600160a01b0316632604364b613c628486614609565b6040518263ffffffff1660e01b8152600401613c8091815260200190565b600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b505050507f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc3858385613ce09190614609565b6040805192835260208301919091520160405180910390a15050505050565b6000612a438284614609565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d4057613d406143af565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dbd91906144ae565b81600181518110613dd057613dd06143af565b6001600160a01b039283166020918202929092010152600854613df69130911684612a56565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e2f90859060009086903090429060040161463d565b600060405180830381600087803b158015613e4957600080fd5b505af11580156132a7573d6000803e3d6000fd5b600854613e759030906001600160a01b031684612a56565b60085460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613ee2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fb89190614480565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110613f3e57613f3e6143af565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fbb91906144ae565b81600181518110613fce57613fce6143af565b60200260200101906001600160a01b031690816001600160a01b031681525050730cba60ca5ef4d42f92a5070a8fedd13be93e286181600281518110614016576140166143af565b6001600160a01b03928316602091820292909201015260085461403c9130911684612a56565b600854604051635c11d79560e01b81526001600160a01b0390911690635c11d79590613e2f90859060009086903090429060040161463d565b600060208083528351808285015260005b818110156140a257858101830151858201604001528201614086565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461107657600080fd5b600080604083850312156140eb57600080fd5b82356140f6816140c3565b946020939093013593505050565b60008060006060848603121561411957600080fd5b8335614124816140c3565b92506020840135614134816140c3565b929592945050506040919091013590565b60008083601f84011261415757600080fd5b50813567ffffffffffffffff81111561416f57600080fd5b6020830191508360208260051b850101111561418a57600080fd5b9250929050565b801515811461107657600080fd5b6000806000604084860312156141b457600080fd5b833567ffffffffffffffff8111156141cb57600080fd5b6141d786828701614145565b90945092505060208401356141eb81614191565b809150509250925092565b60006020828403121561420857600080fd5b8135612a43816140c3565b60006020828403121561422557600080fd5b5035919050565b6000806020838503121561423f57600080fd5b823567ffffffffffffffff81111561425657600080fd5b61426285828601614145565b90969095509350505050565b6000806040838503121561428157600080fd5b823561428c816140c3565b9150602083013561429c81614191565b809150509250929050565b803561ffff811681146142b957600080fd5b919050565b600080600080608085870312156142d457600080fd5b6142dd856142a7565b93506142eb602086016142a7565b92506142f9604086016142a7565b9150614307606086016142a7565b905092959194509250565b6000806040838503121561432557600080fd5b8235614330816140c3565b9150602083013561429c816140c3565b600181811c9082168061435457607f821691505b60208210810361437457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016143ed576143ed6143c5565b5060010190565b60006020828403121561440657600080fd5b5051919050565b80820180821115610cdc57610cdc6143c5565b60006020828403121561443257600080fd5b8151612a4381614191565b602080825260129082015271544845533a204e6f7420616c6c6f7765642160701b604082015260600190565b8082028115828204841417610cdc57610cdc6143c5565b60008060006060848603121561449557600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156144c057600080fd5b8151612a43816140c3565b600080600080600080600080610100898b0312156144e857600080fd5b88516144f3816140c3565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b61ffff818116838216019080821115614550576145506143c5565b5092915050565b634e487b7160e01b600052601260045260246000fd5b60008261457c5761457c614557565b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610cdc57610cdc6143c5565b600061ffff8084168061463157614631614557565b92169190910492915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561468d5784516001600160a01b031683529383019391830191600101614668565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e5e2ee805858586df26ad496d4fd3046e9b55b81112e543468e1f3c15aa4810664736f6c63430008110033

Deployed Bytecode Sourcemap

24489:19914:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15603:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16517:169;;;;;;;;;;-1:-1:-1;16517:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;16517:169:0;1023:187:1;24894:41:0;;;;;;;;;;-1:-1:-1;24894:41:0;;;;-1:-1:-1;;;;;24894:41:0;;;;;;-1:-1:-1;;;;;1405:32:1;;;1387:51;;1375:2;1360:18;24894:41:0;1215:229:1;15924:108:0;;;;;;;;;;-1:-1:-1;16012:12:0;;15924:108;;;1595:25:1;;;1583:2;1568:18;15924:108:0;1449:177:1;16694:492:0;;;;;;;;;;-1:-1:-1;16694:492:0;;;;;:::i;:::-;;:::i;40945:240::-;;;;;;;;;;-1:-1:-1;40945:240:0;;;;;:::i;:::-;;:::i;:::-;;24863:22;;;;;;;;;;-1:-1:-1;24863:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;24863:22:0;;;;;-1:-1:-1;;;24863:22:0;;;;;;;;;3391:6:1;3424:15;;;3406:34;;3476:15;;;3471:2;3456:18;;3449:43;3528:15;;;3508:18;;;3501:43;;;;3580:15;;;3575:2;3560:18;;3553:43;3368:3;3353:19;24863:22:0;3158:444:1;25105:43:0;;;;;;;;;;-1:-1:-1;25105:43:0;;;;-1:-1:-1;;;;;25105:43:0;;;33944:141;;;;;;;;;;;;;:::i;15823:93::-;;;;;;;;;;-1:-1:-1;15823:93:0;;15906:2;3986:36:1;;3974:2;3959:18;15823:93:0;3844:184:1;34598:130:0;;;;;;;;;;-1:-1:-1;34598:130:0;;;;;:::i;:::-;;:::i;17194:215::-;;;;;;;;;;-1:-1:-1;17194:215:0;;;;;:::i;:::-;;:::i;39623:74::-;;;;;;;;;;;;;:::i;30993:95::-;;;;;;;;;;-1:-1:-1;30993:95:0;;;;;:::i;:::-;;:::i;24140:91::-;;;;;;;;;;-1:-1:-1;24140:91:0;;;;;:::i;:::-;;:::i;24836:20::-;;;;;;;;;;-1:-1:-1;24836:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;24836:20:0;;;;;-1:-1:-1;;;24836:20:0;;;;;24942:28;;;;;;;;;;-1:-1:-1;24942:28:0;;;;-1:-1:-1;;;;;24942:28:0;;;35884:103;;;;;;;;;;;;;:::i;34093:126::-;;;;;;;;;;-1:-1:-1;34093:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;34183:28:0;34159:4;34183:28;;;:19;:28;;;;;;;;;34093:126;39910:200;;;;;;;;;;-1:-1:-1;39910:200:0;;;;;:::i;:::-;;:::i;36133:142::-;;;;;;;;;;;;;:::i;34419:171::-;;;;;;;;;;-1:-1:-1;34419:171:0;;;;;:::i;:::-;;:::i;35464:412::-;;;;;;;;;;-1:-1:-1;35464:412:0;;;;;:::i;:::-;;:::i;16040:127::-;;;;;;;;;;-1:-1:-1;16040:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;16141:18:0;16114:7;16141:18;;;;;;;;;;;;16040:127;13765:94;;;;;;;;;;;;;:::i;25475:101::-;;;;;;;;;;-1:-1:-1;25475:101:0;;;;-1:-1:-1;;;;;25475:101:0;;;24239:243;;;;;;;;;;-1:-1:-1;24239:243:0;;;;;:::i;:::-;;:::i;39544:71::-;;;;;;;;;;;;;:::i;33209:478::-;;;;;;;;;;-1:-1:-1;33209:478:0;;;;;:::i;:::-;;:::i;28670:1055::-;;;;;;;;;;-1:-1:-1;28670:1055:0;;;;;:::i;:::-;;:::i;41193:216::-;;;;;;;;;;-1:-1:-1;41193:216:0;;;;;:::i;:::-;;:::i;25409:26::-;;;;;;;;;;;;;;;;13542:87;;;;;;;;;;-1:-1:-1;13615:6:0;;-1:-1:-1;;;;;13615:6:0;13542:87;;15711:104;;;;;;;;;;;;;:::i;40291:109::-;;;;;;;;;;-1:-1:-1;40291:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;40371:21:0;40347:4;40371:21;;;:12;:21;;;;;;;;;40291:109;32307:322;;;;;;;;;;-1:-1:-1;32307:322:0;;;;;:::i;:::-;;:::i;25585:40::-;;;;;;;;;;;;;;;;33827:109;;;;;;;;;;;;;:::i;17417:413::-;;;;;;;;;;-1:-1:-1;17417:413:0;;;;;:::i;:::-;;:::i;34227:184::-;;;;;;;;;;-1:-1:-1;34227:184:0;;;;;:::i;:::-;;:::i;16175:175::-;;;;;;;;;;-1:-1:-1;16175:175:0;;;;;:::i;:::-;;:::i;34736:351::-;;;;;;;;;;-1:-1:-1;34736:351:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6088:32:1;;;6070:51;;6152:2;6137:18;;6130:34;;;;6180:18;;;6173:34;;;;6238:2;6223:18;;6216:34;;;;6281:3;6266:19;;6259:35;6108:3;6310:19;;6303:35;6369:3;6354:19;;6347:35;6413:3;6398:19;;6391:35;6057:3;6042:19;34736:351:0;5731:701:1;25007:20:0;;;;;;;;;;-1:-1:-1;25007:20:0;;;;-1:-1:-1;;;25007:20:0;;;;;;31357:461;;;;;;;;;;-1:-1:-1;31357:461:0;;;;;:::i;:::-;;:::i;25695:57::-;;;;;;;;;;-1:-1:-1;25695:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39705:197;;;;;;;;;;-1:-1:-1;39705:197:0;;;;;:::i;:::-;;:::i;32637:113::-;;;;;;;;;;-1:-1:-1;32637:113:0;;;;;:::i;:::-;;:::i;30803:182::-;;;;;;;;;;-1:-1:-1;30803:182:0;;;;;:::i;:::-;;:::i;29733:630::-;;;;;;;;;;-1:-1:-1;29733:630:0;;;;;:::i;:::-;;:::i;40730:205::-;;;;;;;;;;-1:-1:-1;40730:205:0;;;;;:::i;:::-;;:::i;31096:253::-;;;;;;;;;;-1:-1:-1;31096:253:0;;;;;:::i;:::-;;:::i;31826:473::-;;;;;;;;;;-1:-1:-1;31826:473:0;;;;;:::i;:::-;;:::i;16358:151::-;;;;;;;;;;-1:-1:-1;16358:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;16474:18:0;;;16447:7;16474:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16358:151;40408:314;;;;;;;;;;-1:-1:-1;40408:314:0;;;;;:::i;:::-;;:::i;25346:56::-;;;;;;;;;;;;;;;;35995:130;;;;;;;;;;;;;:::i;33695:124::-;;;;;;;;;;-1:-1:-1;33695:124:0;;;;;:::i;:::-;;:::i;35095:361::-;;;;;;;;;;-1:-1:-1;35095:361:0;;;;;:::i;:::-;;:::i;13867:192::-;;;;;;;;;;-1:-1:-1;13867:192:0;;;;;:::i;:::-;;:::i;40118:165::-;;;;;;;;;;;;;:::i;25442:24::-;;;;;;;;;;;;;;;;30371:424;;;;;;;;;;-1:-1:-1;30371:424:0;;;;;:::i;:::-;;:::i;15603:100::-;15657:13;15690:5;15683:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15603:100;:::o;16517:169::-;16600:4;16617:39;13177:10;16640:7;16649:6;16617:8;:39::i;:::-;-1:-1:-1;16674:4:0;16517:169;;;;;:::o;16694:492::-;16834:4;16851:36;16861:6;16869:9;16880:6;16851:9;:36::i;:::-;-1:-1:-1;;;;;16927:19:0;;16900:24;16927:19;;;:11;:19;;;;;;;;13177:10;16927:33;;;;;;;;16979:26;;;;16971:79;;;;-1:-1:-1;;;16971:79:0;;8388:2:1;16971:79:0;;;8370:21:1;8427:2;8407:18;;;8400:30;8466:34;8446:18;;;8439:62;-1:-1:-1;;;8517:18:1;;;8510:38;8565:19;;16971:79:0;;;;;;;;;17086:57;17095:6;13177:10;17136:6;17117:16;:25;17086:8;:57::i;:::-;-1:-1:-1;17174:4:0;;16694:492;-1:-1:-1;;;;16694:492:0:o;40945:240::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;41032:9:::1;41028:150;41043:15:::0;;::::1;41028:150;;;41104:2;41080:12;:21;41093:4;;41098:1;41093:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41080:21:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41080:21:0;:26;;-1:-1:-1;;41080:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;41121:15:::1;::::0;::::1;:36;41158:4:::0;;41163:1;41158:7;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;41121:45;::::0;-1:-1:-1;;;;;;41121:45:0::1;::::0;;;;;;-1:-1:-1;;;;;1405:32:1;;;41121:45:0::1;::::0;::::1;1387:51:1::0;1360:18;;41121:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41060:3;;;;;:::i;:::-;;;;41028:150;;;;40945:240:::0;;;:::o;33944:141::-;34034:15;;:43;;;-1:-1:-1;;;34034:43:0;;;;34007:7;;-1:-1:-1;;;;;34034:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34027:50;;33944:141;:::o;34598:130::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;34675:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;34675:45:0;;-1:-1:-1;;;;;1405:32:1;;;34675:45:0::1;::::0;::::1;1387:51:1::0;34675:15:0;;::::1;::::0;:36:::1;::::0;1360:18:1;;34675:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34598:130:::0;:::o;17194:215::-;13177:10;17282:4;17331:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17331:34:0;;;;;;;;;;17282:4;;17299:80;;17322:7;;17331:47;;17368:10;;17331:47;:::i;:::-;17299:8;:80::i;39623:74::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;39673:8:::1;:16:::0;;-1:-1:-1;;;;39673:16:0::1;::::0;;39623:74::o;30993:95::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;31063:17:::1;31069:2;31073:6;31063:5;:17::i;:::-;30993:95:::0;;:::o;24140:91::-;24196:27;13177:10;24216:6;24196:5;:27::i;:::-;24140:91;:::o;35884:103::-;35921:15;;:58;;-1:-1:-1;;;35921:58:0;;35960:10;35921:58;;;9863:51:1;35921:15:0;9930:18:1;;;9923:50;-1:-1:-1;;;;;35921:15:0;;;;:30;;9836:18:1;;35921:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39910:200::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;39997:45:::1;40035:6;39998:31;40024:4;39998:21;40016:2;39998:13;16012:12:::0;;;15924:108;39998:13:::1;:17:::0;::::1;:21::i;:::-;:25:::0;::::1;:31::i;39997:45::-;39988:6;:54;39979:85;;;;-1:-1:-1::0;;;39979:85:0::1;;;;;;;:::i;:::-;40087:15;:6:::0;40096::::1;40087:15;:::i;:::-;40075:9;:27:::0;-1:-1:-1;39910:200:0:o;36133:142::-;36226:15;;:41;;;-1:-1:-1;;;36226:41:0;;;;36199:7;;-1:-1:-1;;;;;36226:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;34419:171;34548:15;;:34;;-1:-1:-1;;;34548:34:0;;-1:-1:-1;;;;;1405:32:1;;;34548:34:0;;;1387:51:1;34516:7:0;;34548:15;;:25;;1360:18:1;;34548:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35464:412::-;35646:15;;:28;;-1:-1:-1;;;;;;35646:28:0;;;;;1595:25:1;;;35544:18:0;;;;;;-1:-1:-1;;;;;35646:15:0;;:23;;1568:18:1;;35646:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35692:176;;;11296:25:1;;;11352:2;11337:18;;11330:34;;;11380:18;;;11373:34;;;11438:2;11423:18;;11416:34;;;35529:145:0;;-1:-1:-1;35529:145:0;;-1:-1:-1;35529:145:0;-1:-1:-1;35848:9:0;;35810:5;;35692:176;;11283:3:1;11268:19;35692:176:0;;;;;;;35518:358;;;35464:412;:::o;13765:94::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;13830:21:::1;13848:1;13830:9;:21::i;:::-;13765:94::o:0;24239:243::-;-1:-1:-1;;;;;16474:18:0;;24314:22;16474:18;;;:11;:18;;;;;;;;24358:10;16474:27;;;;;;;;24387:23;;;24378:63;;;;-1:-1:-1;;;24378:63:0;;11663:2:1;24378:63:0;;;11645:21:1;11702:2;11682:18;;;11675:30;11741:28;11721:18;;;11714:56;11787:18;;24378:63:0;11461:350:1;24378:63:0;24452:22;24458:7;24467:6;24452:5;:22::i;:::-;24305:177;24239:243;;:::o;39544:71::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;39592:8:::1;:15:::0;;-1:-1:-1;;;;39592:15:0::1;-1:-1:-1::0;;;39592:15:0::1;::::0;;39544:71::o;33209:478::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;33321:6:::1;33309:8;:18;;:40;;;;;33343:6;33331:8;:18;;33309:40;33287:148;;;::::0;-1:-1:-1;;;33287:148:0;;12018:2:1;33287:148:0::1;::::0;::::1;12000:21:1::0;12057:2;12037:18;;;12030:30;12096:34;12076:18;;;12069:62;12167:28;12147:18;;;12140:56;12213:19;;33287:148:0::1;11816:422:1::0;33287:148:0::1;33480:16;;33468:8;:28:::0;33446:128:::1;;;::::0;-1:-1:-1;;;33446:128:0;;12445:2:1;33446:128:0::1;::::0;::::1;12427:21:1::0;12484:2;12464:18;;;12457:30;12523:34;12503:18;;;12496:62;-1:-1:-1;;;12574:18:1;;;12567:48;12632:19;;33446:128:0::1;12243:414:1::0;33446:128:0::1;33624:16;::::0;33590:51:::1;::::0;33614:8;;33590:51:::1;::::0;;;::::1;33652:16;:27:::0;33209:478::o;28670:1055::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;28793:15:::1;::::0;-1:-1:-1;;;;;28793:15:0;;::::1;28771:38:::0;;::::1;::::0;28749:139:::1;;;::::0;-1:-1:-1;;;28749:139:0;;12864:2:1;28749:139:0::1;::::0;::::1;12846:21:1::0;12903:2;12883:18;;;12876:30;12942:34;12922:18;;;12915:62;-1:-1:-1;;;12993:18:1;;;12986:49;13052:19;;28749:139:0::1;12662:415:1::0;28749:139:0::1;28901:39;28986:10;28901:107;;29081:4;-1:-1:-1::0;;;;;29043:43:0::1;:18;-1:-1:-1::0;;;;;29043:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29043:43:0::1;;29021:165;;;::::0;-1:-1:-1;;;29021:165:0;;13540:2:1;29021:165:0::1;::::0;::::1;13522:21:1::0;13579:2;13559:18;;;13552:30;13618:34;13598:18;;;13591:62;13689:34;13669:18;;;13662:62;-1:-1:-1;;;13740:19:1;;;13733:39;13789:19;;29021:165:0::1;13338:476:1::0;29021:165:0::1;29199:68;::::0;-1:-1:-1;;;29199:68:0;;-1:-1:-1;;;;;29199:39:0;::::1;:68;::::0;::::1;1387:51:1::0;;;29199:39:0;::::1;::::0;1360:18:1;;29199:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29278:54:0::1;::::0;-1:-1:-1;;;29278:54:0;;29326:4:::1;29278:54;::::0;::::1;1387:51:1::0;-1:-1:-1;;;;;29278:39:0;::::1;::::0;-1:-1:-1;29278:39:0::1;::::0;-1:-1:-1;1360:18:1;;29278:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29343:18;-1:-1:-1::0;;;;;29343:39:0::1;;29383:7;13615:6:::0;;-1:-1:-1;;;;;13615:6:0;;13542:87;29383:7:::1;29343:48;::::0;-1:-1:-1;;;;;;29343:48:0::1;::::0;;;;;;-1:-1:-1;;;;;1405:32:1;;;29343:48:0::1;::::0;::::1;1387:51:1::0;1360:18;;29343:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29442:10:0::1;::::0;29402:51:::1;::::0;-1:-1:-1;;;29402:51:0;;-1:-1:-1;;;;;29442:10:0;;::::1;29402:51;::::0;::::1;1387::1::0;29402:39:0;;::::1;::::0;-1:-1:-1;29402:39:0::1;::::0;-1:-1:-1;1360:18:1;;29402:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29512:15:0::1;::::0;29464:65:::1;::::0;-1:-1:-1;;;29464:65:0;;-1:-1:-1;;;;;29512:15:0;;::::1;29464:65;::::0;::::1;1387:51:1::0;29464:39:0;;::::1;::::0;-1:-1:-1;29464:39:0::1;::::0;-1:-1:-1;1360:18:1;;29464:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29540:51:0::1;::::0;-1:-1:-1;;;29540:51:0;;29588:1:::1;29540:51;::::0;::::1;1387::1::0;-1:-1:-1;;;;;29540:39:0;::::1;::::0;-1:-1:-1;29540:39:0::1;::::0;-1:-1:-1;1360:18:1;;29540:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29651:15:0::1;::::0;29609:59:::1;::::0;-1:-1:-1;;;;;29651:15:0;;::::1;::::0;-1:-1:-1;29609:59:0;;::::1;::::0;-1:-1:-1;29609:59:0::1;::::0;29651:15:::1;::::0;29609:59:::1;29681:15;:36:::0;;-1:-1:-1;;;;;;29681:36:0::1;-1:-1:-1::0;;;;;29681:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;28670:1055:0:o;41193:216::-;41282:15;;-1:-1:-1;;;;;41282:15:0;41268:10;:29;41259:39;;;;;;41313:9;41309:93;41324:15;;;41309:93;;;41385:5;41361:12;:21;41374:4;;41379:1;41374:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41361:21:0;;;;;;;;;;;;-1:-1:-1;41361:21:0;:29;;-1:-1:-1;;41361:29:0;;;;;;;;;;41341:3;;;;:::i;:::-;;;;41309:93;;15711:104;15767:13;15800:7;15793:14;;;;;:::i;32307:322::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;32451:13:::1;::::0;-1:-1:-1;;;;;32451:13:0;;::::1;32443:21:::0;;::::1;::::0;32421:146:::1;;;::::0;-1:-1:-1;;;32421:146:0;;14021:2:1;32421:146:0::1;::::0;::::1;14003:21:1::0;14060:2;14040:18;;;14033:30;14099:34;14079:18;;;14072:62;14170:34;14150:18;;;14143:62;-1:-1:-1;;;14221:19:1;;;14214:42;14273:19;;32421:146:0::1;13819:479:1::0;32421:146:0::1;32580:41;32609:4;32615:5;32580:28;:41::i;33827:109::-:0;33901:15;;:27;;;-1:-1:-1;;;33901:27:0;;;;33874:7;;-1:-1:-1;;;;;33901:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;;;;;17417:413;13177:10;17510:4;17554:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17554:34:0;;;;;;;;;;17607:35;;;;17599:85;;;;-1:-1:-1;;;17599:85:0;;14505:2:1;17599:85:0;;;14487:21:1;14544:2;14524:18;;;14517:30;14583:34;14563:18;;;14556:62;-1:-1:-1;;;14634:18:1;;;14627:35;14679:19;;17599:85:0;14303:401:1;17599:85:0;17720:67;13177:10;17743:7;17771:15;17752:16;:34;17720:8;:67::i;:::-;-1:-1:-1;17818:4:0;;17417:413;-1:-1:-1;;;17417:413:0:o;34227:184::-;34356:15;;:47;;-1:-1:-1;;;34356:47:0;;-1:-1:-1;;;;;1405:32:1;;;34356:47:0;;;1387:51:1;34324:7:0;;34356:15;;:38;;1360:18:1;;34356:47:0;1215:229:1;16175:175:0;16261:4;16278:42;13177:10;16302:9;16313:6;16278:9;:42::i;34736:351::-;35044:15;;:35;;-1:-1:-1;;;35044:35:0;;-1:-1:-1;;;;;1405:32:1;;;35044:35:0;;;1387:51:1;34850:7:0;;;;;;;;;;;;;;;;35044:15;;;:26;;1360:18:1;;35044:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35037:42;;;;;;;;;;;;;;;;34736:351;;;;;;;;;:::o;31357:461::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;31515:6:::1;:23:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;31549:29:0;;;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;;31619:23:0;-1:-1:-1;;;31589:19:0;;::::1;::::0;::::1;-1:-1:-1::0;;31619:23:0;;;;;-1:-1:-1;;;31619:23:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;31718:13;::::1;::::0;::::1;::::0;31704:11;;::::1;::::0;::::1;::::0;31669:32:::1;::::0;31685:16;::::1;::::0;::::1;::::0;31669:13:::1;:32;:::i;:::-;:46;;;;:::i;:::-;:62;;;;:::i;:::-;31655:11;:76:::0;;-1:-1:-1;;;;31655:76:0::1;-1:-1:-1::0;;;31655:76:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;31765:2:::1;31751:11:::0;::::1;::::0;;::::1;:16;;31742:68;;;::::0;-1:-1:-1;;;31742:68:0;;15770:2:1;31742:68:0::1;::::0;::::1;15752:21:1::0;15809:2;15789:18;;;15782:30;15848:34;15828:18;;;15821:62;-1:-1:-1;;;15899:18:1;;;15892:36;15945:19;;31742:68:0::1;15568:402:1::0;39705:197:0;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;39787:45:::1;39825:6;39788:31;39814:4;39788:21;39806:2;39788:13;16012:12:::0;;;15924:108;39787:45:::1;39778:6;:54;39770:84;;;;-1:-1:-1::0;;;39770:84:0::1;;;;;;;:::i;:::-;39879:15;:6:::0;39888::::1;39879:15;:::i;:::-;39865:11;:29:::0;-1:-1:-1;39705:197:0:o;32637:113::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;32727:15:::1;:6:::0;32736::::1;32727:15;:::i;:::-;32706:18;:36:::0;-1:-1:-1;32637:113:0:o;30803:182::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30888:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;30888:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30943:34;;1163:41:1;;;30943:34:0::1;::::0;1136:18:1;30943:34:0::1;;;;;;;30803:182:::0;;:::o;29733:630::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;29831:15:::1;::::0;-1:-1:-1;;;;;29831:15:0;;::::1;29809:38:::0;;::::1;::::0;29801:92:::1;;;::::0;-1:-1:-1;;;29801:92:0;;16177:2:1;29801:92:0::1;::::0;::::1;16159:21:1::0;16216:2;16196:18;;;16189:30;16255:34;16235:18;;;16228:62;-1:-1:-1;;;16306:18:1;;;16299:39;16355:19;;29801:92:0::1;15975:405:1::0;29801:92:0::1;29908:15;:48:::0;;-1:-1:-1;;;;;;29908:48:0::1;-1:-1:-1::0;;;;;29908:48:0;::::1;::::0;;::::1;::::0;;;30018:25:::1;::::0;;-1:-1:-1;;;30018:25:0;;;;-1:-1:-1;;29908:48:0;30018:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;29908:48;30018:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30000:52:0::1;;30061:4;30081:15;;;;;;;;;-1:-1:-1::0;;;;;30081:15:0::1;-1:-1:-1::0;;;;;30081:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30000:104;::::0;-1:-1:-1;;;;;;30000:104:0::1;::::0;;;;;;-1:-1:-1;;;;;16615:15:1;;;30000:104:0::1;::::0;::::1;16597:34:1::0;16667:15;;16647:18;;;16640:43;16532:18;;30000:104:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29968:136:::0;-1:-1:-1;;;;;;30119:22:0;::::1;30115:241;;30203:15;;;;;;;;;-1:-1:-1::0;;;;;30203:15:0::1;-1:-1:-1::0;;;;;30203:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30185:55:0::1;;30249:4;30270:15;;;;;;;;;-1:-1:-1::0;;;;;30270:15:0::1;-1:-1:-1::0;;;;;30270:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30185:108;::::0;-1:-1:-1;;;;;;30185:108:0::1;::::0;;;;;;-1:-1:-1;;;;;16615:15:1;;;30185:108:0::1;::::0;::::1;16597:34:1::0;16667:15;;16647:18;;;16640:43;16532:18;;30185:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30156:13;:137:::0;;-1:-1:-1;;;;;;30156:137:0::1;-1:-1:-1::0;;;;;30156:137:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;30993:95:0:o;30115:241::-:1;30320:13;:24:::0;;-1:-1:-1;;;;;30320:24:0;::::1;-1:-1:-1::0;;;;;;30320:24:0;;::::1;;::::0;;29794:569:::1;29733:630:::0;:::o;40730:205::-;40805:15;;-1:-1:-1;;;;;40805:15:0;40791:10;:29;40782:39;;;;;;-1:-1:-1;;;;;40840:21:0;;;;;;:12;:21;;;;;;;;40832:55;;;;-1:-1:-1;;;40832:55:0;;16896:2:1;40832:55:0;;;16878:21:1;16935:2;16915:18;;;16908:30;-1:-1:-1;;;16954:18:1;;;16947:51;17015:18;;40832:55:0;16694:345:1;40832:55:0;-1:-1:-1;;;;;40898:21:0;40922:5;40898:21;;;:12;:21;;;;;:29;;-1:-1:-1;;40898:29:0;;;40730:205::o;31096:253::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31198:24:0;::::1;31190:83;;;::::0;-1:-1:-1;;;31190:83:0;;17246:2:1;31190:83:0::1;::::0;::::1;17228:21:1::0;17285:2;17265:18;;;17258:30;17324:34;17304:18;;;17297:62;-1:-1:-1;;;17375:18:1;;;17368:44;17429:19;;31190:83:0::1;17044:410:1::0;31190:83:0::1;31284:15;:28:::0;;-1:-1:-1;;;;;31284:28:0;;::::1;-1:-1:-1::0;;;;;;31284:28:0;;::::1;;::::0;;;31323:10:::1;:18:::0;;;;;::::1;::::0;::::1;;::::0;;31096:253::o;31826:473::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;31985:7:::1;:24:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;32020:30:0;;;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;;32092:24:0;-1:-1:-1;;;32061:20:0;;::::1;::::0;::::1;-1:-1:-1::0;;32092:24:0;;;;;-1:-1:-1;;;32092:24:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;32196:14;::::1;::::0;::::1;::::0;32181:12;;::::1;::::0;::::1;::::0;32144:34:::1;::::0;32161:17;::::1;::::0;::::1;::::0;32144:14:::1;:34;:::i;:::-;:49;;;;:::i;:::-;:66;;;;:::i;:::-;32129:12;:81:::0;;-1:-1:-1;;;;32129:81:0::1;-1:-1:-1::0;;;32129:81:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;32245:2:::1;32229:12:::0;::::1;::::0;;::::1;:18;;32221:70;;;::::0;-1:-1:-1;;;32221:70:0;;17661:2:1;32221:70:0::1;::::0;::::1;17643:21:1::0;17700:2;17680:18;;;17673:30;17739:34;17719:18;;;17712:62;-1:-1:-1;;;17790:18:1;;;17783:37;17837:19;;32221:70:0::1;17459:403:1::0;40408:314:0;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;40502:15:::1;::::0;-1:-1:-1;;;;;40502:15:0;;::::1;40483:35:::0;;::::1;::::0;40475:73:::1;;;::::0;-1:-1:-1;;;40475:73:0;;18069:2:1;40475:73:0::1;::::0;::::1;18051:21:1::0;18108:2;18088:18;;;18081:30;18147:27;18127:18;;;18120:55;18192:18;;40475:73:0::1;17867:349:1::0;40475:73:0::1;-1:-1:-1::0;;;;;40568:21:0;::::1;;::::0;;;:12:::1;:21;::::0;;;;;::::1;;40567:22;40559:60;;;::::0;-1:-1:-1;;;40559:60:0;;18423:2:1;40559:60:0::1;::::0;::::1;18405:21:1::0;18462:2;18442:18;;;18435:30;18501:27;18481:18;;;18474:55;18546:18;;40559:60:0::1;18221:349:1::0;40559:60:0::1;-1:-1:-1::0;;;;;40630:21:0;;::::1;;::::0;;;:12:::1;:21;::::0;;;;;;:28;;-1:-1:-1;;40630:28:0::1;40654:4;40630:28;::::0;;40669:15:::1;::::0;:45;;-1:-1:-1;;;40669:45:0;;::::1;::::0;::::1;1387:51:1::0;;;;40669:15:0;;::::1;::::0;:36:::1;::::0;1360:18:1;;40669:45:0::1;1215:229:1::0;35995:130:0;36078:15;;:39;;;-1:-1:-1;;;36078:39:0;;;;36051:7;;-1:-1:-1;;;;;36078:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;33695:124;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;33769:15:::1;::::0;:42:::1;::::0;-1:-1:-1;;;33769:42:0;;::::1;::::0;::::1;1595:25:1::0;;;-1:-1:-1;;;;;33769:15:0;;::::1;::::0;:31:::1;::::0;1568:18:1;;33769:42:0::1;1449:177:1::0;35095:361:0;35408:15;;:40;;-1:-1:-1;;;35408:40:0;;;;;1595:25:1;;;35214:7:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35408:15:0;;;;:33;;1568:18:1;;35408:40:0;1449:177:1;13867:192:0;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13956:22:0;::::1;13948:73;;;::::0;-1:-1:-1;;;13948:73:0;;18777:2:1;13948:73:0::1;::::0;::::1;18759:21:1::0;18816:2;18796:18;;;18789:30;18855:34;18835:18;;;18828:62;-1:-1:-1;;;18906:18:1;;;18899:36;18952:19;;13948:73:0::1;18575:402:1::0;13948:73:0::1;14032:19;14042:8;14032:9;:19::i;40118:165::-:0;13615:6;;40173:4;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;16012:12;;40190:11:::1;:27:::0;16012:12;;40228:9:::1;:25:::0;-1:-1:-1;40271:4:0::1;40118:165:::0;:::o;30371:424::-;13615:6;;-1:-1:-1;;;;;13615:6:0;13177:10;13677:23;13669:68;;;;-1:-1:-1;;;13669:68:0;;;;;;;:::i;:::-;30469:4:::1;-1:-1:-1::0;;;;;30451:23:0;::::1;::::0;30443:53:::1;;;;-1:-1:-1::0;;;30443:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30511:22:0;::::1;30507:124;;13615:6:::0;;30550:48:::1;::::0;-1:-1:-1;;;;;13615:6:0;;;;30576:21:::1;30550:48:::0;::::1;;;::::0;::::1;::::0;;;30576:21;13615:6;30550:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;30507:124;30704:35;::::0;-1:-1:-1;;;30704:35:0;;30733:4:::1;30704:35;::::0;::::1;1387:51:1::0;30668:6:0;;30641:17:::1;::::0;-1:-1:-1;;;;;30704:20:0;::::1;::::0;::::1;::::0;1360:18:1;;30704:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30686:53;;30750:10;-1:-1:-1::0;;;;;30750:19:0::1;;30770:7;13615:6:::0;;-1:-1:-1;;;;;13615:6:0;;13542:87;30770:7:::1;30750:37;::::0;-1:-1:-1;;;;;;30750:37:0::1;::::0;;;;;;-1:-1:-1;;;;;19174:32:1;;;30750:37:0::1;::::0;::::1;19156:51:1::0;19223:18;;;19216:34;;;19129:18;;30750:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12005:98::-:0;12063:7;12090:5;12094:1;12090;:5;:::i;:::-;12083:12;12005:98;-1:-1:-1;;;12005:98:0:o;12111:::-;12169:7;12196:5;12200:1;12196;:5;:::i;19585:380::-;-1:-1:-1;;;;;19721:19:0;;19713:68;;;;-1:-1:-1;;;19713:68:0;;19720:2:1;19713:68:0;;;19702:21:1;19759:2;19739:18;;;19732:30;19798:34;19778:18;;;19771:62;-1:-1:-1;;;19849:18:1;;;19842:34;19893:19;;19713:68:0;19518:400:1;19713:68:0;-1:-1:-1;;;;;19800:21:0;;19792:68;;;;-1:-1:-1;;;19792:68:0;;20125:2:1;19792:68:0;;;20107:21:1;20164:2;20144:18;;;20137:30;20203:34;20183:18;;;20176:62;-1:-1:-1;;;20254:18:1;;;20247:32;20296:19;;19792:68:0;19923:398:1;19792:68:0;-1:-1:-1;;;;;19873:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19925:32;;1595:25:1;;;19925:32:0;;1568:18:1;19925:32:0;;;;;;;19585:380;;;:::o;36283:3251::-;-1:-1:-1;;;;;36415:18:0;;36407:68;;;;-1:-1:-1;;;36407:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36494:16:0;;36486:64;;;;-1:-1:-1;;;36486:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36570:16:0;;;;;;:12;:16;;;;;;;;36569:17;36561:53;;;;-1:-1:-1;;;36561:53:0;;21338:2:1;36561:53:0;;;21320:21:1;21377:2;21357:18;;;21350:30;-1:-1:-1;;;21396:18:1;;;21389:53;21459:18;;36561:53:0;21136:347:1;36561:53:0;36647:9;36634:23;;;;:12;:23;;;;;;;;36633:24;36625:60;;;;-1:-1:-1;;;36625:60:0;;21338:2:1;36625:60:0;;;21320:21:1;21377:2;21357:18;;;21350:30;-1:-1:-1;;;21396:18:1;;;21389:53;21459:18;;36625:60:0;21136:347:1;36625:60:0;36707:8;;-1:-1:-1;;;36707:8:0;;;;36706:9;36698:47;;;;-1:-1:-1;;;36698:47:0;;21690:2:1;36698:47:0;;;21672:21:1;21729:2;21709:18;;;21702:30;21768:27;21748:18;;;21741:55;21813:18;;36698:47:0;21488:349:1;36698:47:0;36760:6;36770:1;36760:11;36756:93;;36788:28;36804:4;36810:2;36814:1;36788:15;:28::i;36756:93::-;36910:4;36861:28;16141:18;;;;;;;;;;;36968;;36944:42;;;;;;;37017:33;;-1:-1:-1;37042:8:0;;-1:-1:-1;;;37042:8:0;;;;37041:9;37017:33;:82;;;;-1:-1:-1;;;;;;37068:31:0;;;;;;:25;:31;;;;;;;;37067:32;37017:82;:114;;;;-1:-1:-1;13615:6:0;;-1:-1:-1;;;;;37116:15:0;;;13615:6;;37116:15;;37017:114;:144;;;;-1:-1:-1;13615:6:0;;-1:-1:-1;;;;;37148:13:0;;;13615:6;;37148:13;;37017:144;36999:778;;;37188:8;:15;;-1:-1:-1;;;;37188:15:0;-1:-1:-1;;;37188:15:0;;;;;;;37239:26;;37253:12;-1:-1:-1;;;37253:12:0;;;;;-1:-1:-1;;;37239:11:0;;;:26;:::i;:::-;37416:7;:14;;37400:13;37220:45;;-1:-1:-1;37280:35:0;;37318:146;;;;;;;:113;;-1:-1:-1;;;37416:14:0;;;;;;37400:13;;;;;;37361:36;;37380:17;;;;;;;;37361:16;;;:36;:::i;:::-;:52;;;;:::i;:::-;:69;;;;:::i;:::-;37318:20;;:113;;:42;:113::i;:146::-;37280:184;;37479:43;37494:27;37479:14;:43::i;:::-;37650:7;:12;37636:6;:11;37540:17;;37560:136;;;;;;;:103;;-1:-1:-1;;;37650:12:0;;;;;;37636:11;;;;;;37603:30;;37619:14;;;;37603:13;:30;:::i;:::-;:44;;;;:::i;:::-;:59;;;;:::i;:::-;37560:20;;:103;;:42;:103::i;:136::-;37540:156;;37711:21;37722:9;37711:10;:21::i;:::-;-1:-1:-1;;37749:8:0;:16;;-1:-1:-1;;;;37749:16:0;;;-1:-1:-1;36999:778:0;37805:8;;-1:-1:-1;;;;;37830:25:0;;37789:12;37830:25;;;:19;:25;;;;;;37805:8;-1:-1:-1;;;37805:8:0;;;;;37804:9;;37830:25;;:52;;-1:-1:-1;;;;;;37859:23:0;;;;;;:19;:23;;;;;;;;37830:52;37826:100;;;-1:-1:-1;37909:5:0;37826:100;37942:7;37938:825;;;37966:12;38011:11;;38001:6;:21;;37993:84;;;;-1:-1:-1;;;37993:84:0;;22044:2:1;37993:84:0;;;22026:21:1;22083:2;22063:18;;;22056:30;22122:34;22102:18;;;22095:62;-1:-1:-1;;;22173:18:1;;;22166:49;22232:19;;37993:84:0;21842:415:1;37993:84:0;-1:-1:-1;;;;;38097:29:0;;;;;;:25;:29;;;;;;;;38092:218;;38203:9;;38193:6;38177:13;38187:2;-1:-1:-1;;;;;16141:18:0;16114:7;16141:18;;;;;;;;;;;;16040:127;38177:13;:22;;;;:::i;:::-;:35;;38147:147;;;;-1:-1:-1;;;38147:147:0;;22464:2:1;38147:147:0;;;22446:21:1;22503:2;22483:18;;;22476:30;22542:34;22522:18;;;22515:62;-1:-1:-1;;;22593:18:1;;;22586:36;22639:19;;38147:147:0;22262:402:1;38147:147:0;-1:-1:-1;;;;;38342:31:0;;;;;;:25;:31;;;;;;;;38338:263;;;38412:11;;38401:32;;38429:3;;38401:23;;:6;;-1:-1:-1;;;38412:11:0;;;;38401:10;:23::i;:32::-;38394:39;;38338:263;;;-1:-1:-1;;;;;38477:29:0;;;;;;:25;:29;;;;;;;;38473:128;;;38545:12;;38534:33;;38563:3;;38534:24;;:6;;-1:-1:-1;;;38545:12:0;;;;38534:10;:24::i;:33::-;38527:40;;38473:128;38621:8;;38617:135;;38659:16;:6;38670:4;38659:10;:16::i;:::-;38650:25;;38694:42;38710:4;38724;38731;38694:15;:42::i;:::-;37951:812;37938:825;38775:33;38791:4;38797:2;38801:6;38775:15;:33::i;:::-;38825:15;;-1:-1:-1;;;;;38825:15:0;:26;38860:4;38867:15;38860:4;-1:-1:-1;;;;;16141:18:0;16114:7;16141:18;;;;;;;;;;;;16040:127;38867:15;38825:58;;-1:-1:-1;;;;;;38825:58:0;;;;;;;-1:-1:-1;;;;;19174:32:1;;;38825:58:0;;;19156:51:1;19223:18;;;19216:34;19129:18;;38825:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38821:74;38909:15;;-1:-1:-1;;;;;38909:15:0;:26;38944:2;38949:13;38944:2;-1:-1:-1;;;;;16141:18:0;16114:7;16141:18;;;;;;;;;;;;16040:127;38949:13;38909:54;;-1:-1:-1;;;;;;38909:54:0;;;;;;;-1:-1:-1;;;;;19174:32:1;;;38909:54:0;;;19156:51:1;19223:18;;;19216:34;19129:18;;38909:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38905:70;38992:8;;-1:-1:-1;;;38992:8:0;;;;38987:540;;39031:16;;39068:15;;:28;;-1:-1:-1;;;;;;39068:28:0;;;;;1595:25:1;;;-1:-1:-1;;;;;39068:15:0;;;;:23;;1568:18:1;;39068:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;39068:28:0;;;;;;;;-1:-1:-1;;39068:28:0;;;;;;;;;;;;:::i;:::-;;;39064:452;;;39260:231;;;11296:25:1;;;11352:2;11337:18;;11330:34;;;11380:18;;;11373:34;;;11438:2;11423:18;;11416:34;;;39463:9:0;;39410:4;;39260:231;;11283:3:1;11268:19;39260:231:0;;;;;;;39097:410;;;39064:452;39002:525;38987:540;36396:3138;;;36283:3251;;;:::o;18579:399::-;-1:-1:-1;;;;;18663:21:0;;18655:65;;;;-1:-1:-1;;;18655:65:0;;23166:2:1;18655:65:0;;;23148:21:1;23205:2;23185:18;;;23178:30;23244:33;23224:18;;;23217:61;23295:18;;18655:65:0;22964:355:1;18655:65:0;18811:6;18795:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;18828:18:0;;:9;:18;;;;;;;;;;:28;;18850:6;;18828:9;:28;;18850:6;;18828:28;:::i;:::-;;;;-1:-1:-1;;18872:37:0;;1595:25:1;;;-1:-1:-1;;;;;18872:37:0;;;18889:1;;18872:37;;1583:2:1;1568:18;18872:37:0;;;;;;;30993:95;;:::o;18986:591::-;-1:-1:-1;;;;;19070:21:0;;19062:67;;;;-1:-1:-1;;;19062:67:0;;23526:2:1;19062:67:0;;;23508:21:1;23565:2;23545:18;;;23538:30;23604:34;23584:18;;;23577:62;-1:-1:-1;;;23655:18:1;;;23648:31;23696:19;;19062:67:0;23324:397:1;19062:67:0;-1:-1:-1;;;;;19229:18:0;;19204:22;19229:18;;;;;;;;;;;19266:24;;;;19258:71;;;;-1:-1:-1;;;19258:71:0;;23928:2:1;19258:71:0;;;23910:21:1;23967:2;23947:18;;;23940:30;24006:34;23986:18;;;23979:62;-1:-1:-1;;;24057:18:1;;;24050:32;24099:19;;19258:71:0;23726:398:1;19258:71:0;-1:-1:-1;;;;;19365:18:0;;:9;:18;;;;;;;;;;19386:23;;;19365:44;;19431:12;:22;;19403:6;;19365:9;19431:22;;19403:6;;19431:22;:::i;:::-;;;;-1:-1:-1;;19471:37:0;;1595:25:1;;;19497:1:0;;-1:-1:-1;;;;;19471:37:0;;;;;1583:2:1;1568:18;19471:37:0;;;;;;;24305:177;24239:243;;:::o;14067:173::-;14142:6;;;-1:-1:-1;;;;;14159:17:0;;;-1:-1:-1;;;;;;14159:17:0;;;;;;;14192:40;;14142:6;;;14159:17;14142:6;;14192:40;;14123:16;;14192:40;14112:128;14067:173;:::o;32758:443::-;-1:-1:-1;;;;;32863:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;32841:152;;;;-1:-1:-1;;;32841:152:0;;24464:2:1;32841:152:0;;;24446:21:1;24503:2;24483:18;;;24476:30;24542:34;24522:18;;;24515:62;24613:32;24593:18;;;24586:60;24663:19;;32841:152:0;24262:426:1;32841:152:0;-1:-1:-1;;;;;33004:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;33004:39:0;;;;;;;;;;;;33056:80;;33082:15;;:42;;-1:-1:-1;;;33082:42:0;;-1:-1:-1;;;;;1405:32:1;;;33082:42:0;;;1387:51:1;33082:15:0;;;;:36;;1360:18:1;;33082:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33056:80;33153:40;;;;;;-1:-1:-1;;;;;33153:40:0;;;;;;;;32758:443;;:::o;17838:733::-;-1:-1:-1;;;;;17978:20:0;;17970:70;;;;-1:-1:-1;;;17970:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18059:23:0;;18051:71;;;;-1:-1:-1;;;18051:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18219:17:0;;18195:21;18219:17;;;;;;;;;;;18255:23;;;;18247:74;;;;-1:-1:-1;;;18247:74:0;;24895:2:1;18247:74:0;;;24877:21:1;24934:2;24914:18;;;24907:30;24973:34;24953:18;;;24946:62;-1:-1:-1;;;25024:18:1;;;25017:36;25070:19;;18247:74:0;24693:402:1;18247:74:0;-1:-1:-1;;;;;18357:17:0;;;:9;:17;;;;;;;;;;;18377:22;;;18357:42;;18421:20;;;;;;;;:30;;18393:6;;18357:9;18421:30;;18393:6;;18421:30;:::i;:::-;;;;;;;;18486:9;-1:-1:-1;;;;;18469:35:0;18478:6;-1:-1:-1;;;;;18469:35:0;;18497:6;18469:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;18469:35:0;;;;;;;;18517:46;24239:243;41417:807;41729:7;:14;;41713:13;41501:21;;41476:22;;41554:190;;41729:14;-1:-1:-1;;;41729:14:0;;;;;;41713:13;;;;;;41674:36;;41693:17;;;;;;;;41674:16;;;;;:36;:::i;:::-;:52;;;;:::i;:::-;:69;;;;:::i;:::-;41621:7;:14;;41605:13;41554:190;;;;;:85;;41637:1;;41605:30;;-1:-1:-1;;;41621:14:0;;;;;;;41605:13;;;;:30;:::i;:::-;41604:34;;;;:::i;:::-;41584:7;:17;41565:6;:16;:36;;41584:17;;;;;;;;;41565:16;;;;;:36;:::i;:::-;:73;;;;:::i;:::-;41554:6;;:85;;:10;:85::i;:190::-;41533:211;-1:-1:-1;41755:17:0;41775:19;41533:211;41775:6;:19;:::i;:::-;41755:39;;41805:28;41822:10;41805:16;:28::i;:::-;41846:18;41867:41;:21;41893:14;41867:25;:41::i;:::-;42089:7;:14;;42073:13;41846:62;;-1:-1:-1;41919:21:0;;41943:161;;42089:14;-1:-1:-1;;;42089:14:0;;;;;;42073:13;;;;;;42034:36;;42053:17;;;;;;;;42034:16;;;;;:36;:::i;:::-;:52;;;;:::i;:::-;:69;;;;:::i;:::-;41977:7;:17;41958:6;:16;41943:161;;;;;:52;;41958:36;;41977:17;;;;;;;;41958:16;;;;:36;:::i;:::-;41943:10;;:52;;:14;:52::i;:161::-;42115:15;;:39;;41919:185;;-1:-1:-1;;;;;;42115:15:0;;:39;;;;;41919:185;;42115:15;:39;:15;:39;41919:185;42115:15;:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42165:51:0;42178:9;42189:26;42202:13;42189:10;:26;:::i;:::-;42165:12;:51::i;43604:796::-;43687:36;;-1:-1:-1;;;43687:36:0;;43717:4;43687:36;;;1387:51:1;43659:25:0;;25294:42;;43687:21;;1360:18:1;;43687:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43659:64;;43736:24;43753:6;43736:16;:24::i;:::-;43795:36;;-1:-1:-1;;;43795:36:0;;43825:4;43795:36;;;1387:51:1;43773:18:0;;43794:85;;43851:17;;25294:42;;43795:21;;1360:18:1;;43795:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43794:42;;:85::i;:::-;44003:7;:14;43987:6;:13;43773:106;;-1:-1:-1;43892:16:0;;43911:107;;44003:14;;;;;43987:13;;;;43958:26;;-1:-1:-1;;;43972:12:0;;;;;;;43958:11;;;;;:26;:::i;:::-;:42;;;;:::i;:::-;:59;;;;:::i;:::-;43940:7;:12;43926:6;:11;43911:107;;;;;:42;;43926:26;;-1:-1:-1;;;43940:12:0;;;;;;;43926:11;;;;:26;:::i;43911:107::-;44050:10;;44029:42;;-1:-1:-1;;;44029:42:0;;-1:-1:-1;;;;;44050:10:0;;;44029:42;;;19156:51:1;19223:18;;;19216:34;;;43892:126:0;;-1:-1:-1;25294:42:0;;44029:20;;19129:18:1;;44029:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;44152:15:0;;44094:12;;25294:42;;44109:20;;-1:-1:-1;;;;;44152:15:0;44184:21;44197:8;44184:10;:21;:::i;:::-;44109:108;;-1:-1:-1;;;;;;44109:108:0;;;;;;;-1:-1:-1;;;;;19174:32:1;;;44109:108:0;;;19156:51:1;19223:18;;;19216:34;19129:18;;44109:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44094:123;;44234:7;44230:163;;;44258:15;;-1:-1:-1;;;;;44258:15:0;:38;44297:19;44308:8;44297:10;:19;:::i;:::-;44258:59;;;;;;;;;;;;;1595:25:1;;1583:2;1568:18;;1449:177;44258:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44337:44;44351:6;44372:8;44359:10;:21;;;;:::i;:::-;44337:44;;;25466:25:1;;;25522:2;25507:18;;25500:34;;;;25439:18;44337:44:0;;;;;;;43648:752;;;;43604:796;:::o;11899:98::-;11957:7;11984:5;11988:1;11984;:5;:::i;42611:475::-;42701:16;;;42715:1;42701:16;;;;;;;;42677:21;;42701:16;;;;;;;;;;-1:-1:-1;42701:16:0;42677:40;;42746:4;42728;42733:1;42728:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42728:23:0;;;:7;;;;;;;;;;:23;;;;42772:15;;:22;;;-1:-1:-1;;;42772:22:0;;;;:15;;;;;:20;;:22;;;;;42728:7;;42772:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42762:4;42767:1;42762:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42762:32:0;;;:7;;;;;;;;;:32;42839:15;;42807:62;;42824:4;;42839:15;42857:11;42807:8;:62::i;:::-;42882:15;;:196;;-1:-1:-1;;;42882:196:0;;-1:-1:-1;;;;;42882:15:0;;;;:66;;:196;;42963:11;;42882:15;;43005:4;;43032;;43052:15;;42882:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42234:369;42349:15;;42317:62;;42334:4;;-1:-1:-1;;;;;42349:15:0;42367:11;42317:8;:62::i;:::-;42392:15;;:201;;-1:-1:-1;;;42392:201:0;;42464:4;42392:201;;;27003:34:1;27053:18;;;27046:34;;;42392:15:0;27096:18:1;;;27089:34;;;27139:18;;;27132:34;;;27182:19;;;27175:44;42567:15:0;27235:19:1;;;27228:35;-1:-1:-1;;;;;42392:15:0;;;;:31;;42431:9;;26937:19:1;;42392:201:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43094:502::-;43184:16;;;43198:1;43184:16;;;;;;;;;43160:21;;43184:16;;;;;;;;;;-1:-1:-1;43184:16:0;43160:40;;43229:4;43211;43216:1;43211:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43211:23:0;;;:7;;;;;;;;;;:23;;;;43255:15;;:22;;;-1:-1:-1;;;43255:22:0;;;;:15;;;;;:20;;:22;;;;;43211:7;;43255:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43245:4;43250:1;43245:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;43245:32:0;;;-1:-1:-1;;;;;43245:32:0;;;;;25294:42;43288:4;43293:1;43288:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43288:13:0;;;:7;;;;;;;;;:13;43346:15;;43314:62;;43331:4;;43346:15;43364:11;43314:8;:62::i;:::-;43389:15;;:199;;-1:-1:-1;;;43389:199:0;;-1:-1:-1;;;;;43389:15:0;;;;:69;;:199;;43473:11;;43389:15;;43515:4;;43542;;43562:15;;43389:199;;;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2092:367::-;2155:8;2165:6;2219:3;2212:4;2204:6;2200:17;2196:27;2186:55;;2237:1;2234;2227:12;2186:55;-1:-1:-1;2260:20:1;;2303:18;2292:30;;2289:50;;;2335:1;2332;2325:12;2289:50;2372:4;2364:6;2360:17;2348:29;;2432:3;2425:4;2415:6;2412:1;2408:14;2400:6;2396:27;2392:38;2389:47;2386:67;;;2449:1;2446;2439:12;2386:67;2092:367;;;;;:::o;2464:118::-;2550:5;2543:13;2536:21;2529:5;2526:32;2516:60;;2572:1;2569;2562:12;2587:566;2679:6;2687;2695;2748:2;2736:9;2727:7;2723:23;2719:32;2716:52;;;2764:1;2761;2754:12;2716:52;2804:9;2791:23;2837:18;2829:6;2826:30;2823:50;;;2869:1;2866;2859:12;2823:50;2908:70;2970:7;2961:6;2950:9;2946:22;2908:70;:::i;:::-;2997:8;;-1:-1:-1;2882:96:1;-1:-1:-1;;3082:2:1;3067:18;;3054:32;3095:28;3054:32;3095:28;:::i;:::-;3142:5;3132:15;;;2587:566;;;;;:::o;4033:247::-;4092:6;4145:2;4133:9;4124:7;4120:23;4116:32;4113:52;;;4161:1;4158;4151:12;4113:52;4200:9;4187:23;4219:31;4244:5;4219:31;:::i;4285:180::-;4344:6;4397:2;4385:9;4376:7;4372:23;4368:32;4365:52;;;4413:1;4410;4403:12;4365:52;-1:-1:-1;4436:23:1;;4285:180;-1:-1:-1;4285:180:1:o;4902:437::-;4988:6;4996;5049:2;5037:9;5028:7;5024:23;5020:32;5017:52;;;5065:1;5062;5055:12;5017:52;5105:9;5092:23;5138:18;5130:6;5127:30;5124:50;;;5170:1;5167;5160:12;5124:50;5209:70;5271:7;5262:6;5251:9;5247:22;5209:70;:::i;:::-;5298:8;;5183:96;;-1:-1:-1;4902:437:1;-1:-1:-1;;;;4902:437:1:o;5344:382::-;5409:6;5417;5470:2;5458:9;5449:7;5445:23;5441:32;5438:52;;;5486:1;5483;5476:12;5438:52;5525:9;5512:23;5544:31;5569:5;5544:31;:::i;:::-;5594:5;-1:-1:-1;5651:2:1;5636:18;;5623:32;5664:30;5623:32;5664:30;:::i;:::-;5713:7;5703:17;;;5344:382;;;;;:::o;6437:159::-;6504:20;;6564:6;6553:18;;6543:29;;6533:57;;6586:1;6583;6576:12;6533:57;6437:159;;;:::o;6601:401::-;6683:6;6691;6699;6707;6760:3;6748:9;6739:7;6735:23;6731:33;6728:53;;;6777:1;6774;6767:12;6728:53;6800:28;6818:9;6800:28;:::i;:::-;6790:38;;6847:37;6880:2;6869:9;6865:18;6847:37;:::i;:::-;6837:47;;6903:37;6936:2;6925:9;6921:18;6903:37;:::i;:::-;6893:47;;6959:37;6992:2;6981:9;6977:18;6959:37;:::i;:::-;6949:47;;6601:401;;;;;;;:::o;7007:396::-;7083:6;7091;7144:2;7132:9;7123:7;7119:23;7115:32;7112:52;;;7160:1;7157;7150:12;7112:52;7199:9;7186:23;7218:31;7243:5;7218:31;:::i;:::-;7268:5;-1:-1:-1;7325:2:1;7310:18;;7297:32;7338:33;7297:32;7338:33;:::i;7801:380::-;7880:1;7876:12;;;;7923;;;7944:61;;7998:4;7990:6;7986:17;7976:27;;7944:61;8051:2;8043:6;8040:14;8020:18;8017:38;8014:161;;8097:10;8092:3;8088:20;8085:1;8078:31;8132:4;8129:1;8122:15;8160:4;8157:1;8150:15;8014:161;;7801:380;;;:::o;8595:356::-;8797:2;8779:21;;;8816:18;;;8809:30;8875:34;8870:2;8855:18;;8848:62;8942:2;8927:18;;8595:356::o;8956:127::-;9017:10;9012:3;9008:20;9005:1;8998:31;9048:4;9045:1;9038:15;9072:4;9069:1;9062:15;9088:127;9149:10;9144:3;9140:20;9137:1;9130:31;9180:4;9177:1;9170:15;9204:4;9201:1;9194:15;9220:135;9259:3;9280:17;;;9277:43;;9300:18;;:::i;:::-;-1:-1:-1;9347:1:1;9336:13;;9220:135::o;9360:184::-;9430:6;9483:2;9471:9;9462:7;9458:23;9454:32;9451:52;;;9499:1;9496;9489:12;9451:52;-1:-1:-1;9522:16:1;;9360:184;-1:-1:-1;9360:184:1:o;9549:125::-;9614:9;;;9635:10;;;9632:36;;;9648:18;;:::i;9984:245::-;10051:6;10104:2;10092:9;10083:7;10079:23;10075:32;10072:52;;;10120:1;10117;10110:12;10072:52;10152:9;10146:16;10171:28;10193:5;10171:28;:::i;10234:342::-;10436:2;10418:21;;;10475:2;10455:18;;;10448:30;-1:-1:-1;;;10509:2:1;10494:18;;10487:48;10567:2;10552:18;;10234:342::o;10581:168::-;10654:9;;;10685;;10702:15;;;10696:22;;10682:37;10672:71;;10723:18;;:::i;10754:306::-;10842:6;10850;10858;10911:2;10899:9;10890:7;10886:23;10882:32;10879:52;;;10927:1;10924;10917:12;10879:52;10956:9;10950:16;10940:26;;11006:2;10995:9;10991:18;10985:25;10975:35;;11050:2;11039:9;11035:18;11029:25;11019:35;;10754:306;;;;;:::o;13082:251::-;13152:6;13205:2;13193:9;13184:7;13180:23;13176:32;13173:52;;;13221:1;13218;13211:12;13173:52;13253:9;13247:16;13272:31;13297:5;13272:31;:::i;14709:681::-;14840:6;14848;14856;14864;14872;14880;14888;14896;14949:3;14937:9;14928:7;14924:23;14920:33;14917:53;;;14966:1;14963;14956:12;14917:53;14998:9;14992:16;15017:31;15042:5;15017:31;:::i;:::-;15067:5;15057:15;;;15112:2;15101:9;15097:18;15091:25;15081:35;;15156:2;15145:9;15141:18;15135:25;15125:35;;15200:2;15189:9;15185:18;15179:25;15169:35;;15244:3;15233:9;15229:19;15223:26;15213:36;;15289:3;15278:9;15274:19;15268:26;15258:36;;15334:3;15323:9;15319:19;15313:26;15303:36;;15379:3;15368:9;15364:19;15358:26;15348:36;;14709:681;;;;;;;;;;;:::o;15395:168::-;15462:6;15488:10;;;15500;;;15484:27;;15523:11;;;15520:37;;;15537:18;;:::i;:::-;15520:37;15395:168;;;;:::o;19261:127::-;19322:10;19317:3;19313:20;19310:1;19303:31;19353:4;19350:1;19343:15;19377:4;19374:1;19367:15;19393:120;19433:1;19459;19449:35;;19464:18;;:::i;:::-;-1:-1:-1;19498:9:1;;19393:120::o;20326:401::-;20528:2;20510:21;;;20567:2;20547:18;;;20540:30;20606:34;20601:2;20586:18;;20579:62;-1:-1:-1;;;20672:2:1;20657:18;;20650:35;20717:3;20702:19;;20326:401::o;20732:399::-;20934:2;20916:21;;;20973:2;20953:18;;;20946:30;21012:34;21007:2;20992:18;;20985:62;-1:-1:-1;;;21078:2:1;21063:18;;21056:33;21121:3;21106:19;;20732:399::o;24129:128::-;24196:9;;;24217:11;;;24214:37;;;24231:18;;:::i;25100:187::-;25139:1;25165:6;25198:2;25195:1;25191:10;25220:3;25210:37;;25227:18;;:::i;:::-;25265:10;;25261:20;;;;;25100:187;-1:-1:-1;;25100:187:1:o;25677:980::-;25939:4;25987:3;25976:9;25972:19;26018:6;26007:9;26000:25;26044:2;26082:6;26077:2;26066:9;26062:18;26055:34;26125:3;26120:2;26109:9;26105:18;26098:31;26149:6;26184;26178:13;26215:6;26207;26200:22;26253:3;26242:9;26238:19;26231:26;;26292:2;26284:6;26280:15;26266:29;;26313:1;26323:195;26337:6;26334:1;26331:13;26323:195;;;26402:13;;-1:-1:-1;;;;;26398:39:1;26386:52;;26493:15;;;;26458:12;;;;26434:1;26352:9;26323:195;;;-1:-1:-1;;;;;;;26574:32:1;;;;26569:2;26554:18;;26547:60;-1:-1:-1;;;26638:3:1;26623:19;26616:35;26535:3;25677:980;-1:-1:-1;;;25677:980:1:o

Swarm Source

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