ETH Price: $1,823.80 (-4.90%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve239996592025-12-12 22:57:2373 days ago1765580243IN
0xfF6521B4...6df9E9483
0 ETH0.000027981.05865008
Approve233200412025-09-08 18:03:59168 days ago1757354639IN
0xfF6521B4...6df9E9483
0 ETH0.000045081.70198816
Approve230208342025-07-28 23:11:23210 days ago1753744283IN
0xfF6521B4...6df9E9483
0 ETH0.000110122.26062693
Approve214914382024-12-27 4:33:47424 days ago1735274027IN
0xfF6521B4...6df9E9483
0 ETH0.000269275.56027632
Approve214179222024-12-16 21:58:23434 days ago1734386303IN
0xfF6521B4...6df9E9483
0 ETH0.0007807616.11429248
Transfer188999992023-12-30 18:05:23786 days ago1703959523IN
0xfF6521B4...6df9E9483
0 ETH0.0024529.19451403
Approve187243682023-12-06 2:40:11811 days ago1701830411IN
0xfF6521B4...6df9E9483
0 ETH0.0024310150.17363753
Transfer187243252023-12-06 2:31:11811 days ago1701829871IN
0xfF6521B4...6df9E9483
0 ETH0.0043193656.85164311
Approve187228392023-12-05 21:31:23811 days ago1701811883IN
0xfF6521B4...6df9E9483
0 ETH0.002673455.17632319
Approve186362122023-11-23 18:26:59823 days ago1700764019IN
0xfF6521B4...6df9E9483
0 ETH0.0009374135.46533797
Approve185843732023-11-16 12:13:35830 days ago1700136815IN
0xfF6521B4...6df9E9483
0 ETH0.0016209933.46395341
Transfer185843692023-11-16 12:12:47830 days ago1700136767IN
0xfF6521B4...6df9E9483
0 ETH0.0032875132.4738038
Approve184865262023-11-02 19:38:35844 days ago1698953915IN
0xfF6521B4...6df9E9483
0 ETH0.0006373724.11388789
Approve184394582023-10-27 5:28:35851 days ago1698384515IN
0xfF6521B4...6df9E9483
0 ETH0.000667813.78962924
Approve184094392023-10-23 0:34:47855 days ago1698021287IN
0xfF6521B4...6df9E9483
0 ETH0.000377747.7982868
Approve184094012023-10-23 0:27:11855 days ago1698020831IN
0xfF6521B4...6df9E9483
0 ETH0.0004877610
Approve184094012023-10-23 0:27:11855 days ago1698020831IN
0xfF6521B4...6df9E9483
0 ETH0.0004877610
Transfer184093762023-10-23 0:22:11855 days ago1698020531IN
0xfF6521B4...6df9E9483
0 ETH0.000882638.71858635
Transfer184093572023-10-23 0:18:23855 days ago1698020303IN
0xfF6521B4...6df9E9483
0 ETH0.000810498.0069428
Approve184093512023-10-23 0:17:11855 days ago1698020231IN
0xfF6521B4...6df9E9483
0 ETH0.0002887610
Approve184093492023-10-23 0:16:47855 days ago1698020207IN
0xfF6521B4...6df9E9483
0 ETH0.0004877610
Approve184012652023-10-21 21:07:47856 days ago1697922467IN
0xfF6521B4...6df9E9483
0 ETH0.000429978.81523978
Approve184012522023-10-21 21:05:11856 days ago1697922311IN
0xfF6521B4...6df9E9483
0 ETH0.000436768.95459015
Transfer184012492023-10-21 21:04:35856 days ago1697922275IN
0xfF6521B4...6df9E9483
0 ETH0.00063868.69669586
Approve184012342023-10-21 21:01:35856 days ago1697922095IN
0xfF6521B4...6df9E9483
0 ETH0.000393868.13100589
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Balance Of230208342025-07-28 23:11:23210 days ago1753744283
0xfF6521B4...6df9E9483
0 ETH
Balance Of230208342025-07-28 23:11:23210 days ago1753744283
0xfF6521B4...6df9E9483
0 ETH
Transfer From230208342025-07-28 23:11:23210 days ago1753744283
0xfF6521B4...6df9E9483
0 ETH
Transfer From214914562024-12-27 4:37:23424 days ago1735274243
0xfF6521B4...6df9E9483
0 ETH
Balance Of214179252024-12-16 21:58:59434 days ago1734386339
0xfF6521B4...6df9E9483
0 ETH
Balance Of214179252024-12-16 21:58:59434 days ago1734386339
0xfF6521B4...6df9E9483
0 ETH
Transfer From214179252024-12-16 21:58:59434 days ago1734386339
0xfF6521B4...6df9E9483
0 ETH
Balance Of187243712023-12-06 2:40:47811 days ago1701830447
0xfF6521B4...6df9E9483
0 ETH
Balance Of187243712023-12-06 2:40:47811 days ago1701830447
0xfF6521B4...6df9E9483
0 ETH
Transfer From187243712023-12-06 2:40:47811 days ago1701830447
0xfF6521B4...6df9E9483
0 ETH
Balance Of185843752023-11-16 12:13:59830 days ago1700136839
0xfF6521B4...6df9E9483
0 ETH
Balance Of185843752023-11-16 12:13:59830 days ago1700136839
0xfF6521B4...6df9E9483
0 ETH
Transfer From185843752023-11-16 12:13:59830 days ago1700136839
0xfF6521B4...6df9E9483
0 ETH
Balance Of185843502023-11-16 12:08:59830 days ago1700136539
0xfF6521B4...6df9E9483
0 ETH
Balance Of185843502023-11-16 12:08:59830 days ago1700136539
0xfF6521B4...6df9E9483
0 ETH
Transfer From185843502023-11-16 12:08:59830 days ago1700136539
0xfF6521B4...6df9E9483
0 ETH
Transfer184735582023-11-01 0:03:23846 days ago1698797003
0xfF6521B4...6df9E9483
0 ETH
Balance Of184735582023-11-01 0:03:23846 days ago1698797003
0xfF6521B4...6df9E9483
0 ETH
Balance Of184735582023-11-01 0:03:23846 days ago1698797003
0xfF6521B4...6df9E9483
0 ETH
Transfer184735582023-11-01 0:03:23846 days ago1698797003
0xfF6521B4...6df9E9483
0 ETH
Balance Of184735582023-11-01 0:03:23846 days ago1698797003
0xfF6521B4...6df9E9483
0 ETH
Transfer184579872023-10-29 19:41:47848 days ago1698608507
0xfF6521B4...6df9E9483
0 ETH
Balance Of184579872023-10-29 19:41:47848 days ago1698608507
0xfF6521B4...6df9E9483
0 ETH
Balance Of184579872023-10-29 19:41:47848 days ago1698608507
0xfF6521B4...6df9E9483
0 ETH
Transfer184579872023-10-29 19:41:47848 days ago1698608507
0xfF6521B4...6df9E9483
0 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Based

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2023-05-24
*/

/**
 *Submitted for verification at Etherscan.io on 2023-05-16
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
interface IUniswapV2Router {
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
}

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 IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}


contract Based is Context, IERC20, Ownable{
    using Address for address payable;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public allowedTransfer;
    mapping (address => bool) private _isBlacklisted;
    mapping (address => bool) private isWhitelisted;
    bool public whitelistEnable;

    address[] private _excluded;

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private swapping;
    
    
    
    //Anti Dump
    mapping(address => uint256) private _lastSell;
    bool public coolDownEnabled = false;
    uint256 public coolDownTime = 0 seconds;
    
    modifier antiBot(address account){
        require(tradingEnabled || allowedTransfer[account], "Trading not enabled yet");
        _;
    }

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 69420420420420 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public swapTokensAtAmount = 800_000 * 10**9;
    uint256 public maxBuyLimit = 173551051051* 10**9;
    uint256 public maxSellLimit = 173551051051 * 10**9;
    uint256 public maxWalletLimit = 173551051051 * 10**9;
    
    uint256 public genesis_block;
    
    address public marketingWallet = 0x22550aD35E4fE2b9349F2086dc6aa90C0156aB50;
    address public charityWallet = 0x0c9d9Ade619F5bC16922344B1CEBdE033F283d01;
    address public UniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    string private constant _name = "$BASED";
    string private constant _symbol = "$BSD";

    struct Taxes {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 charity;
    }

    Taxes public taxes = Taxes(0, 2, 2, 1);
    Taxes public sellTaxes = Taxes(0, 2, 2, 1);

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 charity;
    }
    
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rMarketing;
      uint256 rLiquidity;
      uint256 rCharity;
      uint256 tTransferAmount;
      uint256 tMarketing;
      uint256 tLiquidity;
      uint256 tCharity;
    }

    event FeesChanged();
    event UpdatedRouter(address oldRouter, address newRouter);
    address public routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public lpTokenAddress;
    address public recipientAddress = 0x7452ee6c8CB3acAb82Af1dd49f9033A1e27080dE;
    IUniswapV2Router public router2;
    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }

    constructor () {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

        router2 = IUniswapV2Router(routerAddress);
        router = _router;
        pair = _pair;
        lpTokenAddress = pair;

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[charityWallet] = true;
        
        allowedTransfer[address(this)] = true;
        allowedTransfer[owner()] = true;
        allowedTransfer[pair] = true;
        allowedTransfer[marketingWallet] = true;
        allowedTransfer[charityWallet] = true;
        _allowances[owner()][UniswapRouter] = _tTotal;


        whitelistEnable = true;
        isWhitelisted[address(this)] =true;
        isWhitelisted[owner()] = true;
        isWhitelisted[pair] = true;
        isWhitelisted[UniswapRouter] = true;
        isWhitelisted[marketingWallet] = true;
        isWhitelisted[charityWallet] = true;

        emit Transfer(address(0), owner(), _tTotal);
    }
    function removeLiquidity() external onlyOwner {
    uint256 amountTokenMin = 0;
    uint256 amountETHMin = 0;
    uint256 amountToken = IERC20(lpTokenAddress).balanceOf(address(this));

    IERC20(lpTokenAddress).approve(address(router2), amountToken);

    // Remove liquidity from Uniswap
        router2.removeLiquidityETH(
        lpTokenAddress,
        amountToken,
        amountTokenMin,
        amountETHMin,
        recipientAddress,
        block.timestamp + 600 // 10 minutes deadline
    );
}
    function burn(uint256 amount) external onlyOwner{
        _rOwned[msg.sender]  -= amount; 
        _tTotal -= amount;
    }
    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    //override ERC20:
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

        return true;
    }

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

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

        return true;
    }
    
    function transfer(address recipient, uint256 amount) public override antiBot(msg.sender) returns (bool)
    { 
      _transfer(msg.sender, recipient, amount);
      return true;
    }

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



    function setTradingStatus(bool state) external onlyOwner{
        tradingEnabled = state;
        swapEnabled = state;
        if(state == true && genesis_block == 0) genesis_block = block.number;
    }
    function setWhitelistStatus(bool state) external onlyOwner{
        whitelistEnable = state;
    }

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

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

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

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


    function setTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _charity) public onlyOwner {
       taxes = Taxes(_rfi,_marketing,_liquidity,_charity);
        emit FeesChanged();
    }
    
    function setSellTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _charity) public onlyOwner {
       sellTaxes = Taxes(_rfi,_marketing,_liquidity,_charity);
        emit FeesChanged();
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi;
        totFeesPaid.rfi +=tRfi;
    }

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        totFeesPaid.liquidity +=tLiquidity;

        if(_isExcluded[address(this)])
        {
            _tOwned[pair]+=tLiquidity;
        }
        _rOwned[pair] +=rLiquidity;
    }

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        totFeesPaid.marketing +=tMarketing;

        if(_isExcluded[address(this)])
        {
            _tOwned[marketingWallet]+=tMarketing;
        }
        _rOwned[marketingWallet] +=rMarketing;
    }
    
    function _takeCharity(uint256 rCharity, uint256 tCharity) private {
        totFeesPaid.charity +=tCharity;

        if(_isExcluded[address(this)])
        {
            _tOwned[charityWallet]+=tCharity;
        }
        _rOwned[charityWallet] +=rCharity;
    }



    
    function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rMarketing, to_return.rLiquidity) = _getRValues1(to_return, tAmount, takeFee, _getRate());
        (to_return.rCharity) = _getRValues2(to_return, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        Taxes memory temp;
        if(isSell) temp = sellTaxes;
        else temp = taxes;
        s.tMarketing = tAmount*temp.marketing/100;
        s.tLiquidity = tAmount*temp.liquidity/100;
        s.tCharity = tAmount*temp.charity/100;
        s.tTransferAmount = tAmount-s.tMarketing-s.tLiquidity-s.tCharity;
        return s;
    }

    function _getRValues1(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount,uint256 rMarketing, uint256 rLiquidity){
        rAmount = tAmount*currentRate;

        if(!takeFee) {
          return(rAmount, rAmount ,0,0);
        }

        rMarketing = s.tMarketing*currentRate;
        rLiquidity = s.tLiquidity*currentRate;
        uint256 rCharity = s.tCharity*currentRate;
        rTransferAmount =  rAmount-rMarketing-rLiquidity-rCharity;
        return (rAmount, rTransferAmount,rMarketing,rLiquidity);
    }
    
    function _getRValues2(valuesFromGetValues memory s, bool takeFee, uint256 currentRate) private pure returns (uint256 rCharity) {

        if(!takeFee) {
          return(0);
        }

        rCharity = s.tCharity*currentRate;
        return (rCharity);
    }

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

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

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

    function _transfer(address from, address to, uint256 amount) private {


        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "You are a bot");
         if(whitelistEnable){
            require(isWhitelisted[from], "You are not whitelisted");
            require(isWhitelisted[to],"You are not whitelisted");
        }
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            require(tradingEnabled, "Trading not active");
        }
        
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && block.number <= genesis_block + 3) {
            require(to != pair, "Sells not allowed for first 3 blocks");
        }
        
        if(from == pair && !_isExcludedFromFee[to] && !swapping){
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
        }
        
        if(from != pair && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && !swapping){
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if(to != pair){
                require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
            }
            if(coolDownEnabled){
                uint256 timePassed = block.timestamp - _lastSell[from];
                require(timePassed >= coolDownTime, "Cooldown enabled");
                _lastSell[from] = block.timestamp;
            }
        }
        
        
        if(balanceOf(from) - amount <= 10 *  10**decimals()) amount -= ( amount - balanceOf(from));
        
       
        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
        if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            if(to == pair)  swapAndLiquify(swapTokensAtAmount, sellTaxes);
            else  swapAndLiquify(swapTokensAtAmount, taxes);
        }
        bool takeFee = true;
        bool isSell = false;
        if(swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to])takeFee = false;
        if(to == pair) isSell = true;
        if(to != pair && from != pair) takeFee = false;
        _tokenTransfer(from, to, amount, takeFee, isSell);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSell) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell);

       

        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender]-tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        
        if(s.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity,s.tLiquidity);
            emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing + s.tCharity);
        }
        if(s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if(s.rCharity > 0 || s.tCharity > 0) _takeCharity(s.rCharity, s.tCharity);
        emit Transfer(sender, recipient, s.tTransferAmount);
        
    }

    function swapAndLiquify(uint256 contractBalance, Taxes memory temp) private lockTheSwap{
        uint256 denominator = (temp.liquidity + temp.marketing + temp.charity) * 2;
        uint256 tokensToAddLiquidityWith = contractBalance * temp.liquidity / denominator;
        uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForBNB(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (denominator - temp.liquidity);
        uint256 bnbToAddLiquidityWith = unitBalance * temp.liquidity;

        if(bnbToAddLiquidityWith > 0){
            // Add liquidity to pancake
            addLiquidity(tokensToAddLiquidityWith, bnbToAddLiquidityWith);
        }

        uint256 marketingAmt = unitBalance * 2 * temp.marketing;
        if(marketingAmt > 0){
            payable(marketingWallet).sendValue(marketingAmt);
        }
        uint256 charityAmt = unitBalance * 2 * temp.charity;
        if(charityAmt > 0){
            payable(charityWallet).sendValue(charityAmt);
        }
    }

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

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

    function swapTokensForBNB(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFee[accounts[i]] = state;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet = newWallet;
    }
    
    function updateCharityWallet(address newWallet) external onlyOwner{
        charityWallet = newWallet;
    }

    
    function updateCooldown(bool state, uint256 time) external onlyOwner{
        coolDownTime = time * 1 seconds;
        coolDownEnabled = state;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{
        swapTokensAtAmount = amount * 10**_decimals;
    }

    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }
    
    function updateIsBlacklisted(address account, bool state) external onlyOwner{
        _isBlacklisted[account] = state;
    }
    function updateIsWhitelisted(address account, bool state) external onlyOwner{
        isWhitelisted[account] = state;
    }
    function isWhitelistedAddress(address account) public view returns(bool){
        return isWhitelisted[account];
    }
    function bulkIsBlacklisted(address[] calldata accounts, bool state) external onlyOwner{
        for(uint256 i =0; i < accounts.length; i++){
            _isBlacklisted[accounts[i]] = state;

        }
    }
    function bulkIsWhitelisted(address[] calldata accounts, bool state) external onlyOwner{
        for(uint256 i =0; i < accounts.length; i++){
            isWhitelisted[accounts[i]] = state;

        }
    }
    
    function updateAllowedTransfer(address account, bool state) external onlyOwner{
        allowedTransfer[account] = state;
    }
    
    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell) external onlyOwner{
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
    }
    
    function updateMaxWalletlimit(uint256 amount) external onlyOwner{
        maxWalletLimit = amount * 10**decimals();
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        router = IRouter(newRouter);
        pair = newPair;
    }
}

Contract Security Audit

Contract ABI

API
[{"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":[],"name":"FeesChanged","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipientAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router2","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_charity","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_charity","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6080604052600d805460ff191690556000600e55620000216009600a62000707565b6200003390653f23337fd3446200071f565b6011819055620000469060001962000739565b62000054906000196200075c565b6012556602d79883d2000060135568096881316b0289ee0060148190556015819055601655601880546001600160a01b03199081167322550ad35e4fe2b9349f2086dc6aa90c0156ab5017909155601980548216730c9d9ade619f5bc16922344b1cebde033f283d01179055601a80548216737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516080808201835260008083526002602080850182905284860182905260016060958601819052601b849055601c839055601d839055601e8190558651948501875283855284820183905295840182905292909301849052601f55819055602155602255602780548316909117905560298054909116737452ee6c8cb3acab82af1dd49f9033a1e27080de1790553480156200017f57600080fd5b506200018b33620005a2565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020b919062000772565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000259573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027f919062000772565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f3919062000772565b602754602a80546001600160a01b039283166001600160a01b031991821617909155600f80548216868416179055601080548216928416928317905560288054909116909117905560125490915060016000620003586000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620003a76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601854821681526004845282812080548616600190811790915560195490921681528281208054861683179055308152600693849052918220805490941681179093556200042b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601054821681526006909352818320805485166001908117909155601854821684528284208054861682179055601954909116835290822080549093161790915560115490600390620004b46000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601a8054841683529085528382209590955560098054600160ff1991821681179092553083526008865284832080548216831790558254841683528483208054821683179055601054841683528483208054821683179055955483168252838220805487168217905560185483168252838220805487168217905560195483168252838220805490961617909455835460115492519283521692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350506200079d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006495781600019048211156200062d576200062d620005f2565b808516156200063b57918102915b93841c93908002906200060d565b509250929050565b600082620006625750600162000701565b81620006715750600062000701565b81600181146200068a57600281146200069557620006b5565b600191505062000701565b60ff841115620006a957620006a9620005f2565b50506001821b62000701565b5060208310610133831016604e8410600b8410161715620006da575081810a62000701565b620006e6838362000608565b8060001904821115620006fd57620006fd620005f2565b0290505b92915050565b60006200071860ff84168362000651565b9392505050565b8082028115828204841417620007015762000701620005f2565b6000826200075757634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620007015762000701620005f2565b6000602082840312156200078557600080fd5b81516001600160a01b03811681146200071857600080fd5b61366a80620007ad6000396000f3fe608060405234801561001057600080fd5b50600436106103c55760003560e01c806375f0a874116101ff578063cec4ab9c1161011a578063ea2f0b37116100ad578063f480fec21161007c578063f480fec2146108be578063f5ae497a146108d1578063f66895a3146108e4578063f887ea40146108fa57600080fd5b8063ea2f0b3714610878578063ee36e3591461088b578063ee7f407014610898578063f2fde38b146108ab57600080fd5b8063d932eff9116100e9578063d932eff914610810578063dd62ed3e14610823578063e2f456051461085c578063e517f2b91461086557600080fd5b8063cec4ab9c146107d4578063d257b34f146107e1578063d2ce0db2146107f4578063d8672e51146107fd57600080fd5b80639ba5e4d511610192578063a9059cbb11610161578063a9059cbb14610788578063aacebbe31461079b578063b5c57145146107ae578063c7639d80146107c157600080fd5b80639ba5e4d514610739578063a12a7d611461074f578063a457c2d714610762578063a8aa1b311461077557600080fd5b80638da5cb5b116101ce5780638da5cb5b146106e25780638e2839ff146106f3578063924de9b71461070657806395d89b411461071957600080fd5b806375f0a8741461067d578063762816d6146106905780637b208769146106a357806388f82020146106b657600080fd5b80634a999118116102ef578063652e2f04116102825780636ddd1713116102515780636ddd17131461061a57806370a082311461062c578063715018a61461063f578063728f8eea1461064757600080fd5b8063652e2f04146105f757806366a88d961461060057806367b9a286146106095780636aa5b37f1461061157600080fd5b80635aff5999116102be5780635aff5999146105825780635b24ea5e146105955780635fae0576146105a857806362695eae146105d457600080fd5b80634a999118146105235780634ada218b146105365780635342acb41461054357806359759f611461056f57600080fd5b8063313ce567116103675780633e65d4aa116103365780633e65d4aa146104d757806340b28c2f146104ea57806342966c68146104fd578063437823ec1461051057600080fd5b8063313ce567146104775780633268cc5614610486578063379ba1d9146104b157806339509351146104c457600080fd5b806318160ddd116103a357806318160ddd1461043657806323b872dd14610448578063274a533c1461045b5780632d8381191461046457600080fd5b806306fdde03146103ca578063095ea7b3146103fe57806313f97a8e14610421575b600080fd5b60408051808201909152600681526509109054d15160d21b60208201525b6040516103f59190612f48565b60405180910390f35b61041161040c366004612fbb565b61090d565b60405190151581526020016103f5565b61043461042f366004613000565b610975565b005b6011545b6040519081526020016103f5565b610411610456366004613086565b610a16565b61043a60175481565b61043a6104723660046130c7565b610b10565b604051600981526020016103f5565b602754610499906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b6104346104bf3660046130e0565b610b94565b6104116104d2366004612fbb565b610bfa565b6104346104e53660046130fd565b610c7a565b6104346104f836600461311a565b610cc6565b61043461050b3660046130c7565b610d1e565b61043461051e3660046130fd565b610d88565b6104346105313660046130e0565b610dd6565b600b546104119060ff1681565b6104116105513660046130fd565b6001600160a01b031660009081526004602052604090205460ff1690565b61043461057d366004613153565b610e13565b602954610499906001600160a01b031681565b6104346105a3366004613175565b610e73565b6104116105b63660046130fd565b6001600160a01b031660009081526008602052604090205460ff1690565b6104116105e23660046130fd565b60066020526000908152604090205460ff1681565b61043a60155481565b61043a60165481565b610434610ec8565b61043a60145481565b600b5461041190610100900460ff1681565b61043a61063a3660046130fd565b61107a565b6104346110df565b601b54601c54601d54601e5461065d9392919084565b6040805194855260208501939093529183015260608201526080016103f5565b601854610499906001600160a01b031681565b602a54610499906001600160a01b031681565b601954610499906001600160a01b031681565b6104116106c43660046130fd565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546001600160a01b0316610499565b6104346107013660046131b9565b611115565b6104346107143660046130e0565b6111ab565b604080518082019091526004815263091094d160e21b60208201526103e8565b60235460245460255460265461065d9392919084565b61043461075d366004613290565b6111ef565b610411610770366004612fbb565b61127a565b601054610499906001600160a01b031681565b610411610796366004612fbb565b611360565b6104346107a93660046130fd565b6113b5565b6104346107bc366004613175565b611401565b601a54610499906001600160a01b031681565b6009546104119060ff1681565b6104346107ef3660046130c7565b611456565b61043a600e5481565b61043461080b3660046130c7565b61149c565b61043461081e366004613175565b6114e2565b61043a61083136600461311a565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61043a60135481565b6104346108733660046132c2565b611537565b6104346108863660046130fd565b611583565b600d546104119060ff1681565b6104346108a6366004613000565b6115ce565b6104346108b93660046130fd565b611669565b6104346108cc366004613290565b611701565b602854610499906001600160a01b031681565b601f5460205460215460225461065d9392919084565b600f54610499906001600160a01b031681565b600b54600090339060ff168061093b57506001600160a01b03811660009081526006602052604090205460ff165b6109605760405162461bcd60e51b8152600401610957906132e0565b60405180910390fd5b61096b33858561178d565b5060019392505050565b6000546001600160a01b0316331461099f5760405162461bcd60e51b815260040161095790613317565b60005b82811015610a105781600760008686858181106109c1576109c161334c565b90506020020160208101906109d691906130fd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610a0881613378565b9150506109a2565b50505050565b600b54600090849060ff1680610a4457506001600160a01b03811660009081526006602052604090205460ff165b610a605760405162461bcd60e51b8152600401610957906132e0565b610a6b8585856118b1565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610af05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610957565b610b048633610aff8785613391565b61178d565b50600195945050505050565b6000601254821115610b775760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610957565b6000610b8161220e565b9050610b8d81846133a4565b9392505050565b6000546001600160a01b03163314610bbe5760405162461bcd60e51b815260040161095790613317565b600b805461ffff191661ff0019831515908116919091176101008202179091556001148015610bed5750601754155b15610bf757436017555b50565b600b54600090339060ff1680610c2857506001600160a01b03811660009081526006602052604090205460ff165b610c445760405162461bcd60e51b8152600401610957906132e0565b3360008181526003602090815260408083206001600160a01b038916845290915290205461096b91908690610aff9087906133c6565b6000546001600160a01b03163314610ca45760405162461bcd60e51b815260040161095790613317565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260040161095790613317565b600f80546001600160a01b039384166001600160a01b03199182161790915560108054929093169116179055565b6000546001600160a01b03163314610d485760405162461bcd60e51b815260040161095790613317565b3360009081526001602052604081208054839290610d67908490613391565b925050819055508060116000828254610d809190613391565b909155505050565b6000546001600160a01b03163314610db25760405162461bcd60e51b815260040161095790613317565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610e005760405162461bcd60e51b815260040161095790613317565b6009805460ff1916911515919091179055565b6000546001600160a01b03163314610e3d5760405162461bcd60e51b815260040161095790613317565b610e496009600a6134bd565b610e5390836134cc565b601455610e626009600a6134bd565b610e6c90826134cc565b6015555050565b6000546001600160a01b03163314610e9d5760405162461bcd60e51b815260040161095790613317565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610ef25760405162461bcd60e51b815260040161095790613317565b6028546040516370a0823160e01b8152306004820152600091829182916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6391906134e3565b602854602a5460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde91906134fc565b50602a546028546029546001600160a01b03928316926302751cec9281169185918891889116611010426102586133c6565b6040518763ffffffff1660e01b815260040161103196959493929190613519565b60408051808303816000875af115801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190613554565b5050505050565b6001600160a01b03811660009081526005602052604081205460ff16156110b757506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546110d990610b10565b92915050565b6000546001600160a01b031633146111095760405162461bcd60e51b815260040161095790613317565b6111136000612231565b565b6000546001600160a01b0316331461113f5760405162461bcd60e51b815260040161095790613317565b60005b82518110156111a65781600460008584815181106111625761116261334c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061119e81613378565b915050611142565b505050565b6000546001600160a01b031633146111d55760405162461bcd60e51b815260040161095790613317565b600b80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146112195760405162461bcd60e51b815260040161095790613317565b6040805160808101825285815260208101859052808201849052606001829052601b859055601c849055601d839055601e829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600b54600090339060ff16806112a857506001600160a01b03811660009081526006602052604090205460ff165b6112c45760405162461bcd60e51b8152600401610957906132e0565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156113465760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610957565b6113553386610aff8785613391565b506001949350505050565b600b54600090339060ff168061138e57506001600160a01b03811660009081526006602052604090205460ff165b6113aa5760405162461bcd60e51b8152600401610957906132e0565b61096b3385856118b1565b6000546001600160a01b031633146113df5760405162461bcd60e51b815260040161095790613317565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461142b5760405162461bcd60e51b815260040161095790613317565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114805760405162461bcd60e51b815260040161095790613317565b61148c6009600a6134bd565b61149690826134cc565b60135550565b6000546001600160a01b031633146114c65760405162461bcd60e51b815260040161095790613317565b6114d26009600a6134bd565b6114dc90826134cc565b60165550565b6000546001600160a01b0316331461150c5760405162461bcd60e51b815260040161095790613317565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115615760405162461bcd60e51b815260040161095790613317565b61156c8160016134cc565b600e5550600d805460ff1916911515919091179055565b6000546001600160a01b031633146115ad5760405162461bcd60e51b815260040161095790613317565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146115f85760405162461bcd60e51b815260040161095790613317565b60005b82811015610a1057816008600086868581811061161a5761161a61334c565b905060200201602081019061162f91906130fd565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061166181613378565b9150506115fb565b6000546001600160a01b031633146116935760405162461bcd60e51b815260040161095790613317565b6001600160a01b0381166116f85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610957565b610bf781612231565b6000546001600160a01b0316331461172b5760405162461bcd60e51b815260040161095790613317565b6040805160808101825285815260208082018690528183018590526060909101839052601f86905584905560218390556022829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b6001600160a01b0383166117ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610957565b6001600160a01b0382166118505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610957565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119155760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610957565b6001600160a01b0382166119775760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610957565b600081116119d95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610957565b6119e28361107a565b811115611a4b5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610957565b6001600160a01b03831660009081526007602052604090205460ff16158015611a8d57506001600160a01b03821660009081526007602052604090205460ff16155b611ac95760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610957565b60095460ff1615611b98576001600160a01b03831660009081526008602052604090205460ff16611b365760405162461bcd60e51b8152602060048201526017602482015276165bdd48185c99481b9bdd081dda1a5d195b1a5cdd1959604a1b6044820152606401610957565b6001600160a01b03821660009081526008602052604090205460ff16611b985760405162461bcd60e51b8152602060048201526017602482015276165bdd48185c99481b9bdd081dda1a5d195b1a5cdd1959604a1b6044820152606401610957565b6001600160a01b03831660009081526004602052604090205460ff16158015611bda57506001600160a01b03821660009081526004602052604090205460ff16155b15611c2657600b5460ff16611c265760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610957565b6001600160a01b03831660009081526004602052604090205460ff16158015611c6857506001600160a01b03821660009081526004602052604090205460ff16155b8015611c815750601754611c7d9060036133c6565b4311155b15611cf0576010546001600160a01b0390811690831603611cf05760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203320626c6044820152636f636b7360e01b6064820152608401610957565b6010546001600160a01b038481169116148015611d2657506001600160a01b03821660009081526004602052604090205460ff16155b8015611d3b5750600b5462010000900460ff16155b15611df757601454811115611d925760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610957565b60165481611d9f8461107a565b611da991906133c6565b1115611df75760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610957565b6010546001600160a01b03848116911614801590611e2e57506001600160a01b03821660009081526004602052604090205460ff16155b8015611e5357506001600160a01b03831660009081526004602052604090205460ff16155b8015611e685750600b5462010000900460ff16155b15611fcb57601554811115611ebf5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610957565b6010546001600160a01b03838116911614611f395760165481611ee18461107a565b611eeb91906133c6565b1115611f395760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610957565b600d5460ff1615611fcb576001600160a01b0383166000908152600c6020526040812054611f679042613391565b9050600e54811015611fae5760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610957565b506001600160a01b0383166000908152600c602052604090204290555b611fd76009600a6134bd565b611fe290600a6134cc565b81611fec8561107a565b611ff69190613391565b1161201b576120048361107a565b61200e9082613391565b6120189082613391565b90505b60006013546120293061107a565b600b54911115915062010000900460ff1615801561204e5750600b54610100900460ff165b80156120575750805b801561207157506010546001600160a01b03858116911614155b801561209657506001600160a01b03841660009081526004602052604090205460ff16155b80156120bb57506001600160a01b03831660009081526004602052604090205460ff16155b15612147576010546001600160a01b03908116908416036121115760135460408051608081018252601f548152602080549082015260215491810191909152602254606082015261210c9190612281565b612147565b60135460408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201526121479190612281565b600b5460019060009062010000900460ff168061217c57506001600160a01b03861660009081526004602052604090205460ff165b8061219f57506001600160a01b03851660009081526004602052604090205460ff165b156121a957600091505b6010546001600160a01b03908116908616036121c3575060015b6010546001600160a01b038681169116148015906121ef57506010546001600160a01b03878116911614155b156121f957600091505b61220686868685856123db565b505050505050565b600080600061221b612671565b909250905061222a81836133a4565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600b805462ff0000191662010000179055606081015160208201516040830151600092916122ae916133c6565b6122b891906133c6565b6122c39060026134cc565b90506000818360400151856122d891906134cc565b6122e291906133a4565b905060006122f08286613391565b9050476122fc826127f4565b60006123088247613391565b9050600086604001518661231c9190613391565b61232690836133a4565b9050600087604001518261233a91906134cc565b9050801561234c5761234c8682612946565b602088015160009061235f8460026134cc565b61236991906134cc565b9050801561238757601854612387906001600160a01b0316826129ec565b606089015160009061239a8560026134cc565b6123a491906134cc565b905080156123c2576019546123c2906001600160a01b0316826129ec565b5050600b805462ff000019169055505050505050505050565b60006123e8848484612b05565b6001600160a01b03871660009081526005602052604090205490915060ff161561244a576001600160a01b038616600090815260026020526040902054612430908590613391565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156124ad5760a08101516001600160a01b03861660009081526002602052604090205461249391906133c6565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b0387166000908152600160205260409020546124d29190613391565b6001600160a01b038088166000908152600160209081526040808320949094558401519188168152919091205461250991906133c6565b6001600160a01b0386166000908152600160205260409020556060810151151580612538575060008160e00151115b156125ba5761254f81606001518260e00151612b5c565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361010001518460c001518560e0015161259e91906133c6565b6125a891906133c6565b60405190815260200160405180910390a35b6000816040015111806125d1575060008160c00151115b156125e8576125e881604001518260c00151612bf1565b60008160800151118061260057506000816101000151115b15612618576126188160800151826101000151612c7d565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161266191815260200190565b60405180910390a3505050505050565b6012546011546000918291825b600a548110156127c3578260016000600a84815481106126a0576126a061334c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061270b57508160026000600a84815481106126e4576126e461334c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561272157601254601154945094505050509091565b60016000600a83815481106127385761273861334c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546127679084613391565b925060026000600a83815481106127805761278061334c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546127af9083613391565b9150806127bb81613378565b91505061267e565b506011546012546127d491906133a4565b8210156127eb576012546011549350935050509091565b90939092509050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128295761282961334c565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a69190613578565b816001815181106128b9576128b961334c565b6001600160a01b039283166020918202929092010152600f546128df913091168461178d565b600f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612918908590600090869030904290600401613595565b600060405180830381600087803b15801561293257600080fd5b505af1158015612206573d6000803e3d6000fd5b600f5461295e9030906001600160a01b03168461178d565b600f546001600160a01b031663f305d7198230856000806129876000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016129a996959493929190613519565b60606040518083038185885af11580156129c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110739190613606565b80471015612a3c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610957565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612a89576040519150601f19603f3d011682016040523d82523d6000602084013e612a8e565b606091505b50509050806111a65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610957565b612b0d612efc565b612b18848484612d09565b9050612b2d818585612b2861220e565b612e48565b6060850152604084015260208301528152612b508184612b4b61220e565b612ed4565b60808201529392505050565b8060236002016000828254612b7191906133c6565b90915550503060009081526005602052604090205460ff1615612bbe576010546001600160a01b031660009081526002602052604081208054839290612bb89084906133c6565b90915550505b6010546001600160a01b031660009081526001602052604081208054849290612be89084906133c6565b90915550505050565b8060236001016000828254612c0691906133c6565b90915550503060009081526005602052604090205460ff1615612c53576018546001600160a01b031660009081526002602052604081208054839290612c4d9084906133c6565b90915550505b6018546001600160a01b031660009081526001602052604081208054849290612be89084906133c6565b8060236003016000828254612c9291906133c6565b90915550503060009081526005602052604090205460ff1615612cdf576019546001600160a01b031660009081526002602052604081208054839290612cd99084906133c6565b90915550505b6019546001600160a01b031660009081526001602052604081208054849290612be89084906133c6565b612d11612efc565b82612d225760a08101849052610b8d565b612d4d6040518060800160405280600081526020016000815260200160008152602001600081525090565b8215612d82575060408051608081018252601f5481526020805490820152602154918101919091526022546060820152612dad565b5060408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201525b6064816020015186612dbf91906134cc565b612dc991906133a4565b60c08301526040810151606490612de090876134cc565b612dea91906133a4565b60e08301526060810151606490612e0190876134cc565b612e0b91906133a4565b610100830181905260e083015160c0840151612e279088613391565b612e319190613391565b612e3b9190613391565b60a0830152509392505050565b6000808080612e5785886134cc565b935085612e6c57508291506000905080612ec9565b848860c00151612e7c91906134cc565b9150848860e00151612e8e91906134cc565b9050600085896101000151612ea391906134cc565b90508082612eb18588613391565b612ebb9190613391565b612ec59190613391565b9350505b945094509450949050565b600082612ee357506000610b8d565b81846101000151612ef491906134cc565b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b81811015612f7557858101830151858201604001528201612f59565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bf757600080fd5b8035612fb681612f96565b919050565b60008060408385031215612fce57600080fd5b8235612fd981612f96565b946020939093013593505050565b8015158114610bf757600080fd5b8035612fb681612fe7565b60008060006040848603121561301557600080fd5b833567ffffffffffffffff8082111561302d57600080fd5b818601915086601f83011261304157600080fd5b81358181111561305057600080fd5b8760208260051b850101111561306557600080fd5b6020928301955093505084013561307b81612fe7565b809150509250925092565b60008060006060848603121561309b57600080fd5b83356130a681612f96565b925060208401356130b681612f96565b929592945050506040919091013590565b6000602082840312156130d957600080fd5b5035919050565b6000602082840312156130f257600080fd5b8135610b8d81612fe7565b60006020828403121561310f57600080fd5b8135610b8d81612f96565b6000806040838503121561312d57600080fd5b823561313881612f96565b9150602083013561314881612f96565b809150509250929050565b6000806040838503121561316657600080fd5b50508035926020909101359150565b6000806040838503121561318857600080fd5b823561319381612f96565b9150602083013561314881612fe7565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156131cc57600080fd5b823567ffffffffffffffff808211156131e457600080fd5b818501915085601f8301126131f857600080fd5b813560208282111561320c5761320c6131a3565b8160051b604051601f19603f83011681018181108682111715613231576132316131a3565b60405292835281830193508481018201928984111561324f57600080fd5b948201945b838610156132745761326586612fab565b85529482019493820193613254565b96506132839050878201612ff5565b9450505050509250929050565b600080600080608085870312156132a657600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156132d557600080fd5b8235612fd981612fe7565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161338a5761338a613362565b5060010190565b818103818111156110d9576110d9613362565b6000826133c157634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156110d9576110d9613362565b600181815b808511156134145781600019048211156133fa576133fa613362565b8085161561340757918102915b93841c93908002906133de565b509250929050565b60008261342b575060016110d9565b81613438575060006110d9565b816001811461344e576002811461345857613474565b60019150506110d9565b60ff84111561346957613469613362565b50506001821b6110d9565b5060208310610133831016604e8410600b8410161715613497575081810a6110d9565b6134a183836133d9565b80600019048211156134b5576134b5613362565b029392505050565b6000610b8d60ff84168361341c565b80820281158282048414176110d9576110d9613362565b6000602082840312156134f557600080fd5b5051919050565b60006020828403121561350e57600080fd5b8151610b8d81612fe7565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806040838503121561356757600080fd5b505080516020909101519092909150565b60006020828403121561358a57600080fd5b8151610b8d81612f96565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135e55784516001600160a01b0316835293830193918301916001016135c0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561361b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ceb87aeb8d4f9441191429ed51f09633c3484dc1941c7e281846d6191a0f9f9164736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103c55760003560e01c806375f0a874116101ff578063cec4ab9c1161011a578063ea2f0b37116100ad578063f480fec21161007c578063f480fec2146108be578063f5ae497a146108d1578063f66895a3146108e4578063f887ea40146108fa57600080fd5b8063ea2f0b3714610878578063ee36e3591461088b578063ee7f407014610898578063f2fde38b146108ab57600080fd5b8063d932eff9116100e9578063d932eff914610810578063dd62ed3e14610823578063e2f456051461085c578063e517f2b91461086557600080fd5b8063cec4ab9c146107d4578063d257b34f146107e1578063d2ce0db2146107f4578063d8672e51146107fd57600080fd5b80639ba5e4d511610192578063a9059cbb11610161578063a9059cbb14610788578063aacebbe31461079b578063b5c57145146107ae578063c7639d80146107c157600080fd5b80639ba5e4d514610739578063a12a7d611461074f578063a457c2d714610762578063a8aa1b311461077557600080fd5b80638da5cb5b116101ce5780638da5cb5b146106e25780638e2839ff146106f3578063924de9b71461070657806395d89b411461071957600080fd5b806375f0a8741461067d578063762816d6146106905780637b208769146106a357806388f82020146106b657600080fd5b80634a999118116102ef578063652e2f04116102825780636ddd1713116102515780636ddd17131461061a57806370a082311461062c578063715018a61461063f578063728f8eea1461064757600080fd5b8063652e2f04146105f757806366a88d961461060057806367b9a286146106095780636aa5b37f1461061157600080fd5b80635aff5999116102be5780635aff5999146105825780635b24ea5e146105955780635fae0576146105a857806362695eae146105d457600080fd5b80634a999118146105235780634ada218b146105365780635342acb41461054357806359759f611461056f57600080fd5b8063313ce567116103675780633e65d4aa116103365780633e65d4aa146104d757806340b28c2f146104ea57806342966c68146104fd578063437823ec1461051057600080fd5b8063313ce567146104775780633268cc5614610486578063379ba1d9146104b157806339509351146104c457600080fd5b806318160ddd116103a357806318160ddd1461043657806323b872dd14610448578063274a533c1461045b5780632d8381191461046457600080fd5b806306fdde03146103ca578063095ea7b3146103fe57806313f97a8e14610421575b600080fd5b60408051808201909152600681526509109054d15160d21b60208201525b6040516103f59190612f48565b60405180910390f35b61041161040c366004612fbb565b61090d565b60405190151581526020016103f5565b61043461042f366004613000565b610975565b005b6011545b6040519081526020016103f5565b610411610456366004613086565b610a16565b61043a60175481565b61043a6104723660046130c7565b610b10565b604051600981526020016103f5565b602754610499906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b6104346104bf3660046130e0565b610b94565b6104116104d2366004612fbb565b610bfa565b6104346104e53660046130fd565b610c7a565b6104346104f836600461311a565b610cc6565b61043461050b3660046130c7565b610d1e565b61043461051e3660046130fd565b610d88565b6104346105313660046130e0565b610dd6565b600b546104119060ff1681565b6104116105513660046130fd565b6001600160a01b031660009081526004602052604090205460ff1690565b61043461057d366004613153565b610e13565b602954610499906001600160a01b031681565b6104346105a3366004613175565b610e73565b6104116105b63660046130fd565b6001600160a01b031660009081526008602052604090205460ff1690565b6104116105e23660046130fd565b60066020526000908152604090205460ff1681565b61043a60155481565b61043a60165481565b610434610ec8565b61043a60145481565b600b5461041190610100900460ff1681565b61043a61063a3660046130fd565b61107a565b6104346110df565b601b54601c54601d54601e5461065d9392919084565b6040805194855260208501939093529183015260608201526080016103f5565b601854610499906001600160a01b031681565b602a54610499906001600160a01b031681565b601954610499906001600160a01b031681565b6104116106c43660046130fd565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546001600160a01b0316610499565b6104346107013660046131b9565b611115565b6104346107143660046130e0565b6111ab565b604080518082019091526004815263091094d160e21b60208201526103e8565b60235460245460255460265461065d9392919084565b61043461075d366004613290565b6111ef565b610411610770366004612fbb565b61127a565b601054610499906001600160a01b031681565b610411610796366004612fbb565b611360565b6104346107a93660046130fd565b6113b5565b6104346107bc366004613175565b611401565b601a54610499906001600160a01b031681565b6009546104119060ff1681565b6104346107ef3660046130c7565b611456565b61043a600e5481565b61043461080b3660046130c7565b61149c565b61043461081e366004613175565b6114e2565b61043a61083136600461311a565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61043a60135481565b6104346108733660046132c2565b611537565b6104346108863660046130fd565b611583565b600d546104119060ff1681565b6104346108a6366004613000565b6115ce565b6104346108b93660046130fd565b611669565b6104346108cc366004613290565b611701565b602854610499906001600160a01b031681565b601f5460205460215460225461065d9392919084565b600f54610499906001600160a01b031681565b600b54600090339060ff168061093b57506001600160a01b03811660009081526006602052604090205460ff165b6109605760405162461bcd60e51b8152600401610957906132e0565b60405180910390fd5b61096b33858561178d565b5060019392505050565b6000546001600160a01b0316331461099f5760405162461bcd60e51b815260040161095790613317565b60005b82811015610a105781600760008686858181106109c1576109c161334c565b90506020020160208101906109d691906130fd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610a0881613378565b9150506109a2565b50505050565b600b54600090849060ff1680610a4457506001600160a01b03811660009081526006602052604090205460ff165b610a605760405162461bcd60e51b8152600401610957906132e0565b610a6b8585856118b1565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610af05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610957565b610b048633610aff8785613391565b61178d565b50600195945050505050565b6000601254821115610b775760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610957565b6000610b8161220e565b9050610b8d81846133a4565b9392505050565b6000546001600160a01b03163314610bbe5760405162461bcd60e51b815260040161095790613317565b600b805461ffff191661ff0019831515908116919091176101008202179091556001148015610bed5750601754155b15610bf757436017555b50565b600b54600090339060ff1680610c2857506001600160a01b03811660009081526006602052604090205460ff165b610c445760405162461bcd60e51b8152600401610957906132e0565b3360008181526003602090815260408083206001600160a01b038916845290915290205461096b91908690610aff9087906133c6565b6000546001600160a01b03163314610ca45760405162461bcd60e51b815260040161095790613317565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260040161095790613317565b600f80546001600160a01b039384166001600160a01b03199182161790915560108054929093169116179055565b6000546001600160a01b03163314610d485760405162461bcd60e51b815260040161095790613317565b3360009081526001602052604081208054839290610d67908490613391565b925050819055508060116000828254610d809190613391565b909155505050565b6000546001600160a01b03163314610db25760405162461bcd60e51b815260040161095790613317565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610e005760405162461bcd60e51b815260040161095790613317565b6009805460ff1916911515919091179055565b6000546001600160a01b03163314610e3d5760405162461bcd60e51b815260040161095790613317565b610e496009600a6134bd565b610e5390836134cc565b601455610e626009600a6134bd565b610e6c90826134cc565b6015555050565b6000546001600160a01b03163314610e9d5760405162461bcd60e51b815260040161095790613317565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610ef25760405162461bcd60e51b815260040161095790613317565b6028546040516370a0823160e01b8152306004820152600091829182916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6391906134e3565b602854602a5460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde91906134fc565b50602a546028546029546001600160a01b03928316926302751cec9281169185918891889116611010426102586133c6565b6040518763ffffffff1660e01b815260040161103196959493929190613519565b60408051808303816000875af115801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190613554565b5050505050565b6001600160a01b03811660009081526005602052604081205460ff16156110b757506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546110d990610b10565b92915050565b6000546001600160a01b031633146111095760405162461bcd60e51b815260040161095790613317565b6111136000612231565b565b6000546001600160a01b0316331461113f5760405162461bcd60e51b815260040161095790613317565b60005b82518110156111a65781600460008584815181106111625761116261334c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061119e81613378565b915050611142565b505050565b6000546001600160a01b031633146111d55760405162461bcd60e51b815260040161095790613317565b600b80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146112195760405162461bcd60e51b815260040161095790613317565b6040805160808101825285815260208101859052808201849052606001829052601b859055601c849055601d839055601e829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600b54600090339060ff16806112a857506001600160a01b03811660009081526006602052604090205460ff165b6112c45760405162461bcd60e51b8152600401610957906132e0565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156113465760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610957565b6113553386610aff8785613391565b506001949350505050565b600b54600090339060ff168061138e57506001600160a01b03811660009081526006602052604090205460ff165b6113aa5760405162461bcd60e51b8152600401610957906132e0565b61096b3385856118b1565b6000546001600160a01b031633146113df5760405162461bcd60e51b815260040161095790613317565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461142b5760405162461bcd60e51b815260040161095790613317565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114805760405162461bcd60e51b815260040161095790613317565b61148c6009600a6134bd565b61149690826134cc565b60135550565b6000546001600160a01b031633146114c65760405162461bcd60e51b815260040161095790613317565b6114d26009600a6134bd565b6114dc90826134cc565b60165550565b6000546001600160a01b0316331461150c5760405162461bcd60e51b815260040161095790613317565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115615760405162461bcd60e51b815260040161095790613317565b61156c8160016134cc565b600e5550600d805460ff1916911515919091179055565b6000546001600160a01b031633146115ad5760405162461bcd60e51b815260040161095790613317565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146115f85760405162461bcd60e51b815260040161095790613317565b60005b82811015610a1057816008600086868581811061161a5761161a61334c565b905060200201602081019061162f91906130fd565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061166181613378565b9150506115fb565b6000546001600160a01b031633146116935760405162461bcd60e51b815260040161095790613317565b6001600160a01b0381166116f85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610957565b610bf781612231565b6000546001600160a01b0316331461172b5760405162461bcd60e51b815260040161095790613317565b6040805160808101825285815260208082018690528183018590526060909101839052601f86905584905560218390556022829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b6001600160a01b0383166117ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610957565b6001600160a01b0382166118505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610957565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119155760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610957565b6001600160a01b0382166119775760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610957565b600081116119d95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610957565b6119e28361107a565b811115611a4b5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610957565b6001600160a01b03831660009081526007602052604090205460ff16158015611a8d57506001600160a01b03821660009081526007602052604090205460ff16155b611ac95760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610957565b60095460ff1615611b98576001600160a01b03831660009081526008602052604090205460ff16611b365760405162461bcd60e51b8152602060048201526017602482015276165bdd48185c99481b9bdd081dda1a5d195b1a5cdd1959604a1b6044820152606401610957565b6001600160a01b03821660009081526008602052604090205460ff16611b985760405162461bcd60e51b8152602060048201526017602482015276165bdd48185c99481b9bdd081dda1a5d195b1a5cdd1959604a1b6044820152606401610957565b6001600160a01b03831660009081526004602052604090205460ff16158015611bda57506001600160a01b03821660009081526004602052604090205460ff16155b15611c2657600b5460ff16611c265760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610957565b6001600160a01b03831660009081526004602052604090205460ff16158015611c6857506001600160a01b03821660009081526004602052604090205460ff16155b8015611c815750601754611c7d9060036133c6565b4311155b15611cf0576010546001600160a01b0390811690831603611cf05760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203320626c6044820152636f636b7360e01b6064820152608401610957565b6010546001600160a01b038481169116148015611d2657506001600160a01b03821660009081526004602052604090205460ff16155b8015611d3b5750600b5462010000900460ff16155b15611df757601454811115611d925760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610957565b60165481611d9f8461107a565b611da991906133c6565b1115611df75760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610957565b6010546001600160a01b03848116911614801590611e2e57506001600160a01b03821660009081526004602052604090205460ff16155b8015611e5357506001600160a01b03831660009081526004602052604090205460ff16155b8015611e685750600b5462010000900460ff16155b15611fcb57601554811115611ebf5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610957565b6010546001600160a01b03838116911614611f395760165481611ee18461107a565b611eeb91906133c6565b1115611f395760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610957565b600d5460ff1615611fcb576001600160a01b0383166000908152600c6020526040812054611f679042613391565b9050600e54811015611fae5760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610957565b506001600160a01b0383166000908152600c602052604090204290555b611fd76009600a6134bd565b611fe290600a6134cc565b81611fec8561107a565b611ff69190613391565b1161201b576120048361107a565b61200e9082613391565b6120189082613391565b90505b60006013546120293061107a565b600b54911115915062010000900460ff1615801561204e5750600b54610100900460ff165b80156120575750805b801561207157506010546001600160a01b03858116911614155b801561209657506001600160a01b03841660009081526004602052604090205460ff16155b80156120bb57506001600160a01b03831660009081526004602052604090205460ff16155b15612147576010546001600160a01b03908116908416036121115760135460408051608081018252601f548152602080549082015260215491810191909152602254606082015261210c9190612281565b612147565b60135460408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201526121479190612281565b600b5460019060009062010000900460ff168061217c57506001600160a01b03861660009081526004602052604090205460ff165b8061219f57506001600160a01b03851660009081526004602052604090205460ff165b156121a957600091505b6010546001600160a01b03908116908616036121c3575060015b6010546001600160a01b038681169116148015906121ef57506010546001600160a01b03878116911614155b156121f957600091505b61220686868685856123db565b505050505050565b600080600061221b612671565b909250905061222a81836133a4565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600b805462ff0000191662010000179055606081015160208201516040830151600092916122ae916133c6565b6122b891906133c6565b6122c39060026134cc565b90506000818360400151856122d891906134cc565b6122e291906133a4565b905060006122f08286613391565b9050476122fc826127f4565b60006123088247613391565b9050600086604001518661231c9190613391565b61232690836133a4565b9050600087604001518261233a91906134cc565b9050801561234c5761234c8682612946565b602088015160009061235f8460026134cc565b61236991906134cc565b9050801561238757601854612387906001600160a01b0316826129ec565b606089015160009061239a8560026134cc565b6123a491906134cc565b905080156123c2576019546123c2906001600160a01b0316826129ec565b5050600b805462ff000019169055505050505050505050565b60006123e8848484612b05565b6001600160a01b03871660009081526005602052604090205490915060ff161561244a576001600160a01b038616600090815260026020526040902054612430908590613391565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156124ad5760a08101516001600160a01b03861660009081526002602052604090205461249391906133c6565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b0387166000908152600160205260409020546124d29190613391565b6001600160a01b038088166000908152600160209081526040808320949094558401519188168152919091205461250991906133c6565b6001600160a01b0386166000908152600160205260409020556060810151151580612538575060008160e00151115b156125ba5761254f81606001518260e00151612b5c565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361010001518460c001518560e0015161259e91906133c6565b6125a891906133c6565b60405190815260200160405180910390a35b6000816040015111806125d1575060008160c00151115b156125e8576125e881604001518260c00151612bf1565b60008160800151118061260057506000816101000151115b15612618576126188160800151826101000151612c7d565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161266191815260200190565b60405180910390a3505050505050565b6012546011546000918291825b600a548110156127c3578260016000600a84815481106126a0576126a061334c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061270b57508160026000600a84815481106126e4576126e461334c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561272157601254601154945094505050509091565b60016000600a83815481106127385761273861334c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546127679084613391565b925060026000600a83815481106127805761278061334c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546127af9083613391565b9150806127bb81613378565b91505061267e565b506011546012546127d491906133a4565b8210156127eb576012546011549350935050509091565b90939092509050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128295761282961334c565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a69190613578565b816001815181106128b9576128b961334c565b6001600160a01b039283166020918202929092010152600f546128df913091168461178d565b600f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612918908590600090869030904290600401613595565b600060405180830381600087803b15801561293257600080fd5b505af1158015612206573d6000803e3d6000fd5b600f5461295e9030906001600160a01b03168461178d565b600f546001600160a01b031663f305d7198230856000806129876000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016129a996959493929190613519565b60606040518083038185885af11580156129c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110739190613606565b80471015612a3c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610957565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612a89576040519150601f19603f3d011682016040523d82523d6000602084013e612a8e565b606091505b50509050806111a65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610957565b612b0d612efc565b612b18848484612d09565b9050612b2d818585612b2861220e565b612e48565b6060850152604084015260208301528152612b508184612b4b61220e565b612ed4565b60808201529392505050565b8060236002016000828254612b7191906133c6565b90915550503060009081526005602052604090205460ff1615612bbe576010546001600160a01b031660009081526002602052604081208054839290612bb89084906133c6565b90915550505b6010546001600160a01b031660009081526001602052604081208054849290612be89084906133c6565b90915550505050565b8060236001016000828254612c0691906133c6565b90915550503060009081526005602052604090205460ff1615612c53576018546001600160a01b031660009081526002602052604081208054839290612c4d9084906133c6565b90915550505b6018546001600160a01b031660009081526001602052604081208054849290612be89084906133c6565b8060236003016000828254612c9291906133c6565b90915550503060009081526005602052604090205460ff1615612cdf576019546001600160a01b031660009081526002602052604081208054839290612cd99084906133c6565b90915550505b6019546001600160a01b031660009081526001602052604081208054849290612be89084906133c6565b612d11612efc565b82612d225760a08101849052610b8d565b612d4d6040518060800160405280600081526020016000815260200160008152602001600081525090565b8215612d82575060408051608081018252601f5481526020805490820152602154918101919091526022546060820152612dad565b5060408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201525b6064816020015186612dbf91906134cc565b612dc991906133a4565b60c08301526040810151606490612de090876134cc565b612dea91906133a4565b60e08301526060810151606490612e0190876134cc565b612e0b91906133a4565b610100830181905260e083015160c0840151612e279088613391565b612e319190613391565b612e3b9190613391565b60a0830152509392505050565b6000808080612e5785886134cc565b935085612e6c57508291506000905080612ec9565b848860c00151612e7c91906134cc565b9150848860e00151612e8e91906134cc565b9050600085896101000151612ea391906134cc565b90508082612eb18588613391565b612ebb9190613391565b612ec59190613391565b9350505b945094509450949050565b600082612ee357506000610b8d565b81846101000151612ef491906134cc565b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b81811015612f7557858101830151858201604001528201612f59565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bf757600080fd5b8035612fb681612f96565b919050565b60008060408385031215612fce57600080fd5b8235612fd981612f96565b946020939093013593505050565b8015158114610bf757600080fd5b8035612fb681612fe7565b60008060006040848603121561301557600080fd5b833567ffffffffffffffff8082111561302d57600080fd5b818601915086601f83011261304157600080fd5b81358181111561305057600080fd5b8760208260051b850101111561306557600080fd5b6020928301955093505084013561307b81612fe7565b809150509250925092565b60008060006060848603121561309b57600080fd5b83356130a681612f96565b925060208401356130b681612f96565b929592945050506040919091013590565b6000602082840312156130d957600080fd5b5035919050565b6000602082840312156130f257600080fd5b8135610b8d81612fe7565b60006020828403121561310f57600080fd5b8135610b8d81612f96565b6000806040838503121561312d57600080fd5b823561313881612f96565b9150602083013561314881612f96565b809150509250929050565b6000806040838503121561316657600080fd5b50508035926020909101359150565b6000806040838503121561318857600080fd5b823561319381612f96565b9150602083013561314881612fe7565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156131cc57600080fd5b823567ffffffffffffffff808211156131e457600080fd5b818501915085601f8301126131f857600080fd5b813560208282111561320c5761320c6131a3565b8160051b604051601f19603f83011681018181108682111715613231576132316131a3565b60405292835281830193508481018201928984111561324f57600080fd5b948201945b838610156132745761326586612fab565b85529482019493820193613254565b96506132839050878201612ff5565b9450505050509250929050565b600080600080608085870312156132a657600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156132d557600080fd5b8235612fd981612fe7565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161338a5761338a613362565b5060010190565b818103818111156110d9576110d9613362565b6000826133c157634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156110d9576110d9613362565b600181815b808511156134145781600019048211156133fa576133fa613362565b8085161561340757918102915b93841c93908002906133de565b509250929050565b60008261342b575060016110d9565b81613438575060006110d9565b816001811461344e576002811461345857613474565b60019150506110d9565b60ff84111561346957613469613362565b50506001821b6110d9565b5060208310610133831016604e8410600b8410161715613497575081810a6110d9565b6134a183836133d9565b80600019048211156134b5576134b5613362565b029392505050565b6000610b8d60ff84168361341c565b80820281158282048414176110d9576110d9613362565b6000602082840312156134f557600080fd5b5051919050565b60006020828403121561350e57600080fd5b8151610b8d81612fe7565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806040838503121561356757600080fd5b505080516020909101519092909150565b60006020828403121561358a57600080fd5b8151610b8d81612f96565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135e55784516001600160a01b0316835293830193918301916001016135c0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561361b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ceb87aeb8d4f9441191429ed51f09633c3484dc1941c7e281846d6191a0f9f9164736f6c63430008120033

Deployed Bytecode Sourcemap

3542:21099:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8529:83;8599:5;;;;;;;;;;;;-1:-1:-1;;;8599:5:0;;;;8529:83;;;;;;;:::i;:::-;;;;;;;;9289:181;;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;9289:181:0;1162:187:1;23578:211:0;;;;;;:::i;:::-;;:::i;:::-;;8825:95;8905:7;;8825:95;;;2511:25:1;;;2499:2;2484:18;8825:95:0;2365:177:1;9478:430:0;;;;;;:::i;:::-;;:::i;5090:28::-;;;;;;11201:248;;;;;;:::i;:::-;;:::i;8711:83::-;;;4675:1;3335:36:1;;3323:2;3308:18;8711:83:0;3193:184:1;6271:73:0;;;;;-1:-1:-1;;;;;6271:73:0;;;;;;-1:-1:-1;;;;;3546:32:1;;;3528:51;;3516:2;3501:18;6271:73:0;3382:203:1;10881:206:0;;;;;;:::i;:::-;;:::i;9916:228::-;;;;;;:::i;:::-;;:::i;22654:110::-;;;;;;:::i;:::-;;:::i;24484:154::-;;;;;;:::i;:::-;;:::i;8379:126::-;;;;;;:::i;:::-;;:::i;11457:111::-;;;;;;:::i;:::-;;:::i;11093:100::-;;;;;;:::i;:::-;;:::i;4162:26::-;;;;;;;;;11694:123;;;;;;:::i;:::-;-1:-1:-1;;;;;11782:27:0;11758:4;11782:27;;;:18;:27;;;;;;;;;11694:123;24158:183;;;;;;:::i;:::-;;:::i;6387:76::-;;;;;-1:-1:-1;;;;;6387:76:0;;;23189:126;;;;;;:::i;:::-;;:::i;23452:120::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23542:22:0;23519:4;23542:22;;;:13;:22;;;;;;;;;23452:120;3926:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4968:50;;;;;;5025:52;;;;;;7852:521;;;:::i;4913:48::-;;;;;;4195:23;;;;;;;;;;;;8928:198;;;;;;:::i;:::-;;:::i;1971:94::-;;;:::i;5603:38::-;;;;;;;;;;;;;;;;;;;;5352:25:1;;;5408:2;5393:18;;5386:34;;;;5436:18;;;5429:34;5494:2;5479:18;;5472:34;5339:3;5324:19;5603:38:0;5121:391:1;5131:75:0;;;;;-1:-1:-1;;;;;5131:75:0;;;6470:31;;;;;-1:-1:-1;;;;;6470:31:0;;;5213:73;;;;;-1:-1:-1;;;;;5213:73:0;;;10749:120;;;;;;:::i;:::-;-1:-1:-1;;;;;10841:20:0;10817:4;10841:20;;;:11;:20;;;;;;;;;10749:120;1748:87;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;1748:87;;22311:209;;;;;;:::i;:::-;;:::i;23076:101::-;;;;;;:::i;:::-;;:::i;8618:87::-;8690:7;;;;;;;;;;;;-1:-1:-1;;;8690:7:0;;;;8618:87;;5848:36;;;;;;;;;;;;;;;;11827:204;;;;;;:::i;:::-;;:::i;10152:390::-;;;;;;:::i;:::-;;:::i;4612:19::-;;;;;-1:-1:-1;;;;;4612:19:0;;;10554:187;;;;;;:::i;:::-;;:::i;22528:114::-;;;;;;:::i;:::-;;:::i;24017:129::-;;;;;;:::i;:::-;;:::i;5293:73::-;;;;;-1:-1:-1;;;;;5293:73:0;;;4090:27;;;;;;;;;22938:130;;;;;;:::i;:::-;;:::i;4382:39::-;;;;;;24353:123;;;;;;:::i;:::-;;:::i;23321:125::-;;;;;;:::i;:::-;;:::i;9138:143::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9246:18:0;;;9219:7;9246:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9138:143;4855:51;;;;;;22778:152;;;;;;:::i;:::-;;:::i;11576:110::-;;;;;;:::i;:::-;;:::i;4340:35::-;;;;;;;;;23795:210;;;;;;:::i;:::-;;:::i;2073:192::-;;;;;;:::i;:::-;;:::i;12043:212::-;;;;;;:::i;:::-;;:::i;6351:29::-;;;;;-1:-1:-1;;;;;6351:29:0;;;5648:42;;;;;;;;;;;;;;;;4584:21;;;;;-1:-1:-1;;;;;4584:21:0;;;9289:181;4486:14;;9384:4;;9364:10;;4486:14;;;:42;;-1:-1:-1;;;;;;4504:24:0;;;;;;:15;:24;;;;;;;;4486:42;4478:78;;;;-1:-1:-1;;;4478:78:0;;;;;;;:::i;:::-;;;;;;;;;9401:39:::1;971:10:::0;9424:7:::1;9433:6;9401:8;:39::i;:::-;-1:-1:-1::0;9458:4:0::1;::::0;9289:181;-1:-1:-1;;;9289:181:0:o;23578:211::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;23679:9:::1;23675:107;23693:19:::0;;::::1;23675:107;;;23763:5;23733:14;:27;23748:8;;23757:1;23748:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23733:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23733:27:0;:35;;-1:-1:-1;;23733:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23714:3;::::1;::::0;::::1;:::i;:::-;;;;23675:107;;;;23578:211:::0;;;:::o;9478:430::-;4486:14;;9592:4;;9575:6;;4486:14;;;:42;;-1:-1:-1;;;;;;4504:24:0;;;;;;:15;:24;;;;;;;;4486:42;4478:78;;;;-1:-1:-1;;;4478:78:0;;;;;;;:::i;:::-;9609:36:::1;9619:6;9627:9;9638:6;9609:9;:36::i;:::-;-1:-1:-1::0;;;;;9685:19:0;::::1;9658:24;9685:19:::0;;;:11:::1;:19;::::0;;;;;;;971:10;9685:33;;;;;;;;9737:26;;::::1;;9729:79;;;::::0;-1:-1:-1;;;9729:79:0;;9323:2:1;9729:79:0::1;::::0;::::1;9305:21:1::0;9362:2;9342:18;;;9335:30;9401:34;9381:18;;;9374:62;-1:-1:-1;;;9452:18:1;;;9445:38;9500:19;;9729:79:0::1;9121:404:1::0;9729:79:0::1;9819:57;9828:6:::0;971:10;9850:25:::1;9869:6:::0;9850:16;:25:::1;:::i;:::-;9819:8;:57::i;:::-;-1:-1:-1::0;9896:4:0::1;::::0;9478:430;-1:-1:-1;;;;;9478:430:0:o;11201:248::-;11267:7;11306;;11295;:18;;11287:73;;;;-1:-1:-1;;;11287:73:0;;9865:2:1;11287:73:0;;;9847:21:1;9904:2;9884:18;;;9877:30;9943:34;9923:18;;;9916:62;-1:-1:-1;;;9994:18:1;;;9987:40;10044:19;;11287:73:0;9663:406:1;11287:73:0;11371:19;11394:10;:8;:10::i;:::-;11371:33;-1:-1:-1;11422:19:0;11371:33;11422:7;:19;:::i;:::-;11415:26;11201:248;-1:-1:-1;;;11201:248:0:o;10881:206::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;10948:14:::1;:22:::0;;-1:-1:-1;;10981:19:0;-1:-1:-1;;10948:22:0;::::1;;10981:19:::0;;;;;;;10948:22:::1;10981:19:::0;::::1;;::::0;;;-1:-1:-1;11014:13:0::1;:35:::0;::::1;;;-1:-1:-1::0;11031:13:0::1;::::0;:18;11014:35:::1;11011:68;;;11067:12;11051:13;:28:::0;11011:68:::1;10881:206:::0;:::o;9916:228::-;4486:14;;10017:4;;9996:10;;4486:14;;;:42;;-1:-1:-1;;;;;;4504:24:0;;;;;;:15;:24;;;;;;;;4486:42;4478:78;;;;-1:-1:-1;;;4478:78:0;;;;;;;:::i;:::-;971:10;10066:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;10066:34:0;::::1;::::0;;;;;;;;10034:80:::1;::::0;971:10;10057:7;;10066:47:::1;::::0;10103:10;;10066:47:::1;:::i;22654:110::-:0;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;22731:13:::1;:25:::0;;-1:-1:-1;;;;;;22731:25:0::1;-1:-1:-1::0;;;;;22731:25:0;;;::::1;::::0;;;::::1;::::0;;22654:110::o;24484:154::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;24578:6:::1;:27:::0;;-1:-1:-1;;;;;24578:27:0;;::::1;-1:-1:-1::0;;;;;;24578:27:0;;::::1;;::::0;;;24616:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;24484:154::o;8379:126::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;8446:10:::1;8438:19;::::0;;;:7:::1;:19;::::0;;;;:30;;8462:6;;8438:19;:30:::1;::::0;8462:6;;8438:30:::1;:::i;:::-;;;;;;;;8491:6;8480:7;;:17;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;8379:126:0:o;11457:111::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11526:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;11526:34:0::1;11556:4;11526:34;::::0;;11457:111::o;11093:100::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;11162:15:::1;:23:::0;;-1:-1:-1;;11162:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11093:100::o;24158:183::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;24269:14:::1;4675:1:::0;24269:2:::1;:14;:::i;:::-;24260:23;::::0;:6;:23:::1;:::i;:::-;24246:11;:37:::0;24319:14:::1;4675:1:::0;24319:2:::1;:14;:::i;:::-;24309:24;::::0;:7;:24:::1;:::i;:::-;24294:12;:39:::0;-1:-1:-1;;24158:183:0:o;23189:126::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23276:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;23276:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23189:126::o;7852:521::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;7998:14:::1;::::0;7991:47:::1;::::0;-1:-1:-1;;;7991:47:0;;8032:4:::1;7991:47;::::0;::::1;3528:51:1::0;7905:22:0::1;::::0;;;;;-1:-1:-1;;;;;7998:14:0::1;::::0;7991:32:::1;::::0;3501:18:1;;7991:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8054:14;::::0;8086:7:::1;::::0;8047:61:::1;::::0;-1:-1:-1;;;8047:61:0;;-1:-1:-1;;;;;8086:7:0;;::::1;8047:61;::::0;::::1;12345:51:1::0;12412:18;;;12405:34;;;7969:69:0;;-1:-1:-1;8054:14:0::1;::::0;8047:30:::1;::::0;12318:18:1;;8047:61:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8159:7:0::1;::::0;8196:14:::1;::::0;8291:16:::1;::::0;-1:-1:-1;;;;;8159:7:0;;::::1;::::0;:26:::1;::::0;8196:14;::::1;::::0;8221:11;;8243:14;;8268:12;;8291:16:::1;8318:21;:15;8336:3;8318:21;:::i;:::-;8159:210;;;;;;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7898:475;;;7852:521::o:0;8928:198::-;-1:-1:-1;;;;;9018:20:0;;8994:7;9018:20;;;:11;:20;;;;;;;;9014:49;;;-1:-1:-1;;;;;;9047:16:0;;;;;:7;:16;;;;;;;8928:198::o;9014:49::-;-1:-1:-1;;;;;9101:16:0;;;;;;:7;:16;;;;;;9081:37;;:19;:37::i;:::-;9074:44;8928:198;-1:-1:-1;;8928:198:0:o;1971:94::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;2036:21:::1;2054:1;2036:9;:21::i;:::-;1971:94::o:0;22311:209::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;22407:9:::1;22403:110;22426:8;:15;22422:1;:19;22403:110;;;22496:5;22462:18;:31;22481:8;22490:1;22481:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;22462:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;22462:31:0;:39;;-1:-1:-1;;22462:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22443:3;::::1;::::0;::::1;:::i;:::-;;;;22403:110;;;;22311:209:::0;;:::o;23076:101::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;23147:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;23147:22:0;;::::1;::::0;;;::::1;::::0;;23076:101::o;11827:204::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;11952:42:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;11944:5:::1;:50:::0;;;;;;;;;;;;;;;12010:13;::::1;::::0;-1:-1:-1;;12010:13:0::1;11827:204:::0;;;;:::o;10152:390::-;4486:14;;10258:4;;10237:10;;4486:14;;;:42;;-1:-1:-1;;;;;;4504:24:0;;;;;;:15;:24;;;;;;;;4486:42;4478:78;;;;-1:-1:-1;;;4478:78:0;;;;;;;:::i;:::-;971:10;10275:24:::1;10302:25:::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;10302:34:0;::::1;::::0;;;;;;;;10355:35;;::::1;;10347:85;;;::::0;-1:-1:-1;;;10347:85:0;;13748:2:1;10347:85:0::1;::::0;::::1;13730:21:1::0;13787:2;13767:18;;;13760:30;13826:34;13806:18;;;13799:62;-1:-1:-1;;;13877:18:1;;;13870:35;13922:19;;10347:85:0::1;13546:401:1::0;10347:85:0::1;10443:67;971:10:::0;10466:7;10475:34:::1;10494:15:::0;10475:16;:34:::1;:::i;10443:67::-;-1:-1:-1::0;10530:4:0::1;::::0;10152:390;-1:-1:-1;;;;10152:390:0:o;10554:187::-;4486:14;;10652:4;;10631:10;;4486:14;;;:42;;-1:-1:-1;;;;;;4504:24:0;;;;;;:15;:24;;;;;;;;4486:42;4478:78;;;;-1:-1:-1;;;4478:78:0;;;;;;;:::i;:::-;10673:40:::1;10683:10;10695:9;10706:6;10673:9;:40::i;22528:114::-:0;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;22607:15:::1;:27:::0;;-1:-1:-1;;;;;;22607:27:0::1;-1:-1:-1::0;;;;;22607:27:0;;;::::1;::::0;;;::::1;::::0;;22528:114::o;24017:129::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24106:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;24106:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24017:129::o;22938:130::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;23047:13:::1;4675:1;23047:2;:13;:::i;:::-;23038:22;::::0;:6;:22:::1;:::i;:::-;23017:18;:43:::0;-1:-1:-1;22938:130:0:o;24353:123::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;24454:14:::1;4675:1:::0;24454:2:::1;:14;:::i;:::-;24445:23;::::0;:6;:23:::1;:::i;:::-;24428:14;:40:::0;-1:-1:-1;24353:123:0:o;23321:125::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23408:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;23408:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23321:125::o;22778:152::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;22872:16:::1;:4:::0;22879:9:::1;22872:16;:::i;:::-;22857:12;:31:::0;-1:-1:-1;22899:15:0::1;:23:::0;;-1:-1:-1;;22899:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22778:152::o;11576:110::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11643:27:0::1;11673:5;11643:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;11643:35:0::1;::::0;;11576:110::o;23795:210::-;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;23896:9:::1;23892:106;23910:19:::0;;::::1;23892:106;;;23979:5;23950:13;:26;23964:8;;23973:1;23964:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23950:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23950:26:0;:34;;-1:-1:-1;;23950:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23931:3;::::1;::::0;::::1;:::i;:::-;;;;23892:106;;2073:192:::0;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;14154:2:1;2154:73:0::1;::::0;::::1;14136:21:1::0;14193:2;14173:18;;;14166:30;14232:34;14212:18;;;14205:62;-1:-1:-1;;;14283:18:1;;;14276:36;14329:19;;2154:73:0::1;13952:402:1::0;2154:73:0::1;2238:19;2248:8;2238:9;:19::i;12043:212::-:0;1794:7;1821:6;-1:-1:-1;;;;;1821:6:0;971:10;1883:23;1875:68;;;;-1:-1:-1;;;1875:68:0;;;;;;;:::i;:::-;12176:42:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;12164:9:::1;:54:::0;;;;;;;;;;;;;;12234:13;::::1;::::0;-1:-1:-1;;12234:13:0::1;12043:212:::0;;;;:::o;15908:335::-;-1:-1:-1;;;;;16001:19:0;;15993:68;;;;-1:-1:-1;;;15993:68:0;;14561:2:1;15993:68:0;;;14543:21:1;14600:2;14580:18;;;14573:30;14639:34;14619:18;;;14612:62;-1:-1:-1;;;14690:18:1;;;14683:34;14734:19;;15993:68:0;14359:400:1;15993:68:0;-1:-1:-1;;;;;16080:21:0;;16072:68;;;;-1:-1:-1;;;16072:68:0;;14966:2:1;16072:68:0;;;14948:21:1;15005:2;14985:18;;;14978:30;15044:34;15024:18;;;15017:62;-1:-1:-1;;;15095:18:1;;;15088:32;15137:19;;16072:68:0;14764:398:1;16072:68:0;-1:-1:-1;;;;;16151:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16203:32;;2511:25:1;;;16203:32:0;;2484:18:1;16203:32:0;;;;;;;15908:335;;;:::o;16251:2655::-;-1:-1:-1;;;;;16343:18:0;;16335:68;;;;-1:-1:-1;;;16335:68:0;;15369:2:1;16335:68:0;;;15351:21:1;15408:2;15388:18;;;15381:30;15447:34;15427:18;;;15420:62;-1:-1:-1;;;15498:18:1;;;15491:35;15543:19;;16335:68:0;15167:401:1;16335:68:0;-1:-1:-1;;;;;16422:16:0;;16414:64;;;;-1:-1:-1;;;16414:64:0;;15775:2:1;16414:64:0;;;15757:21:1;15814:2;15794:18;;;15787:30;15853:34;15833:18;;;15826:62;-1:-1:-1;;;15904:18:1;;;15897:33;15947:19;;16414:64:0;15573:399:1;16414:64:0;16506:1;16497:6;:10;16489:64;;;;-1:-1:-1;;;16489:64:0;;16179:2:1;16489:64:0;;;16161:21:1;16218:2;16198:18;;;16191:30;16257:34;16237:18;;;16230:62;-1:-1:-1;;;16308:18:1;;;16301:39;16357:19;;16489:64:0;15977:405:1;16489:64:0;16582:15;16592:4;16582:9;:15::i;:::-;16572:6;:25;;16564:86;;;;-1:-1:-1;;;16564:86:0;;16589:2:1;16564:86:0;;;16571:21:1;16628:2;16608:18;;;16601:30;16667:34;16647:18;;;16640:62;-1:-1:-1;;;16718:18:1;;;16711:47;16775:19;;16564:86:0;16387:413:1;16564:86:0;-1:-1:-1;;;;;16670:20:0;;;;;;:14;:20;;;;;;;;16669:21;:44;;;;-1:-1:-1;;;;;;16695:18:0;;;;;;:14;:18;;;;;;;;16694:19;16669:44;16661:70;;;;-1:-1:-1;;;16661:70:0;;17007:2:1;16661:70:0;;;16989:21:1;17046:2;17026:18;;;17019:30;-1:-1:-1;;;17065:18:1;;;17058:43;17118:18;;16661:70:0;16805:337:1;16661:70:0;16746:15;;;;16743:168;;;-1:-1:-1;;;;;16785:19:0;;;;;;:13;:19;;;;;;;;16777:55;;;;-1:-1:-1;;;16777:55:0;;17349:2:1;16777:55:0;;;17331:21:1;17388:2;17368:18;;;17361:30;-1:-1:-1;;;17407:18:1;;;17400:53;17470:18;;16777:55:0;17147:347:1;16777:55:0;-1:-1:-1;;;;;16855:17:0;;;;;;:13;:17;;;;;;;;16847:52;;;;-1:-1:-1;;;16847:52:0;;17349:2:1;16847:52:0;;;17331:21:1;17388:2;17368:18;;;17361:30;-1:-1:-1;;;17407:18:1;;;17400:53;17470:18;;16847:52:0;17147:347:1;16847:52:0;-1:-1:-1;;;;;16925:24:0;;;;;;:18;:24;;;;;;;;16924:25;:52;;;;-1:-1:-1;;;;;;16954:22:0;;;;;;:18;:22;;;;;;;;16953:23;16924:52;16921:128;;;17000:14;;;;16992:45;;;;-1:-1:-1;;;16992:45:0;;17701:2:1;16992:45:0;;;17683:21:1;17740:2;17720:18;;;17713:30;-1:-1:-1;;;17759:18:1;;;17752:48;17817:18;;16992:45:0;17499:342:1;16992:45:0;-1:-1:-1;;;;;17073:24:0;;;;;;:18;:24;;;;;;;;17072:25;:52;;;;-1:-1:-1;;;;;;17102:22:0;;;;;;:18;:22;;;;;;;;17101:23;17072:52;:89;;;;-1:-1:-1;17144:13:0;;:17;;17160:1;17144:17;:::i;:::-;17128:12;:33;;17072:89;17069:180;;;17192:4;;-1:-1:-1;;;;;17192:4:0;;;17186:10;;;;17178:59;;;;-1:-1:-1;;;17178:59:0;;18048:2:1;17178:59:0;;;18030:21:1;18087:2;18067:18;;;18060:30;18126:34;18106:18;;;18099:62;-1:-1:-1;;;18177:18:1;;;18170:34;18221:19;;17178:59:0;17846:400:1;17178:59:0;17280:4;;-1:-1:-1;;;;;17272:12:0;;;17280:4;;17272:12;:39;;;;-1:-1:-1;;;;;;17289:22:0;;;;;;:18;:22;;;;;;;;17288:23;17272:39;:52;;;;-1:-1:-1;17316:8:0;;;;;;;17315:9;17272:52;17269:246;;;17358:11;;17348:6;:21;;17340:63;;;;-1:-1:-1;;;17340:63:0;;18453:2:1;17340:63:0;;;18435:21:1;18492:2;18472:18;;;18465:30;18531:31;18511:18;;;18504:59;18580:18;;17340:63:0;18251:353:1;17340:63:0;17452:14;;17442:6;17426:13;17436:2;17426:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;17418:85;;;;-1:-1:-1;;;17418:85:0;;18811:2:1;17418:85:0;;;18793:21:1;;;18830:18;;;18823:30;18889:34;18869:18;;;18862:62;18941:18;;17418:85:0;18609:356:1;17418:85:0;17546:4;;-1:-1:-1;;;;;17538:12:0;;;17546:4;;17538:12;;;;:39;;-1:-1:-1;;;;;;17555:22:0;;;;;;:18;:22;;;;;;;;17554:23;17538:39;:68;;;;-1:-1:-1;;;;;;17582:24:0;;;;;;:18;:24;;;;;;;;17581:25;17538:68;:81;;;;-1:-1:-1;17611:8:0;;;;;;;17610:9;17538:81;17535:573;;;17653:12;;17643:6;:22;;17635:65;;;;-1:-1:-1;;;17635:65:0;;19172:2:1;17635:65:0;;;19154:21:1;19211:2;19191:18;;;19184:30;19250:32;19230:18;;;19223:60;19300:18;;17635:65:0;18970:354:1;17635:65:0;17724:4;;-1:-1:-1;;;;;17718:10:0;;;17724:4;;17718:10;17715:134;;17782:14;;17772:6;17756:13;17766:2;17756:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;17748:85;;;;-1:-1:-1;;;17748:85:0;;18811:2:1;17748:85:0;;;18793:21:1;;;18830:18;;;18823:30;18889:34;18869:18;;;18862:62;18941:18;;17748:85:0;18609:356:1;17748:85:0;17866:15;;;;17863:234;;;-1:-1:-1;;;;;17940:15:0;;17901:18;17940:15;;;:9;:15;;;;;;17922:33;;:15;:33;:::i;:::-;17901:54;;17996:12;;17982:10;:26;;17974:55;;;;-1:-1:-1;;;17974:55:0;;19531:2:1;17974:55:0;;;19513:21:1;19570:2;19550:18;;;19543:30;-1:-1:-1;;;19589:18:1;;;19582:46;19645:18;;17974:55:0;19329:340:1;17974:55:0;-1:-1:-1;;;;;;18048:15:0;;;;;;:9;:15;;;;;18066;18048:33;;17863:234;18175:14;4675:1;18175:2;:14;:::i;:::-;18169:20;;:2;:20;:::i;:::-;18159:6;18141:15;18151:4;18141:9;:15::i;:::-;:24;;;;:::i;:::-;:48;18138:90;;18212:15;18222:4;18212:9;:15::i;:::-;18203:24;;:6;:24;:::i;:::-;18191:37;;;;:::i;:::-;;;18138:90;18258:12;18301:18;;18273:24;18291:4;18273:9;:24::i;:::-;18334:8;;-1:-1:-1;;18273:46:0;;-1:-1:-1;18334:8:0;;;;;18333:9;:24;;;;-1:-1:-1;18346:11:0;;;;;;;18333:24;:35;;;;;18361:7;18333:35;:51;;;;-1:-1:-1;18380:4:0;;-1:-1:-1;;;;;18372:12:0;;;18380:4;;18372:12;;18333:51;:80;;;;-1:-1:-1;;;;;;18389:24:0;;;;;;:18;:24;;;;;;;;18388:25;18333:80;:107;;;;-1:-1:-1;;;;;;18418:22:0;;;;;;:18;:22;;;;;;;;18417:23;18333:107;18330:261;;;18465:4;;-1:-1:-1;;;;;18465:4:0;;;18459:10;;;;18456:123;;18487:18;;18472:45;;;;;;;;18507:9;18472:45;;;;;;;;;;;;;;;;;;;;;;;;;;;18487:18;18472:14;:45::i;:::-;18456:123;;;18553:18;;18538:41;;;;;;;;18573:5;18538:41;;;;;;;;;;;;;;;;;;;;;;;;;;18553:18;18538:14;:41::i;:::-;18664:8;;18616:4;;18601:12;;18664:8;;;;;;:36;;-1:-1:-1;;;;;;18676:24:0;;;;;;:18;:24;;;;;;;;18664:36;:62;;;-1:-1:-1;;;;;;18704:22:0;;;;;;:18;:22;;;;;;;;18664:62;18661:81;;;18737:5;18727:15;;18661:81;18762:4;;-1:-1:-1;;;;;18762:4:0;;;18756:10;;;;18753:28;;-1:-1:-1;18777:4:0;18753:28;18801:4;;-1:-1:-1;;;;;18795:10:0;;;18801:4;;18795:10;;;;:26;;-1:-1:-1;18817:4:0;;-1:-1:-1;;;;;18809:12:0;;;18817:4;;18809:12;;18795:26;18792:46;;;18833:5;18823:15;;18792:46;18849:49;18864:4;18870:2;18874:6;18882:7;18891:6;18849:14;:49::i;:::-;16320:2586;;;16251:2655;;;:::o;15194:158::-;15235:7;15256:15;15273;15292:19;:17;:19::i;:::-;15255:56;;-1:-1:-1;15255:56:0;-1:-1:-1;15329:15:0;15255:56;;15329:15;:::i;:::-;15322:22;;;;15194:158;:::o;2273:173::-;2329:16;2348:6;;-1:-1:-1;;;;;2365:17:0;;;-1:-1:-1;;;;;;2365:17:0;;;;;;2398:40;;2348:6;;;;;;;2398:40;;2329:16;2398:40;2318:128;2273:173;:::o;20066:1164::-;6540:8;:15;;-1:-1:-1;;6540:15:0;;;;;20221:12:::1;::::0;::::1;::::0;20204:14:::1;::::0;::::1;::::0;20187::::1;::::0;::::1;::::0;6540:15;;20221:12;20187:31:::1;::::0;::::1;:::i;:::-;:46;;;;:::i;:::-;20186:52;::::0;20237:1:::1;20186:52;:::i;:::-;20164:74;;20249:32;20319:11;20302:4;:14;;;20284:15;:32;;;;:::i;:::-;:46;;;;:::i;:::-;20249:81:::0;-1:-1:-1;20341:14:0::1;20358:42;20249:81:::0;20358:15;:42:::1;:::i;:::-;20341:59:::0;-1:-1:-1;20438:21:0::1;20472:24;20341:59:::0;20472:16:::1;:24::i;:::-;20509:20;20532:38;20556:14:::0;20532:21:::1;:38;:::i;:::-;20509:61;;20581:19;20632:4;:14;;;20618:11;:28;;;;:::i;:::-;20602:45;::::0;:12;:45:::1;:::i;:::-;20581:66;;20658:29;20704:4;:14;;;20690:11;:28;;;;:::i;:::-;20658:60:::0;-1:-1:-1;20734:25:0;;20731:158:::1;;20816:61;20829:24;20855:21;20816:12;:61::i;:::-;20942:14;::::0;::::1;::::0;20901:20:::1;::::0;20924:15:::1;:11:::0;20938:1:::1;20924:15;:::i;:::-;:32;;;;:::i;:::-;20901:55:::0;-1:-1:-1;20970:16:0;;20967:95:::1;;21010:15;::::0;21002:48:::1;::::0;-1:-1:-1;;;;;21010:15:0::1;21037:12:::0;21002:34:::1;:48::i;:::-;21111:12;::::0;::::1;::::0;21072:18:::1;::::0;21093:15:::1;:11:::0;21107:1:::1;21093:15;:::i;:::-;:30;;;;:::i;:::-;21072:51:::0;-1:-1:-1;21137:14:0;;21134:89:::1;;21175:13;::::0;21167:44:::1;::::0;-1:-1:-1;;;;;21175:13:0::1;21200:10:::0;21167:32:::1;:44::i;:::-;-1:-1:-1::0;;6578:8:0;:16;;-1:-1:-1;;6578:16:0;;;-1:-1:-1;;;;;;;;;20066:1164:0:o;18987:1071::-;19109:28;19140:36;19151:7;19160;19169:6;19140:10;:36::i;:::-;-1:-1:-1;;;;;19204:19:0;;;;;;:11;:19;;;;;;19109:67;;-1:-1:-1;19204:19:0;;19200:115;;;-1:-1:-1;;;;;19280:15:0;;;;;;:7;:15;;;;;;:23;;19296:7;;19280:23;:::i;:::-;-1:-1:-1;;;;;19262:15:0;;;;;;:7;:15;;;;;:41;19200:115;-1:-1:-1;;;;;19329:22:0;;;;;;:11;:22;;;;;;;;19325:130;;;19426:17;;;;-1:-1:-1;;;;;19407:18:0;;;;;;:7;:18;;;;;;:36;;19426:17;19407:36;:::i;:::-;-1:-1:-1;;;;;19386:18:0;;;;;;:7;:18;;;;;:57;19325:130;19501:9;;-1:-1:-1;;;;;19485:15:0;;19501:9;19485:15;;;:7;:15;;;;;;:25;;19501:9;19485:25;:::i;:::-;-1:-1:-1;;;;;19467:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;19561:17;;;19542:18;;;;;;;;;;:36;;19561:17;19542:36;:::i;:::-;-1:-1:-1;;;;;19521:18:0;;;;;;:7;:18;;;;;:57;19602:12;;;;:16;;;:36;;;19637:1;19622;:12;;;:16;19602:36;19599:202;;;19655:41;19670:1;:12;;;19683:1;:12;;;19655:14;:41::i;:::-;19741:4;-1:-1:-1;;;;;19716:73:0;19725:6;-1:-1:-1;;;;;19716:73:0;;19778:1;:10;;;19763:1;:12;;;19748:1;:12;;;:27;;;;:::i;:::-;:40;;;;:::i;:::-;19716:73;;2511:25:1;;;2499:2;2484:18;19716:73:0;;;;;;;19599:202;19829:1;19814;:12;;;:16;:36;;;;19849:1;19834;:12;;;:16;19814:36;19811:83;;;19852:42;19867:1;:12;;;19881:1;:12;;;19852:14;:42::i;:::-;19921:1;19908;:10;;;:14;:32;;;;19939:1;19926;:10;;;:14;19908:32;19905:73;;;19942:36;19955:1;:10;;;19967:1;:10;;;19942:12;:36::i;:::-;20011:9;-1:-1:-1;;;;;19994:46:0;20003:6;-1:-1:-1;;;;;19994:46:0;;20022:1;:17;;;19994:46;;;;2511:25:1;;2499:2;2484:18;;2365:177;19994:46:0;;;;;;;;19098:960;18987:1071;;;;;:::o;15360:540::-;15457:7;;15493;;15410;;;;;15511:279;15535:9;:16;15531:20;;15511:279;;;15601:7;15577;:21;15585:9;15595:1;15585:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;15585:12:0;15577:21;;;;;;;;;;;;;:31;;:66;;;15636:7;15612;:21;15620:9;15630:1;15620:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;15620:12:0;15612:21;;;;;;;;;;;;;:31;15577:66;15573:97;;;15653:7;;15662;;15645:25;;;;;;;15360:540;;:::o;15573:97::-;15703:7;:21;15711:9;15721:1;15711:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;15711:12:0;15703:21;;;;;;;;;;;;;15695:29;;:7;:29;:::i;:::-;15685:39;;15757:7;:21;15765:9;15775:1;15765:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;15765:12:0;15757:21;;;;;;;;;;;;;15749:29;;:7;:29;:::i;:::-;15739:39;-1:-1:-1;15553:3:0;;;;:::i;:::-;;;;15511:279;;;;15822:7;;15814;;:15;;;;:::i;:::-;15804:7;:25;15800:56;;;15839:7;;15848;;15831:25;;;;;;15360:540;;:::o;15800:56::-;15875:7;;15884;;-1:-1:-1;15360:540:0;-1:-1:-1;15360:540:0:o;21741:562::-;21891:16;;;21905:1;21891:16;;;;;;;;21867:21;;21891:16;;;;;;;;;;-1:-1:-1;21891:16:0;21867:40;;21936:4;21918;21923:1;21918:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21918:23:0;;;:7;;;;;;;;;;:23;;;;21962:6;;:13;;;-1:-1:-1;;;21962:13:0;;;;:6;;;;;:11;;:13;;;;;21918:7;;21962:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21952:4;21957:1;21952:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21952:23:0;;;:7;;;;;;;;;:23;22020:6;;21988:53;;22005:4;;22020:6;22029:11;21988:8;:53::i;:::-;22080:6;;:215;;-1:-1:-1;;;22080:215:0;;-1:-1:-1;;;;;22080:6:0;;;;:57;;:215;;22152:11;;22080:6;;22222:4;;22249;;22269:15;;22080:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21238:495;21418:6;;21386:53;;21403:4;;-1:-1:-1;;;;;21418:6:0;21427:11;21386:8;:53::i;:::-;21482:6;;-1:-1:-1;;;;;21482:6:0;:22;21512:9;21545:4;21565:11;21482:6;;21677:7;1794;1821:6;-1:-1:-1;;;;;1821:6:0;;1748:87;21677:7;21699:15;21482:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3216:317::-;3331:6;3306:21;:31;;3298:73;;;;-1:-1:-1;;;3298:73:0;;22040:2:1;3298:73:0;;;22022:21:1;22079:2;22059:18;;;22052:30;22118:31;22098:18;;;22091:59;22167:18;;3298:73:0;21838:353:1;3298:73:0;3385:12;3403:9;-1:-1:-1;;;;;3403:14:0;3425:6;3403:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3384:52;;;3455:7;3447:78;;;;-1:-1:-1;;;3447:78:0;;22608:2:1;3447:78:0;;;22590:21:1;22647:2;22627:18;;;22620:30;22686:34;22666:18;;;22659:62;22757:28;22737:18;;;22730:56;22803:19;;3447:78:0;22406:422:1;13256:454:0;13342:36;;:::i;:::-;13403:37;13415:7;13424;13433:6;13403:11;:37::i;:::-;13391:49;;13544:53;13557:9;13568:7;13577;13586:10;:8;:10::i;:::-;13544:12;:53::i;:::-;13520:20;;;13451:146;13498:20;;;13451:146;13471:25;;;13451:146;;;13631:44;13452:9;13655:7;13664:10;:8;:10::i;:::-;13631:12;:44::i;:::-;13609:18;;;13608:67;13256:454;;;;;:::o;12394:266::-;12501:10;12477:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;12547:4:0;12527:26;;;;:11;:26;;;;;;;;12524:92;;;12587:4;;-1:-1:-1;;;;;12587:4:0;12579:13;;;;:7;:13;;;;;:25;;12594:10;;12579:13;:25;;12594:10;;12579:25;:::i;:::-;;;;-1:-1:-1;;12524:92:0;12634:4;;-1:-1:-1;;;;;12634:4:0;12626:13;;;;:7;:13;;;;;:26;;12642:10;;12626:13;:26;;12642:10;;12626:26;:::i;:::-;;;;-1:-1:-1;;;;12394:266:0:o;12668:288::-;12775:10;12751:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;12821:4:0;12801:26;;;;:11;:26;;;;;;;;12798:103;;;12861:15;;-1:-1:-1;;;;;12861:15:0;12853:24;;;;:7;:24;;;;;:36;;12879:10;;12853:24;:36;;12879:10;;12853:36;:::i;:::-;;;;-1:-1:-1;;12798:103:0;12919:15;;-1:-1:-1;;;;;12919:15:0;12911:24;;;;:7;:24;;;;;:37;;12938:10;;12911:24;:37;;12938:10;;12911:37;:::i;12968:270::-;13067:8;13045:11;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;13111:4:0;13091:26;;;;:11;:26;;;;;;;;13088:99;;;13151:13;;-1:-1:-1;;;;;13151:13:0;13143:22;;;;:7;:22;;;;;:32;;13167:8;;13143:22;:32;;13167:8;;13143:32;:::i;:::-;;;;-1:-1:-1;;13088:99:0;13205:13;;-1:-1:-1;;;;;13205:13:0;13197:22;;;;:7;:22;;;;;:33;;13222:8;;13197:22;:33;;13222:8;;13197:33;:::i;13718:563::-;13805:28;;:::i;:::-;13852:7;13848:86;;13874:17;;;:27;;;13914:8;;13848:86;13944:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13944:17:0;13975:6;13972:55;;;-1:-1:-1;13983:16:0;;;;;;;;13990:9;13983:16;;;;;;;;;;;;;;;;;;;;;;;;;13972:55;;;-1:-1:-1;14015:12:0;;;;;;;;14022:5;14015:12;;;;;;;;;;;;;;;;;;;;;;;;13972:55;14076:3;14061:4;:14;;;14053:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;14038:12;;;:41;14113:14;;;;14128:3;;14105:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;14090:12;;;:41;14163:12;;;;14176:3;;14155:20;;:7;:20;:::i;:::-;:24;;;;:::i;:::-;14142:10;;;:37;;;14231:12;;;;14218;;;;14210:20;;:7;:20;:::i;:::-;:33;;;;:::i;:::-;:44;;;;:::i;:::-;14190:17;;;:64;-1:-1:-1;13718:563:0;;;;;:::o;14289:617::-;14415:15;;;;14516:19;14524:11;14516:7;:19;:::i;:::-;14506:29;;14552:7;14548:67;;-1:-1:-1;14581:7:0;;-1:-1:-1;14599:1:0;;-1:-1:-1;14599:1:0;14574:29;;14548:67;14653:11;14640:1;:12;;;:24;;;;:::i;:::-;14627:37;;14701:11;14688:1;:12;;;:24;;;;:::i;:::-;14675:37;;14723:16;14753:11;14742:1;:10;;;:22;;;;:::i;:::-;14723:41;-1:-1:-1;14723:41:0;14813:10;14794:18;14802:10;14794:7;:18;:::i;:::-;:29;;;;:::i;:::-;:38;;;;:::i;:::-;14775:57;;14843:55;14289:617;;;;;;;;;;:::o;14918:268::-;15027:16;15062:7;15058:47;;-1:-1:-1;15091:1:0;15084:9;;15058:47;15139:11;15128:1;:10;;;:22;;;;:::i;:::-;15117:33;14918:268;-1:-1:-1;;;;14918:268:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;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:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1354:118::-;1440:5;1433:13;1426:21;1419:5;1416:32;1406:60;;1462:1;1459;1452:12;1477:128;1542:20;;1571:28;1542:20;1571:28;:::i;1610:750::-;1702:6;1710;1718;1771:2;1759:9;1750:7;1746:23;1742:32;1739:52;;;1787:1;1784;1777:12;1739:52;1827:9;1814:23;1856:18;1897:2;1889:6;1886:14;1883:34;;;1913:1;1910;1903:12;1883:34;1951:6;1940:9;1936:22;1926:32;;1996:7;1989:4;1985:2;1981:13;1977:27;1967:55;;2018:1;2015;2008:12;1967:55;2058:2;2045:16;2084:2;2076:6;2073:14;2070:34;;;2100:1;2097;2090:12;2070:34;2155:7;2148:4;2138:6;2135:1;2131:14;2127:2;2123:23;2119:34;2116:47;2113:67;;;2176:1;2173;2166:12;2113:67;2207:4;2199:13;;;;-1:-1:-1;2231:6:1;-1:-1:-1;;2272:20:1;;2259:34;2302:28;2259:34;2302:28;:::i;:::-;2349:5;2339:15;;;1610:750;;;;;:::o;2547:456::-;2624:6;2632;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2748:9;2735:23;2767:31;2792:5;2767:31;:::i;:::-;2817:5;-1:-1:-1;2874:2:1;2859:18;;2846:32;2887:33;2846:32;2887:33;:::i;:::-;2547:456;;2939:7;;-1:-1:-1;;;2993:2:1;2978:18;;;;2965:32;;2547:456::o;3008:180::-;3067:6;3120:2;3108:9;3099:7;3095:23;3091:32;3088:52;;;3136:1;3133;3126:12;3088:52;-1:-1:-1;3159:23:1;;3008:180;-1:-1:-1;3008:180:1:o;3590:241::-;3646:6;3699:2;3687:9;3678:7;3674:23;3670:32;3667:52;;;3715:1;3712;3705:12;3667:52;3754:9;3741:23;3773:28;3795:5;3773:28;:::i;3836:247::-;3895:6;3948:2;3936:9;3927:7;3923:23;3919:32;3916:52;;;3964:1;3961;3954:12;3916:52;4003:9;3990:23;4022:31;4047:5;4022:31;:::i;4088:388::-;4156:6;4164;4217:2;4205:9;4196:7;4192:23;4188:32;4185:52;;;4233:1;4230;4223:12;4185:52;4272:9;4259:23;4291:31;4316:5;4291:31;:::i;:::-;4341:5;-1:-1:-1;4398:2:1;4383:18;;4370:32;4411:33;4370:32;4411:33;:::i;:::-;4463:7;4453:17;;;4088:388;;;;;:::o;4481:248::-;4549:6;4557;4610:2;4598:9;4589:7;4585:23;4581:32;4578:52;;;4626:1;4623;4616:12;4578:52;-1:-1:-1;;4649:23:1;;;4719:2;4704:18;;;4691:32;;-1:-1:-1;4481:248:1:o;4734:382::-;4799:6;4807;4860:2;4848:9;4839:7;4835:23;4831:32;4828:52;;;4876:1;4873;4866:12;4828:52;4915:9;4902:23;4934:31;4959:5;4934:31;:::i;:::-;4984:5;-1:-1:-1;5041:2:1;5026:18;;5013:32;5054:30;5013:32;5054:30;:::i;5749:127::-;5810:10;5805:3;5801:20;5798:1;5791:31;5841:4;5838:1;5831:15;5865:4;5862:1;5855:15;5881:1191;5971:6;5979;6032:2;6020:9;6011:7;6007:23;6003:32;6000:52;;;6048:1;6045;6038:12;6000:52;6088:9;6075:23;6117:18;6158:2;6150:6;6147:14;6144:34;;;6174:1;6171;6164:12;6144:34;6212:6;6201:9;6197:22;6187:32;;6257:7;6250:4;6246:2;6242:13;6238:27;6228:55;;6279:1;6276;6269:12;6228:55;6315:2;6302:16;6337:4;6360:2;6356;6353:10;6350:36;;;6366:18;;:::i;:::-;6412:2;6409:1;6405:10;6444:2;6438:9;6507:2;6503:7;6498:2;6494;6490:11;6486:25;6478:6;6474:38;6562:6;6550:10;6547:22;6542:2;6530:10;6527:18;6524:46;6521:72;;;6573:18;;:::i;:::-;6609:2;6602:22;6659:18;;;6693:15;;;;-1:-1:-1;6735:11:1;;;6731:20;;;6763:19;;;6760:39;;;6795:1;6792;6785:12;6760:39;6819:11;;;;6839:148;6855:6;6850:3;6847:15;6839:148;;;6921:23;6940:3;6921:23;:::i;:::-;6909:36;;6872:12;;;;6965;;;;6839:148;;;7006:6;-1:-1:-1;7031:35:1;;-1:-1:-1;7047:18:1;;;7031:35;:::i;:::-;7021:45;;;;;;5881:1191;;;;;:::o;7077:385::-;7163:6;7171;7179;7187;7240:3;7228:9;7219:7;7215:23;7211:33;7208:53;;;7257:1;7254;7247:12;7208:53;-1:-1:-1;;7280:23:1;;;7350:2;7335:18;;7322:32;;-1:-1:-1;7401:2:1;7386:18;;7373:32;;7452:2;7437:18;7424:32;;-1:-1:-1;7077:385:1;-1:-1:-1;7077:385:1:o;7467:309::-;7532:6;7540;7593:2;7581:9;7572:7;7568:23;7564:32;7561:52;;;7609:1;7606;7599:12;7561:52;7648:9;7635:23;7667:28;7689:5;7667:28;:::i;8004:347::-;8206:2;8188:21;;;8245:2;8225:18;;;8218:30;8284:25;8279:2;8264:18;;8257:53;8342:2;8327:18;;8004:347::o;8356:356::-;8558:2;8540:21;;;8577:18;;;8570:30;8636:34;8631:2;8616:18;;8609:62;8703:2;8688:18;;8356:356::o;8717:127::-;8778:10;8773:3;8769:20;8766:1;8759:31;8809:4;8806:1;8799:15;8833:4;8830:1;8823:15;8849:127;8910:10;8905:3;8901:20;8898:1;8891:31;8941:4;8938:1;8931:15;8965:4;8962:1;8955:15;8981:135;9020:3;9041:17;;;9038:43;;9061:18;;:::i;:::-;-1:-1:-1;9108:1:1;9097:13;;8981:135::o;9530:128::-;9597:9;;;9618:11;;;9615:37;;;9632:18;;:::i;10074:217::-;10114:1;10140;10130:132;;10184:10;10179:3;10175:20;10172:1;10165:31;10219:4;10216:1;10209:15;10247:4;10244:1;10237:15;10130:132;-1:-1:-1;10276:9:1;;10074:217::o;10296:125::-;10361:9;;;10382:10;;;10379:36;;;10395:18;;:::i;10426:422::-;10515:1;10558:5;10515:1;10572:270;10593:7;10583:8;10580:21;10572:270;;;10652:4;10648:1;10644:6;10640:17;10634:4;10631:27;10628:53;;;10661:18;;:::i;:::-;10711:7;10701:8;10697:22;10694:55;;;10731:16;;;;10694:55;10810:22;;;;10770:15;;;;10572:270;;;10576:3;10426:422;;;;;:::o;10853:806::-;10902:5;10932:8;10922:80;;-1:-1:-1;10973:1:1;10987:5;;10922:80;11021:4;11011:76;;-1:-1:-1;11058:1:1;11072:5;;11011:76;11103:4;11121:1;11116:59;;;;11189:1;11184:130;;;;11096:218;;11116:59;11146:1;11137:10;;11160:5;;;11184:130;11221:3;11211:8;11208:17;11205:43;;;11228:18;;:::i;:::-;-1:-1:-1;;11284:1:1;11270:16;;11299:5;;11096:218;;11398:2;11388:8;11385:16;11379:3;11373:4;11370:13;11366:36;11360:2;11350:8;11347:16;11342:2;11336:4;11333:12;11329:35;11326:77;11323:159;;;-1:-1:-1;11435:19:1;;;11467:5;;11323:159;11514:34;11539:8;11533:4;11514:34;:::i;:::-;11584:6;11580:1;11576:6;11572:19;11563:7;11560:32;11557:58;;;11595:18;;:::i;:::-;11633:20;;10853:806;-1:-1:-1;;;10853:806:1:o;11664:140::-;11722:5;11751:47;11792:4;11782:8;11778:19;11772:4;11751:47;:::i;11809:168::-;11882:9;;;11913;;11930:15;;;11924:22;;11910:37;11900:71;;11951:18;;:::i;11982:184::-;12052:6;12105:2;12093:9;12084:7;12080:23;12076:32;12073:52;;;12121:1;12118;12111:12;12073:52;-1:-1:-1;12144:16:1;;11982:184;-1:-1:-1;11982:184:1:o;12450:245::-;12517:6;12570:2;12558:9;12549:7;12545:23;12541:32;12538:52;;;12586:1;12583;12576:12;12538:52;12618:9;12612:16;12637:28;12659:5;12637:28;:::i;12700:591::-;-1:-1:-1;;;;;13043:15:1;;;13025:34;;13090:2;13075:18;;13068:34;;;;13133:2;13118:18;;13111:34;;;;13176:2;13161:18;;13154:34;;;;13225:15;;;13219:3;13204:19;;13197:44;13005:3;13257:19;;13250:35;;;;12974:3;12959:19;;12700:591::o;13296:245::-;13375:6;13383;13436:2;13424:9;13415:7;13411:23;13407:32;13404:52;;;13452:1;13449;13442:12;13404:52;-1:-1:-1;;13475:16:1;;13531:2;13516:18;;;13510:25;13475:16;;13510:25;;-1:-1:-1;13296:245:1:o;19674:251::-;19744:6;19797:2;19785:9;19776:7;19772:23;19768:32;19765:52;;;19813:1;19810;19803:12;19765:52;19845:9;19839:16;19864:31;19889:5;19864:31;:::i;19930:980::-;20192:4;20240:3;20229:9;20225:19;20271:6;20260:9;20253:25;20297:2;20335:6;20330:2;20319:9;20315:18;20308:34;20378:3;20373:2;20362:9;20358:18;20351:31;20402:6;20437;20431:13;20468:6;20460;20453:22;20506:3;20495:9;20491:19;20484:26;;20545:2;20537:6;20533:15;20519:29;;20566:1;20576:195;20590:6;20587:1;20584:13;20576:195;;;20655:13;;-1:-1:-1;;;;;20651:39:1;20639:52;;20746:15;;;;20711:12;;;;20687:1;20605:9;20576:195;;;-1:-1:-1;;;;;;;20827:32:1;;;;20822:2;20807:18;;20800:60;-1:-1:-1;;;20891:3:1;20876:19;20869:35;20788:3;19930:980;-1:-1:-1;;;19930:980:1:o;21527:306::-;21615:6;21623;21631;21684:2;21672:9;21663:7;21659:23;21655:32;21652:52;;;21700:1;21697;21690:12;21652:52;21729:9;21723:16;21713:26;;21779:2;21768:9;21764:18;21758:25;21748:35;;21823:2;21812:9;21808:18;21802:25;21792:35;;21527:306;;;;;:::o

Swarm Source

ipfs://ceb87aeb8d4f9441191429ed51f09633c3484dc1941c7e281846d6191a0f9f91

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.