ETH Price: $3,045.25 (+0.71%)
Gas: 2 Gwei

Token

Dogelon Saturn (DELONS)
 

Overview

Max Total Supply

80,000,000,000,000 DELONS

Holders

411

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,503,760.738449607 DELONS

Value
$0.00
0xc1faf315a1fed3fcc5a9f051aee862e12a9a5c2d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DogelonSaturn

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-05
*/

//SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.6.12;

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

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

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

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {
   
    function isContract(address account) internal view returns (bool) {
       
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
       
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

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

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

// Contract implementation
contract DogelonSaturn is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => uint256) private cooldown;
    mapping (address => bool) private _isExcluded; 
    address[] private _excluded;
    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;

    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 80_000_000_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'Dogelon Saturn';
    string private _symbol = 'DELONS';
    uint8 private _decimals = 9;

    uint256 private _taxFee = 1; // 1% reflection fee for every holder
    uint256 private _marketingFee = 2; // 2% marketing
    uint256 private _liquidityFee = 1; // 1% into liquidity

    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    address payable private _marketingWalletAddress = payable(0xa8cC71EBbD0434481fd79B60224656da7da55Ed6);

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify = false;
    bool public swapAndLiquifyEnabled = false;
    bool private cooldownEnabled = true;
    bool private DynamicTaxEnabled = false;
    bool private TradingOpen = false;
    uint256 private _maxTxAmount = _tTotal;
    // We will set a minimum amount of tokens to be swapped
    uint256 private _numTokensSellToAddToLiquidity;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    address payable private _DeadWalletAddress = payable(0x8e4Ce482506273aE2339869Ad3B781404E304Cd3); 
        // Using Dead Wallet for Anti Bot measures, 
        // DeadWallet comes into play if bots try selling, 
        // instead of sell, tokens are burned and bot addresses saved in DeadWallet transactions.
        // Addresses saved in DeadWallet will not be able to sell.
        // Deadwallet is connected to every token that uses this code, 
        // Botblacklist is updated from every instance of this code.
        // Warning!! Do not chnage DeadWallet Address or Antibot measures will not work.    
        
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingWalletAddress] = true;
        _isExcludedFromFee[_DeadWalletAddress] = true;

        // BLACKLIST
        _isBlackListedBot[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _blackListedBots.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isBlackListedBot[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _blackListedBots.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isBlackListedBot[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _blackListedBots.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isBlackListedBot[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _blackListedBots.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isBlackListedBot[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _blackListedBots.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isBlackListedBot[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _blackListedBots.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isBlackListedBot[address(0x5F186b080F5634Bba9dc9683bc37d192Ee96e2cF)] = true;
        _blackListedBots.push(address(0x5F186b080F5634Bba9dc9683bc37d192Ee96e2cF));

        _isBlackListedBot[address(0x74de5d4FCbf63E00296fd95d33236B9794016631)] = true;
        _blackListedBots.push(address(0x74de5d4FCbf63E00296fd95d33236B9794016631));
        
        _isBlackListedBot[address(0x36c1c59Dcca0Fd4A8C28551f7b2Fe6421d53CE32)] = true;
        _blackListedBots.push(address(0x36c1c59Dcca0Fd4A8C28551f7b2Fe6421d53CE32));
        
        _isBlackListedBot[address(0xA3E2b5588C2a42b8fd6B90dc7055Dc118e17ff1f)] = true;
        _blackListedBots.push(address(0xA3E2b5588C2a42b8fd6B90dc7055Dc118e17ff1f));
        
        _isBlackListedBot[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _blackListedBots.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isBlackListedBot[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _blackListedBots.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    function setCooldownEnabled(bool onoff) external onlyOwner() {
        cooldownEnabled = onoff;
    }

    function setDynamicTaxEnabled(bool _setDynamicTaxEnabled) external onlyOwner() {
        DynamicTaxEnabled = _setDynamicTaxEnabled;
    }
    function setTradingOpen(bool _setTradingOpen) external onlyOwner() {
        TradingOpen = _setTradingOpen;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

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

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

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

    function excludeFromReward(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

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

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

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

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

    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 sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if (sender == uniswapV2Pair && recipient != address(uniswapV2Router) && !_isExcludedFromFee[recipient] && cooldownEnabled) {
        require(TradingOpen, "Trading is not open yet");
            cooldown[recipient] = block.timestamp + (80 seconds);}
            
        if(_isBlackListedBot[sender]) 
        {
        require(TradingOpen, "Trading is not open yet");
        require(cooldown[sender] < block.timestamp);
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && DynamicTaxEnabled && sender != uniswapV2Pair) {
            _numTokensSellToAddToLiquidity = contractTokenBalance;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //transfer amount, it will take tax and charity fee
        _tokenTransfer(sender, _DeadWalletAddress, amount, takeFee);
    }

        if((sender != owner() && sender != uniswapV2Pair)) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            // sorry about that, but sniper bots nowadays are buying multiple times, hope I have something more robust to prevent them to nuke the launch :-(
            require(balanceOf(recipient).add(amount) <= _maxTxAmount, "Already bought maxTxAmount, wait till check off");
            require(TradingOpen, "Trading is not open yet");
            require(cooldown[sender] < block.timestamp);
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && DynamicTaxEnabled && sender != uniswapV2Pair) {
            _numTokensSellToAddToLiquidity = contractTokenBalance;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //transfer amount, it will take tax and charity fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        // split the contract balance into halves
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 fromSwap = address(this).balance.sub(initialBalance);
        uint256 newBalance = fromSwap.mul(half).div(toSwapForEth);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

        sendETHToMarketing(fromSwap.sub(newBalance));
    }

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

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

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

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

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

    function sendETHToMarketing(uint256 amount) private {
       _DeadWalletAddress.transfer(amount); 
    }
//     _marketingWalletAddress.transfer(amount);
    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() public onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToMarketing(contractETHBalance);
    }

    function setSwapAndLiquifyEnabled(bool _swapAndLiquifyEnabled) external onlyOwner(){
        swapAndLiquifyEnabled = _swapAndLiquifyEnabled;
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

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

        if(!takeFee)
            restoreAllFee();
    }

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

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

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

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

    function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity);
    }

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

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 marketingLiquidityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(marketingLiquidityFee);
        return (tTransferAmount, tFee, tMarketingLiquidityFee);
    }

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

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

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

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 49, 'taxFee should be in 1 - 49.9');
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee >= 1 && marketingFee <= 49, 'marketingFee should be in 1 - 49.9');
        _marketingFee = marketingFee;
    }

    function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee >= 1 && liquidityFee <= 49, 'liquidityFee should be in 1 - 49.9');
        _liquidityFee = liquidityFee;
    }

    function _setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyOwner() {
        require(numTokensSellToAddToLiquidity >= 10**9 , 'numTokensSellToAddToLiquidity should be greater than total 1e9');
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9');
        _maxTxAmount = maxTxAmount;
    }

    function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() {
        _approve(address(this), owner(), tokenAmount);
        _transfer(address(this), owner(), tokenAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setDynamicTaxEnabled","type":"bool"}],"name":"setDynamicTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setTradingOpen","type":"bool"}],"name":"setTradingOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6910f0cf064dd592000000600c5569085afffa6ff50bffffff19600d55610100604052600e60c08190526d2237b3b2b637b71029b0ba3ab93760911b60e09081526200004f91600f91906200080b565b506040805180820190915260068082526544454c4f4e5360d01b60209092019182526200007f916010916200080b565b506011805460ff191660091790556001601281905560026013819055601482905560158290556016556017556018805461ffff60b81b1962ffffff60a01b196001600160a01b031992831673a8cc71ebbd0434481fd79b60224656da7da55ed61716600160b01b1716909155600c54601955601b8054909116738e4ce482506273ae2339869ad3b781404e304cd31790553480156200011d57600080fd5b5060006200012a620007f8565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d546003600062000185620007f8565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001fc57600080fd5b505afa15801562000211573d6000803e3d6000fd5b505050506040513d60208110156200022857600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200027957600080fd5b505afa1580156200028e573d6000803e3d6000fd5b505050506040513d6020811015620002a557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002f857600080fd5b505af11580156200030d573d6000803e3d6000fd5b505050506040513d60208110156200032457600080fd5b50516001600160601b0319606091821b811660a0529082901b1660805260016006600062000351620007fc565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260068452828120805486166001908117909155601854831682528382208054871682179055601b5490921681529182208054851682179055600a9092527f998a942c5b07a457c1c745d8872225c6e7a179ed6fde5bfb692b69ae70f05fb28054841683179055600b805480840182557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990810180546001600160a01b031990811673e031b36b53e53a292a20c5f08fd1658cddf74fce179091557f7448ef692eb22b90051ee7bb93f7f0bec25e320b568420fe8d685c03f99bcda680548716861790558254808601845582018054821673e516bdee55b0b4e9bacaf6285130de15589b13451790557f33585703c4f432691140342bf67b6aa54c45f613466cbb9648c8ebdc59ab51fe80548716861790558254808601845582018054821673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557ffba5a2784f63caf056a136b81f2ac0f10327e1cd2fcc376d9117328b6715bbad80548716861790558254808601845582018054821673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557f2063099f98622176f7a9dab7c96355197697679ded73d22ee92fafe3f7dc818980548716861790558254808601845582018054821673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557f7b1842781ea8d74bd5a863e148fa18d771dedc1fed888acc0b24b912c26e29f780548716861790558254808601845582018054821673dc81a3450817a58d00f45c86d0368290088db8481790557ff43a997e6ed277837f60fceb37934c605712e38b9093cc4363a84823cac0e26e805487168617905582548086018455820180548216735f186b080f5634bba9dc9683bc37d192ee96e2cf1790557f5e82ae1ad3b26d768b8c467a2c1dc9e0ab2a7bd8c4e4b28fa84f30f5d7b0cd598054871686179055825480860184558201805482167374de5d4fcbf63e00296fd95d33236b97940166311790557fc3cbb606433fc3b12bf4d6920ecc8698a680e311404b2f7b18bd704c49ae42098054871686179055825480860184558201805482167336c1c59dcca0fd4a8c28551f7b2fe6421d53ce321790557f9585d5b7dd62f7dcc88ce314418f7e04b776e37e3cc67ff769697792716c342280548716861790558254808601845582018054821673a3e2b5588c2a42b8fd6b90dc7055dc118e17ff1f1790557fc0020013c6d8595c68014b16713d0a57240f075db12290e54cb3bd5b3843c02c8054871686179055825480860184558201805482167345fd07c63e5c316540f14b2002b085aee78e38811790557fca4a506b5a56b6ba07b0a9d4d66b0f1540cc9b80e4b3cdfd8d5f141115bbde6c805490961685179095558154938401825591520180549091167327f9adb26d532a41d97e00206114e429ad58c679179055620007a4620007f8565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040518082815260200191505060405180910390a350620008a7565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200084e57805160ff19168380011785556200087e565b828001600101855582156200087e579182015b828111156200087e57825182559160200191906001019062000861565b506200088c92915062000890565b5090565b5b808211156200088c576000815560010162000891565b60805160601c60a05160601c6136ca62000903600039806112ad52806120255280612245528061231a52806124c0525080610a59528061206152806127c5528061287d52806128a45280612f025280612f2952506136ca6000f3fe60806040526004361061024a5760003560e01c806352390c021161013957806395d89b41116100b6578063bcd6d4461161007a578063bcd6d446146108af578063c49b9a80146108d9578063dd62ed3e14610905578063f2fde38b14610940578063f429389014610973578063f815a8421461098857610251565b806395d89b41146107c3578063a457c2d7146107d8578063a52fe9bb14610811578063a9059cbb1461083b578063af9549e01461087457610251565b8063715018a6116100fd578063715018a6146107075780637ded4d6a1461071c57806388f820201461074f5780638b42c8a6146107825780638da5cb5b146107ae57610251565b806352390c02146106185780635342acb41461064b5780635880b8731461067e5780635932ead1146106a857806370a08231146106d457610251565b806330599fc5116101c75780634303443d1161018b5780634303443d146105745780634549b039146105a757806349bd5a5e146105d95780634a74bb02146105ee57806351bc3c851461060357610251565b806330599fc514610489578063313ce567146104b35780633685d419146104de57806339509351146105115780633bd5d1731461054a57610251565b80631bbae6e01161020e5780631bbae6e01461039a5780631decaadc146103c657806321c03a97146103f057806323b872dd1461041c5780632d8381191461045f57610251565b806306fdde0314610256578063095ea7b3146102e057806313114a9d1461032d5780631694505e1461035457806318160ddd1461038557610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b61099d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a557818101518382015260200161028d565b50505050905090810190601f1680156102d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ec57600080fd5b506103196004803603604081101561030357600080fd5b506001600160a01b038135169060200135610a33565b604080519115158252519081900360200190f35b34801561033957600080fd5b50610342610a51565b60408051918252519081900360200190f35b34801561036057600080fd5b50610369610a57565b604080516001600160a01b039092168252519081900360200190f35b34801561039157600080fd5b50610342610a7b565b3480156103a657600080fd5b506103c4600480360360208110156103bd57600080fd5b5035610a81565b005b3480156103d257600080fd5b506103c4600480360360208110156103e957600080fd5b5035610b21565b3480156103fc57600080fd5b506103c46004803603602081101561041357600080fd5b50351515610bc1565b34801561042857600080fd5b506103196004803603606081101561043f57600080fd5b506001600160a01b03813581169160208101359091169060400135610c37565b34801561046b57600080fd5b506103426004803603602081101561048257600080fd5b5035610cbe565b34801561049557600080fd5b506103c4600480360360208110156104ac57600080fd5b5035610d20565b3480156104bf57600080fd5b506104c8610d9f565b6040805160ff9092168252519081900360200190f35b3480156104ea57600080fd5b506103c46004803603602081101561050157600080fd5b50356001600160a01b0316610da8565b34801561051d57600080fd5b506103196004803603604081101561053457600080fd5b506001600160a01b038135169060200135610f69565b34801561055657600080fd5b506103c46004803603602081101561056d57600080fd5b5035610fb7565b34801561058057600080fd5b506103c46004803603602081101561059757600080fd5b50356001600160a01b0316611091565b3480156105b357600080fd5b50610342600480360360408110156105ca57600080fd5b50803590602001351515611219565b3480156105e557600080fd5b506103696112ab565b3480156105fa57600080fd5b506103196112cf565b34801561060f57600080fd5b506103c46112df565b34801561062457600080fd5b506103c46004803603602081101561063b57600080fd5b50356001600160a01b031661134d565b34801561065757600080fd5b506103196004803603602081101561066e57600080fd5b50356001600160a01b031661152f565b34801561068a57600080fd5b506103c4600480360360208110156106a157600080fd5b503561154d565b3480156106b457600080fd5b506103c4600480360360208110156106cb57600080fd5b5035151561160d565b3480156106e057600080fd5b50610342600480360360208110156106f757600080fd5b50356001600160a01b0316611683565b34801561071357600080fd5b506103c46116e5565b34801561072857600080fd5b506103c46004803603602081101561073f57600080fd5b50356001600160a01b0316611787565b34801561075b57600080fd5b506103196004803603602081101561077257600080fd5b50356001600160a01b0316611914565b34801561078e57600080fd5b506103c4600480360360208110156107a557600080fd5b50351515611932565b3480156107ba57600080fd5b506103696119a8565b3480156107cf57600080fd5b5061026b6119b7565b3480156107e457600080fd5b50610319600480360360408110156107fb57600080fd5b506001600160a01b038135169060200135611a18565b34801561081d57600080fd5b506103c46004803603602081101561083457600080fd5b5035611a80565b34801561084757600080fd5b506103196004803603604081101561085e57600080fd5b506001600160a01b038135169060200135611b2a565b34801561088057600080fd5b506103c46004803603604081101561089757600080fd5b506001600160a01b0381351690602001351515611b3e565b3480156108bb57600080fd5b506103c4600480360360208110156108d257600080fd5b5035611bc1565b3480156108e557600080fd5b506103c4600480360360208110156108fc57600080fd5b50351515611c6b565b34801561091157600080fd5b506103426004803603604081101561092857600080fd5b506001600160a01b0381358116916020013516611ce1565b34801561094c57600080fd5b506103c46004803603602081101561096357600080fd5b50356001600160a01b0316611d0c565b34801561097f57600080fd5b506103c4611e04565b34801561099457600080fd5b50610342611e66565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a295780601f106109fe57610100808354040283529160200191610a29565b820191906000526020600020905b815481529060010190602001808311610a0c57829003601f168201915b5050505050905090565b6000610a47610a40611e6a565b8484611e6e565b5060015b92915050565b600e5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5490565b610a89611e6a565b6000546001600160a01b03908116911614610ad9576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b633b9aca00811015610b1c5760405162461bcd60e51b815260040180806020018281038252602c815260200180613475602c913960400191505060405180910390fd5b601955565b610b29611e6a565b6000546001600160a01b03908116911614610b79576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b633b9aca00811015610bbc5760405162461bcd60e51b815260040180806020018281038252603e8152602001806135e4603e913960400191505060405180910390fd5b601a55565b610bc9611e6a565b6000546001600160a01b03908116911614610c19576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60188054911515600160c01b0260ff60c01b19909216919091179055565b6000610c44848484611f5a565b610cb484610c50611e6a565b610caf856040518060600160405280602881526020016134e4602891396001600160a01b038a16600090815260056020526040812090610c8e611e6a565b6001600160a01b031681526020810191909152604001600020549190612566565b611e6e565b5060019392505050565b6000600d54821115610d015760405162461bcd60e51b815260040180806020018281038252602a8152602001806133ac602a913960400191505060405180910390fd5b6000610d0b6125fd565b9050610d178382612620565b9150505b919050565b610d28611e6a565b6000546001600160a01b03908116911614610d78576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b610d8a30610d846119a8565b83611e6e565b610d9c30610d966119a8565b83611f5a565b50565b60115460ff1690565b610db0611e6a565b6000546001600160a01b03908116911614610e00576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16610e6d576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600954811015610f6557816001600160a01b031660098281548110610e9157fe5b6000918252602090912001546001600160a01b03161415610f5d57600980546000198101908110610ebe57fe5b600091825260209091200154600980546001600160a01b039092169183908110610ee457fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600890925220805460ff191690556009805480610f3657fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610f65565b600101610e70565b5050565b6000610a47610f76611e6a565b84610caf8560056000610f87611e6a565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612669565b6000610fc1611e6a565b6001600160a01b03811660009081526008602052604090205490915060ff161561101c5760405162461bcd60e51b815260040180806020018281038252602c815260200180613644602c913960400191505060405180910390fd5b6000611027836126c3565b505050506001600160a01b03841660009081526003602052604090205491925061105391905082612733565b6001600160a01b038316600090815260036020526040902055600d546110799082612733565b600d55600e546110899084612669565b600e55505050565b611099611e6a565b6000546001600160a01b039081169116146110e9576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156111455760405162461bcd60e51b81526004018080602001828103825260248152602001806135776024913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff16156111b3576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000600c54831115611272576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81611291576000611282846126c3565b50939550610a4b945050505050565b600061129c846126c3565b50929550610a4b945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601854600160a81b900460ff1681565b6112e7611e6a565b6000546001600160a01b03908116911614611337576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b600061134230611683565b9050610d9c81612775565b611355611e6a565b6000546001600160a01b039081169116146113a5576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156114015760405162461bcd60e51b81526004018080602001828103825260228152602001806136226022913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff161561146f576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156114c9576001600160a01b0381166000908152600360205260409020546114af90610cbe565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b611555611e6a565b6000546001600160a01b039081169116146115a5576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b600181101580156115b7575060318111155b611608576040805162461bcd60e51b815260206004820152601c60248201527f7461784665652073686f756c6420626520696e2031202d2034392e3900000000604482015290519081900360640190fd5b601255565b611615611e6a565b6000546001600160a01b03908116911614611665576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60188054911515600160b01b0260ff60b01b19909216919091179055565b6001600160a01b03811660009081526008602052604081205460ff16156116c357506001600160a01b038116600090815260046020526040902054610d1b565b6001600160a01b038216600090815260036020526040902054610a4b90610cbe565b6116ed611e6a565b6000546001600160a01b0390811691161461173d576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61178f611e6a565b6000546001600160a01b039081169116146117df576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff1661184c576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600b54811015610f6557816001600160a01b0316600b828154811061187057fe5b6000918252602090912001546001600160a01b0316141561190c57600b8054600019810190811061189d57fe5b600091825260209091200154600b80546001600160a01b0390921691839081106118c357fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600a90915260409020805460ff19169055600b805480610f3657fe5b60010161184f565b6001600160a01b031660009081526008602052604090205460ff1690565b61193a611e6a565b6000546001600160a01b0390811691161461198a576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60188054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031690565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a295780601f106109fe57610100808354040283529160200191610a29565b6000610a47611a25611e6a565b84610caf856040518060600160405280602581526020016136706025913960056000611a4f611e6a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612566565b611a88611e6a565b6000546001600160a01b03908116911614611ad8576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60018110158015611aea575060318111155b611b255760405162461bcd60e51b81526004018080602001828103825260228152602001806134c26022913960400191505060405180910390fd5b601355565b6000610a47611b37611e6a565b8484611f5a565b611b46611e6a565b6000546001600160a01b03908116911614611b96576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b611bc9611e6a565b6000546001600160a01b03908116911614611c19576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60018110158015611c2b575060318111155b611c665760405162461bcd60e51b81526004018080602001828103825260228152602001806135556022913960400191505060405180910390fd5b601455565b611c73611e6a565b6000546001600160a01b03908116911614611cc3576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60188054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611d14611e6a565b6000546001600160a01b03908116911614611d64576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b6001600160a01b038116611da95760405162461bcd60e51b81526004018080602001828103825260268152602001806133d66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611e0c611e6a565b6000546001600160a01b03908116911614611e5c576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b47610d9c8161298c565b4790565b3390565b6001600160a01b038316611eb35760405162461bcd60e51b81526004018080602001828103825260248152602001806135c06024913960400191505060405180910390fd5b6001600160a01b038216611ef85760405162461bcd60e51b81526004018080602001828103825260228152602001806133fc6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611f9f5760405162461bcd60e51b815260040180806020018281038252602581526020018061359b6025913960400191505060405180910390fd5b6001600160a01b038216611fe45760405162461bcd60e51b81526004018080602001828103825260238152602001806133896023913960400191505060405180910390fd5b600081116120235760405162461bcd60e51b815260040180806020018281038252602981526020018061352c6029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561209657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156120bb57506001600160a01b03821660009081526006602052604090205460ff16155b80156120d05750601854600160b01b900460ff165b1561214c57601854600160c01b900460ff1661212d576040805162461bcd60e51b8152602060048201526017602482015276151c98591a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604090206050420190555b6001600160a01b0383166000908152600a602052604090205460ff16156122f457601854600160c01b900460ff166121c5576040805162461bcd60e51b8152602060048201526017602482015276151c98591a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205442116121e957600080fd5b60006121f430611683565b9050601954811061220457506019545b601854600160a01b900460ff161580156122275750601854600160a81b900460ff165b801561223c5750601854600160b81b900460ff165b801561227a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b1561228d57601a81905561228d816129c6565b6001600160a01b03841660009081526006602052604090205460019060ff16806122cf57506001600160a01b03841660009081526006602052604090205460ff165b156122d8575060005b601b546122f19086906001600160a01b03168584612adc565b50505b6122fc6119a8565b6001600160a01b0316836001600160a01b03161415801561234f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15612464576019548111156123955760405162461bcd60e51b815260040180806020018281038252602881526020018061344d6028913960400191505060405180910390fd5b6019546123ab826123a585611683565b90612669565b11156123e85760405162461bcd60e51b815260040180806020018281038252602f81526020018061341e602f913960400191505060405180910390fd5b601854600160c01b900460ff16612440576040805162461bcd60e51b8152602060048201526017602482015276151c98591a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6001600160a01b038316600090815260076020526040902054421161246457600080fd5b600061246f30611683565b9050601954811061247f57506019545b601854600160a01b900460ff161580156124a25750601854600160a81b900460ff165b80156124b75750601854600160b81b900460ff165b80156124f557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b1561250857601a819055612508816129c6565b6001600160a01b03841660009081526006602052604090205460019060ff168061254a57506001600160a01b03841660009081526006602052604090205460ff165b15612553575060005b61255f85858584612adc565b5050505050565b600081848411156125f55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125ba5781810151838201526020016125a2565b50505050905090810190601f1680156125e75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061260a612c50565b90925090506126198282612620565b9250505090565b600061266283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612db3565b9392505050565b600082820183811015612662576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006126f48a6012546126ef60145460135461266990919063ffffffff16565b612e18565b92509250925060006127046125fd565b905060008060006127168e8786612e67565b919e509c509a509598509396509194505050505091939550919395565b600061266283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612566565b604080516002808252606080830184529260208301908036833701905050905030816000815181106127a357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561281c57600080fd5b505afa158015612830573d6000803e3d6000fd5b505050506040513d602081101561284657600080fd5b505181518290600190811061285757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506128a2307f000000000000000000000000000000000000000000000000000000000000000084611e6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561294757818101518382015260200161292f565b505050509050019650505050505050600060405180830381600087803b15801561297057600080fd5b505af1158015612984573d6000803e3d6000fd5b505050505050565b601b546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610f65573d6000803e3d6000fd5b6018805460ff60a01b1916600160a01b179055601454601354600091612a03916129ef91612669565b6013546129fd908590612ea3565b90612620565b90506000612a118383612733565b90506000612a20826002612620565b90506000612a2e8383612733565b9050476000612a3d8487612669565b9050612a4881612775565b6000612a544784612733565b90506000612a66836129fd8489612ea3565b9050612a728582612efc565b604080518781526020810183905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1612ac4612abf8383612733565b61298c565b50506018805460ff60a01b1916905550505050505050565b80612ae957612ae9612ffa565b6001600160a01b03841660009081526008602052604090205460ff168015612b2a57506001600160a01b03831660009081526008602052604090205460ff16155b15612b3f57612b3a848484613043565b612c3d565b6001600160a01b03841660009081526008602052604090205460ff16158015612b8057506001600160a01b03831660009081526008602052604090205460ff165b15612b9057612b3a848484613167565b6001600160a01b03841660009081526008602052604090205460ff16158015612bd257506001600160a01b03831660009081526008602052604090205460ff16155b15612be257612b3a848484613210565b6001600160a01b03841660009081526008602052604090205460ff168015612c2257506001600160a01b03831660009081526008602052604090205460ff165b15612c3257612b3a848484613254565b612c3d848484613210565b80612c4a57612c4a6132c7565b50505050565b600d54600c546000918291825b600954811015612d8157826003600060098481548110612c7957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cde5750816004600060098481548110612cb757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612cf557600d54600c5494509450505050612daf565b612d356003600060098481548110612d0957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612733565b9250612d776004600060098481548110612d4b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612733565b9150600101612c5d565b50600c54600d54612d9191612620565b821015612da957600d54600c54935093505050612daf565b90925090505b9091565b60008183612e025760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125ba5781810151838201526020016125a2565b506000838581612e0e57fe5b0495945050505050565b6000808080612e2c60646129fd8989612ea3565b90506000612e3f60646129fd8a89612ea3565b90506000612e5787612e518b86612733565b90612733565b9992985090965090945050505050565b6000808080612e768786612ea3565b90506000612e848787612ea3565b90506000612e928383612733565b929992985090965090945050505050565b600082612eb257506000610a4b565b82820282848281612ebf57fe5b04146126625760405162461bcd60e51b81526004018080602001828103825260218152602001806134a16021913960400191505060405180910390fd5b612f27307f000000000000000000000000000000000000000000000000000000000000000084611e6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080612f646119a8565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b158015612fcf57600080fd5b505af1158015612fe3573d6000803e3d6000fd5b50505050506040513d6060811015612c4a57600080fd5b60125415801561300a5750601354155b80156130165750601454155b1561302057613041565b60128054601555601380546016556014805460175560009283905590829055555b565b600080600080600080613055876126c3565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506130879088612733565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130b69087612733565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130e59086612669565b6001600160a01b038916600090815260036020526040902055613107816132db565b6131118483613364565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613179876126c3565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131ab9087612733565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131e19084612669565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130e59086612669565b600080600080600080613222876126c3565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130b69087612733565b600080600080600080613266876126c3565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506132989088612733565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131ab9087612733565b601554601255601654601355601754601455565b60006132e56125fd565b905060006132f38383612ea3565b306000908152600360205260409020549091506133109082612669565b3060009081526003602090815260408083209390935560089052205460ff161561335f573060009081526004602052604090205461334e9084612669565b306000908152600460205260409020555b505050565b600d546133719083612733565b600d55600e546133819082612669565b600e55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416c726561647920626f75676874206d61785478416d6f756e742c20776169742074696c6c20636865636b206f66665472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d61726b6574696e674665652073686f756c6420626520696e2031202d2034392e3945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f6c69717569646974794665652073686f756c6420626520696e2031202d2034392e3957652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200e3b4087bd908478af2e02de1c1fb332292a197ad5eb3ed950b4b243c5cc9e1164736f6c634300060c0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c806352390c021161013957806395d89b41116100b6578063bcd6d4461161007a578063bcd6d446146108af578063c49b9a80146108d9578063dd62ed3e14610905578063f2fde38b14610940578063f429389014610973578063f815a8421461098857610251565b806395d89b41146107c3578063a457c2d7146107d8578063a52fe9bb14610811578063a9059cbb1461083b578063af9549e01461087457610251565b8063715018a6116100fd578063715018a6146107075780637ded4d6a1461071c57806388f820201461074f5780638b42c8a6146107825780638da5cb5b146107ae57610251565b806352390c02146106185780635342acb41461064b5780635880b8731461067e5780635932ead1146106a857806370a08231146106d457610251565b806330599fc5116101c75780634303443d1161018b5780634303443d146105745780634549b039146105a757806349bd5a5e146105d95780634a74bb02146105ee57806351bc3c851461060357610251565b806330599fc514610489578063313ce567146104b35780633685d419146104de57806339509351146105115780633bd5d1731461054a57610251565b80631bbae6e01161020e5780631bbae6e01461039a5780631decaadc146103c657806321c03a97146103f057806323b872dd1461041c5780632d8381191461045f57610251565b806306fdde0314610256578063095ea7b3146102e057806313114a9d1461032d5780631694505e1461035457806318160ddd1461038557610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b61099d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a557818101518382015260200161028d565b50505050905090810190601f1680156102d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ec57600080fd5b506103196004803603604081101561030357600080fd5b506001600160a01b038135169060200135610a33565b604080519115158252519081900360200190f35b34801561033957600080fd5b50610342610a51565b60408051918252519081900360200190f35b34801561036057600080fd5b50610369610a57565b604080516001600160a01b039092168252519081900360200190f35b34801561039157600080fd5b50610342610a7b565b3480156103a657600080fd5b506103c4600480360360208110156103bd57600080fd5b5035610a81565b005b3480156103d257600080fd5b506103c4600480360360208110156103e957600080fd5b5035610b21565b3480156103fc57600080fd5b506103c46004803603602081101561041357600080fd5b50351515610bc1565b34801561042857600080fd5b506103196004803603606081101561043f57600080fd5b506001600160a01b03813581169160208101359091169060400135610c37565b34801561046b57600080fd5b506103426004803603602081101561048257600080fd5b5035610cbe565b34801561049557600080fd5b506103c4600480360360208110156104ac57600080fd5b5035610d20565b3480156104bf57600080fd5b506104c8610d9f565b6040805160ff9092168252519081900360200190f35b3480156104ea57600080fd5b506103c46004803603602081101561050157600080fd5b50356001600160a01b0316610da8565b34801561051d57600080fd5b506103196004803603604081101561053457600080fd5b506001600160a01b038135169060200135610f69565b34801561055657600080fd5b506103c46004803603602081101561056d57600080fd5b5035610fb7565b34801561058057600080fd5b506103c46004803603602081101561059757600080fd5b50356001600160a01b0316611091565b3480156105b357600080fd5b50610342600480360360408110156105ca57600080fd5b50803590602001351515611219565b3480156105e557600080fd5b506103696112ab565b3480156105fa57600080fd5b506103196112cf565b34801561060f57600080fd5b506103c46112df565b34801561062457600080fd5b506103c46004803603602081101561063b57600080fd5b50356001600160a01b031661134d565b34801561065757600080fd5b506103196004803603602081101561066e57600080fd5b50356001600160a01b031661152f565b34801561068a57600080fd5b506103c4600480360360208110156106a157600080fd5b503561154d565b3480156106b457600080fd5b506103c4600480360360208110156106cb57600080fd5b5035151561160d565b3480156106e057600080fd5b50610342600480360360208110156106f757600080fd5b50356001600160a01b0316611683565b34801561071357600080fd5b506103c46116e5565b34801561072857600080fd5b506103c46004803603602081101561073f57600080fd5b50356001600160a01b0316611787565b34801561075b57600080fd5b506103196004803603602081101561077257600080fd5b50356001600160a01b0316611914565b34801561078e57600080fd5b506103c4600480360360208110156107a557600080fd5b50351515611932565b3480156107ba57600080fd5b506103696119a8565b3480156107cf57600080fd5b5061026b6119b7565b3480156107e457600080fd5b50610319600480360360408110156107fb57600080fd5b506001600160a01b038135169060200135611a18565b34801561081d57600080fd5b506103c46004803603602081101561083457600080fd5b5035611a80565b34801561084757600080fd5b506103196004803603604081101561085e57600080fd5b506001600160a01b038135169060200135611b2a565b34801561088057600080fd5b506103c46004803603604081101561089757600080fd5b506001600160a01b0381351690602001351515611b3e565b3480156108bb57600080fd5b506103c4600480360360208110156108d257600080fd5b5035611bc1565b3480156108e557600080fd5b506103c4600480360360208110156108fc57600080fd5b50351515611c6b565b34801561091157600080fd5b506103426004803603604081101561092857600080fd5b506001600160a01b0381358116916020013516611ce1565b34801561094c57600080fd5b506103c46004803603602081101561096357600080fd5b50356001600160a01b0316611d0c565b34801561097f57600080fd5b506103c4611e04565b34801561099457600080fd5b50610342611e66565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a295780601f106109fe57610100808354040283529160200191610a29565b820191906000526020600020905b815481529060010190602001808311610a0c57829003601f168201915b5050505050905090565b6000610a47610a40611e6a565b8484611e6e565b5060015b92915050565b600e5490565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600c5490565b610a89611e6a565b6000546001600160a01b03908116911614610ad9576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b633b9aca00811015610b1c5760405162461bcd60e51b815260040180806020018281038252602c815260200180613475602c913960400191505060405180910390fd5b601955565b610b29611e6a565b6000546001600160a01b03908116911614610b79576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b633b9aca00811015610bbc5760405162461bcd60e51b815260040180806020018281038252603e8152602001806135e4603e913960400191505060405180910390fd5b601a55565b610bc9611e6a565b6000546001600160a01b03908116911614610c19576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60188054911515600160c01b0260ff60c01b19909216919091179055565b6000610c44848484611f5a565b610cb484610c50611e6a565b610caf856040518060600160405280602881526020016134e4602891396001600160a01b038a16600090815260056020526040812090610c8e611e6a565b6001600160a01b031681526020810191909152604001600020549190612566565b611e6e565b5060019392505050565b6000600d54821115610d015760405162461bcd60e51b815260040180806020018281038252602a8152602001806133ac602a913960400191505060405180910390fd5b6000610d0b6125fd565b9050610d178382612620565b9150505b919050565b610d28611e6a565b6000546001600160a01b03908116911614610d78576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b610d8a30610d846119a8565b83611e6e565b610d9c30610d966119a8565b83611f5a565b50565b60115460ff1690565b610db0611e6a565b6000546001600160a01b03908116911614610e00576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16610e6d576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600954811015610f6557816001600160a01b031660098281548110610e9157fe5b6000918252602090912001546001600160a01b03161415610f5d57600980546000198101908110610ebe57fe5b600091825260209091200154600980546001600160a01b039092169183908110610ee457fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600890925220805460ff191690556009805480610f3657fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610f65565b600101610e70565b5050565b6000610a47610f76611e6a565b84610caf8560056000610f87611e6a565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612669565b6000610fc1611e6a565b6001600160a01b03811660009081526008602052604090205490915060ff161561101c5760405162461bcd60e51b815260040180806020018281038252602c815260200180613644602c913960400191505060405180910390fd5b6000611027836126c3565b505050506001600160a01b03841660009081526003602052604090205491925061105391905082612733565b6001600160a01b038316600090815260036020526040902055600d546110799082612733565b600d55600e546110899084612669565b600e55505050565b611099611e6a565b6000546001600160a01b039081169116146110e9576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156111455760405162461bcd60e51b81526004018080602001828103825260248152602001806135776024913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff16156111b3576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000600c54831115611272576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81611291576000611282846126c3565b50939550610a4b945050505050565b600061129c846126c3565b50929550610a4b945050505050565b7f000000000000000000000000d1f1c66a5ab98edda8a02bb74287d9004a16afff81565b601854600160a81b900460ff1681565b6112e7611e6a565b6000546001600160a01b03908116911614611337576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b600061134230611683565b9050610d9c81612775565b611355611e6a565b6000546001600160a01b039081169116146113a5576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156114015760405162461bcd60e51b81526004018080602001828103825260228152602001806136226022913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff161561146f576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156114c9576001600160a01b0381166000908152600360205260409020546114af90610cbe565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b611555611e6a565b6000546001600160a01b039081169116146115a5576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b600181101580156115b7575060318111155b611608576040805162461bcd60e51b815260206004820152601c60248201527f7461784665652073686f756c6420626520696e2031202d2034392e3900000000604482015290519081900360640190fd5b601255565b611615611e6a565b6000546001600160a01b03908116911614611665576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60188054911515600160b01b0260ff60b01b19909216919091179055565b6001600160a01b03811660009081526008602052604081205460ff16156116c357506001600160a01b038116600090815260046020526040902054610d1b565b6001600160a01b038216600090815260036020526040902054610a4b90610cbe565b6116ed611e6a565b6000546001600160a01b0390811691161461173d576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61178f611e6a565b6000546001600160a01b039081169116146117df576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff1661184c576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600b54811015610f6557816001600160a01b0316600b828154811061187057fe5b6000918252602090912001546001600160a01b0316141561190c57600b8054600019810190811061189d57fe5b600091825260209091200154600b80546001600160a01b0390921691839081106118c357fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600a90915260409020805460ff19169055600b805480610f3657fe5b60010161184f565b6001600160a01b031660009081526008602052604090205460ff1690565b61193a611e6a565b6000546001600160a01b0390811691161461198a576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60188054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031690565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a295780601f106109fe57610100808354040283529160200191610a29565b6000610a47611a25611e6a565b84610caf856040518060600160405280602581526020016136706025913960056000611a4f611e6a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612566565b611a88611e6a565b6000546001600160a01b03908116911614611ad8576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60018110158015611aea575060318111155b611b255760405162461bcd60e51b81526004018080602001828103825260228152602001806134c26022913960400191505060405180910390fd5b601355565b6000610a47611b37611e6a565b8484611f5a565b611b46611e6a565b6000546001600160a01b03908116911614611b96576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b611bc9611e6a565b6000546001600160a01b03908116911614611c19576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60018110158015611c2b575060318111155b611c665760405162461bcd60e51b81526004018080602001828103825260228152602001806135556022913960400191505060405180910390fd5b601455565b611c73611e6a565b6000546001600160a01b03908116911614611cc3576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b60188054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611d14611e6a565b6000546001600160a01b03908116911614611d64576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b6001600160a01b038116611da95760405162461bcd60e51b81526004018080602001828103825260268152602001806133d66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611e0c611e6a565b6000546001600160a01b03908116911614611e5c576040805162461bcd60e51b8152602060048201819052602482015260008051602061350c833981519152604482015290519081900360640190fd5b47610d9c8161298c565b4790565b3390565b6001600160a01b038316611eb35760405162461bcd60e51b81526004018080602001828103825260248152602001806135c06024913960400191505060405180910390fd5b6001600160a01b038216611ef85760405162461bcd60e51b81526004018080602001828103825260228152602001806133fc6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611f9f5760405162461bcd60e51b815260040180806020018281038252602581526020018061359b6025913960400191505060405180910390fd5b6001600160a01b038216611fe45760405162461bcd60e51b81526004018080602001828103825260238152602001806133896023913960400191505060405180910390fd5b600081116120235760405162461bcd60e51b815260040180806020018281038252602981526020018061352c6029913960400191505060405180910390fd5b7f000000000000000000000000d1f1c66a5ab98edda8a02bb74287d9004a16afff6001600160a01b0316836001600160a01b031614801561209657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156120bb57506001600160a01b03821660009081526006602052604090205460ff16155b80156120d05750601854600160b01b900460ff165b1561214c57601854600160c01b900460ff1661212d576040805162461bcd60e51b8152602060048201526017602482015276151c98591a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604090206050420190555b6001600160a01b0383166000908152600a602052604090205460ff16156122f457601854600160c01b900460ff166121c5576040805162461bcd60e51b8152602060048201526017602482015276151c98591a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205442116121e957600080fd5b60006121f430611683565b9050601954811061220457506019545b601854600160a01b900460ff161580156122275750601854600160a81b900460ff165b801561223c5750601854600160b81b900460ff165b801561227a57507f000000000000000000000000d1f1c66a5ab98edda8a02bb74287d9004a16afff6001600160a01b0316846001600160a01b031614155b1561228d57601a81905561228d816129c6565b6001600160a01b03841660009081526006602052604090205460019060ff16806122cf57506001600160a01b03841660009081526006602052604090205460ff165b156122d8575060005b601b546122f19086906001600160a01b03168584612adc565b50505b6122fc6119a8565b6001600160a01b0316836001600160a01b03161415801561234f57507f000000000000000000000000d1f1c66a5ab98edda8a02bb74287d9004a16afff6001600160a01b0316836001600160a01b031614155b15612464576019548111156123955760405162461bcd60e51b815260040180806020018281038252602881526020018061344d6028913960400191505060405180910390fd5b6019546123ab826123a585611683565b90612669565b11156123e85760405162461bcd60e51b815260040180806020018281038252602f81526020018061341e602f913960400191505060405180910390fd5b601854600160c01b900460ff16612440576040805162461bcd60e51b8152602060048201526017602482015276151c98591a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6001600160a01b038316600090815260076020526040902054421161246457600080fd5b600061246f30611683565b9050601954811061247f57506019545b601854600160a01b900460ff161580156124a25750601854600160a81b900460ff165b80156124b75750601854600160b81b900460ff165b80156124f557507f000000000000000000000000d1f1c66a5ab98edda8a02bb74287d9004a16afff6001600160a01b0316846001600160a01b031614155b1561250857601a819055612508816129c6565b6001600160a01b03841660009081526006602052604090205460019060ff168061254a57506001600160a01b03841660009081526006602052604090205460ff165b15612553575060005b61255f85858584612adc565b5050505050565b600081848411156125f55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125ba5781810151838201526020016125a2565b50505050905090810190601f1680156125e75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061260a612c50565b90925090506126198282612620565b9250505090565b600061266283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612db3565b9392505050565b600082820183811015612662576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006126f48a6012546126ef60145460135461266990919063ffffffff16565b612e18565b92509250925060006127046125fd565b905060008060006127168e8786612e67565b919e509c509a509598509396509194505050505091939550919395565b600061266283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612566565b604080516002808252606080830184529260208301908036833701905050905030816000815181106127a357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561281c57600080fd5b505afa158015612830573d6000803e3d6000fd5b505050506040513d602081101561284657600080fd5b505181518290600190811061285757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506128a2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e6e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561294757818101518382015260200161292f565b505050509050019650505050505050600060405180830381600087803b15801561297057600080fd5b505af1158015612984573d6000803e3d6000fd5b505050505050565b601b546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610f65573d6000803e3d6000fd5b6018805460ff60a01b1916600160a01b179055601454601354600091612a03916129ef91612669565b6013546129fd908590612ea3565b90612620565b90506000612a118383612733565b90506000612a20826002612620565b90506000612a2e8383612733565b9050476000612a3d8487612669565b9050612a4881612775565b6000612a544784612733565b90506000612a66836129fd8489612ea3565b9050612a728582612efc565b604080518781526020810183905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1612ac4612abf8383612733565b61298c565b50506018805460ff60a01b1916905550505050505050565b80612ae957612ae9612ffa565b6001600160a01b03841660009081526008602052604090205460ff168015612b2a57506001600160a01b03831660009081526008602052604090205460ff16155b15612b3f57612b3a848484613043565b612c3d565b6001600160a01b03841660009081526008602052604090205460ff16158015612b8057506001600160a01b03831660009081526008602052604090205460ff165b15612b9057612b3a848484613167565b6001600160a01b03841660009081526008602052604090205460ff16158015612bd257506001600160a01b03831660009081526008602052604090205460ff16155b15612be257612b3a848484613210565b6001600160a01b03841660009081526008602052604090205460ff168015612c2257506001600160a01b03831660009081526008602052604090205460ff165b15612c3257612b3a848484613254565b612c3d848484613210565b80612c4a57612c4a6132c7565b50505050565b600d54600c546000918291825b600954811015612d8157826003600060098481548110612c7957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cde5750816004600060098481548110612cb757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612cf557600d54600c5494509450505050612daf565b612d356003600060098481548110612d0957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612733565b9250612d776004600060098481548110612d4b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612733565b9150600101612c5d565b50600c54600d54612d9191612620565b821015612da957600d54600c54935093505050612daf565b90925090505b9091565b60008183612e025760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125ba5781810151838201526020016125a2565b506000838581612e0e57fe5b0495945050505050565b6000808080612e2c60646129fd8989612ea3565b90506000612e3f60646129fd8a89612ea3565b90506000612e5787612e518b86612733565b90612733565b9992985090965090945050505050565b6000808080612e768786612ea3565b90506000612e848787612ea3565b90506000612e928383612733565b929992985090965090945050505050565b600082612eb257506000610a4b565b82820282848281612ebf57fe5b04146126625760405162461bcd60e51b81526004018080602001828103825260218152602001806134a16021913960400191505060405180910390fd5b612f27307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e6e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080612f646119a8565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b158015612fcf57600080fd5b505af1158015612fe3573d6000803e3d6000fd5b50505050506040513d6060811015612c4a57600080fd5b60125415801561300a5750601354155b80156130165750601454155b1561302057613041565b60128054601555601380546016556014805460175560009283905590829055555b565b600080600080600080613055876126c3565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506130879088612733565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130b69087612733565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130e59086612669565b6001600160a01b038916600090815260036020526040902055613107816132db565b6131118483613364565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613179876126c3565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131ab9087612733565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131e19084612669565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130e59086612669565b600080600080600080613222876126c3565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130b69087612733565b600080600080600080613266876126c3565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506132989088612733565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131ab9087612733565b601554601255601654601355601754601455565b60006132e56125fd565b905060006132f38383612ea3565b306000908152600360205260409020549091506133109082612669565b3060009081526003602090815260408083209390935560089052205460ff161561335f573060009081526004602052604090205461334e9084612669565b306000908152600460205260409020555b505050565b600d546133719083612733565b600d55600e546133819082612669565b600e55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416c726561647920626f75676874206d61785478416d6f756e742c20776169742074696c6c20636865636b206f66665472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d61726b6574696e674665652073686f756c6420626520696e2031202d2034392e3945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f6c69717569646974794665652073686f756c6420626520696e2031202d2034392e3957652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200e3b4087bd908478af2e02de1c1fb332292a197ad5eb3ed950b4b243c5cc9e1164736f6c634300060c0033

Deployed Bytecode Sourcemap

14148:26646:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20013:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21300:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21300:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;22566:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15546:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15546:51:0;;;;;;;;;;;;;;20290:95;;;;;;;;;;;;;:::i;40390:201::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40390:201:0;;:::i;:::-;;40073:309;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40073:309:0;;:::i;20647:115::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20647:115:0;;;;:::i;21469:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21469:313:0;;;;;;;;;;;;;;;;;:::i;23490:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23490:253:0;;:::i;40599:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40599:192:0;;:::i;20199:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24205:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24205:479:0;-1:-1:-1;;;;;24205:479:0;;:::i;21790:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21790:218:0;;;;;;;;:::i;22661:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22661:377:0;;:::i;24692:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24692:352:0;-1:-1:-1;;;;;24692:352:0;;:::i;23046:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23046:436:0;;;;;;;;;:::i;15604:38::-;;;;;;;;;;;;;:::i;15687:41::-;;;;;;;;;;;;;:::i;32706:156::-;;;;;;;;;;;;;:::i;23751:446::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23751:446:0;-1:-1:-1;;;;;23751:446:0;;:::i;26081:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26081:123:0;-1:-1:-1;;;;;26081:123:0;;:::i;39452:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39452:171:0;;:::i;20391:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20391:103:0;;;;:::i;20768:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20768:198:0;-1:-1:-1;;;;;20768:198:0;;:::i;5779:148::-;;;;;;;;;;;;;:::i;25052:500::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25052:500:0;-1:-1:-1;;;;;25052:500:0;;:::i;22293:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22293:120:0;-1:-1:-1;;;;;22293:120:0;;:::i;20502:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20502:139:0;;;;:::i;5554:79::-;;;;;;;;;;;;;:::i;20104:87::-;;;;;;;;;;;;;:::i;22016:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22016:269:0;;;;;;;;:::i;39631:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39631:213:0;;:::i;20974:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20974:167:0;;;;;;;;:::i;22421:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22421:137:0;;;;;;;;;;:::i;39852:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39852:213:0;;:::i;33037:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33037:148:0;;;;:::i;21149:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21149:143:0;;;;;;;;;;:::i;5940:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5940:244:0;-1:-1:-1;;;;;5940:244:0;;:::i;32870:159::-;;;;;;;;;;;;;:::i;39334:110::-;;;;;;;;;;;;;:::i;20013:83::-;20083:5;20076:12;;;;;;;;-1:-1:-1;;20076:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20050:13;;20076:12;;20083:5;;20076:12;;20083:5;20076:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20013:83;:::o;21300:161::-;21375:4;21392:39;21401:12;:10;:12::i;:::-;21415:7;21424:6;21392:8;:39::i;:::-;-1:-1:-1;21449:4:0;21300:161;;;;;:::o;22566:87::-;22635:10;;22566:87;:::o;15546:51::-;;;:::o;20290:95::-;20370:7;;20290:95;:::o;40390:201::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;40491:5:::1;40476:11;:20;;40468:78;;;;-1:-1:-1::0;;;40468:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40557:12;:26:::0;40390:201::o;40073:309::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;40228:5:::1;40195:29;:38;;40187:114;;;;-1:-1:-1::0;;;40187:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40312:30;:62:::0;40073:309::o;20647:115::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;20725:11:::1;:29:::0;;;::::1;;-1:-1:-1::0;;;20725:29:0::1;-1:-1:-1::0;;;;20725:29:0;;::::1;::::0;;;::::1;::::0;;20647:115::o;21469:313::-;21567:4;21584:36;21594:6;21602:9;21613:6;21584:9;:36::i;:::-;21631:121;21640:6;21648:12;:10;:12::i;:::-;21662:89;21700:6;21662:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21662:19:0;;;;;;:11;:19;;;;;;21682:12;:10;:12::i;:::-;-1:-1:-1;;;;;21662:33:0;;;;;;;;;;;;-1:-1:-1;21662:33:0;;;:89;:37;:89::i;:::-;21631:8;:121::i;:::-;-1:-1:-1;21770:4:0;21469:313;;;;;:::o;23490:253::-;23556:7;23595;;23584;:18;;23576:73;;;;-1:-1:-1;;;23576:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23660:19;23683:10;:8;:10::i;:::-;23660:33;-1:-1:-1;23711:24:0;:7;23660:33;23711:11;:24::i;:::-;23704:31;;;23490:253;;;;:::o;40599:192::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;40681:45:::1;40698:4;40705:7;:5;:7::i;:::-;40714:11;40681:8;:45::i;:::-;40737:46;40755:4;40762:7;:5;:7::i;:::-;40771:11;40737:9;:46::i;:::-;40599:192:::0;:::o;20199:83::-;20265:9;;;;20199:83;:::o;24205:479::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24287:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24279:60;;;::::0;;-1:-1:-1;;;24279:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24355:9;24350:327;24374:9;:16:::0;24370:20;::::1;24350:327;;;24432:7;-1:-1:-1::0;;;;;24416:23:0::1;:9;24426:1;24416:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24416:12:0::1;:23;24412:254;;;24475:9;24485:16:::0;;-1:-1:-1;;24485:20:0;;;24475:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24460:9:::1;:12:::0;;-1:-1:-1;;;;;24475:31:0;;::::1;::::0;24470:1;;24460:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24460:46:0::1;-1:-1:-1::0;;;;;24460:46:0;;::::1;;::::0;;24525:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24564:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24564:28:0::1;::::0;;24611:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24611:15:0;;;;;-1:-1:-1;;;;;;24611:15:0::1;::::0;;;;;24645:5:::1;;24412:254;24392:3;;24350:327;;;;24205:479:::0;:::o;21790:218::-;21878:4;21895:83;21904:12;:10;:12::i;:::-;21918:7;21927:50;21966:10;21927:11;:25;21939:12;:10;:12::i;:::-;-1:-1:-1;;;;;21927:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21927:25:0;;;:34;;;;;;;;;;;:38;:50::i;22661:377::-;22713:14;22730:12;:10;:12::i;:::-;-1:-1:-1;;;;;22762:19:0;;;;;;:11;:19;;;;;;22713:29;;-1:-1:-1;22762:19:0;;22761:20;22753:77;;;;-1:-1:-1;;;22753:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22842:15;22866:19;22877:7;22866:10;:19::i;:::-;-1:-1:-1;;;;;;;;;22914:15:0;;;;;;:7;:15;;;;;;22841:44;;-1:-1:-1;22914:28:0;;:15;-1:-1:-1;22841:44:0;22914:19;:28::i;:::-;-1:-1:-1;;;;;22896:15:0;;;;;;:7;:15;;;;;:46;22963:7;;:20;;22975:7;22963:11;:20::i;:::-;22953:7;:30;23007:10;;:23;;23022:7;23007:14;:23::i;:::-;22994:10;:36;-1:-1:-1;;;22661:377:0:o;24692:352::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;24787:42:::1;-1:-1:-1::0;;;;;24776:53:0;::::1;;;24768:102;;;;-1:-1:-1::0;;;24768:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;24890:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;24889:27;24881:70;;;::::0;;-1:-1:-1;;;24881:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24962:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;24962:33:0::1;24991:4;24962:33:::0;;::::1;::::0;;;25006:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25006:30:0::1;::::0;;::::1;::::0;;24692:352::o;23046:436::-;23136:7;23175;;23164;:18;;23156:62;;;;;-1:-1:-1;;;23156:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23234:17;23229:246;;23269:15;23293:19;23304:7;23293:10;:19::i;:::-;-1:-1:-1;23268:44:0;;-1:-1:-1;23327:14:0;;-1:-1:-1;;;;;23327:14:0;23229:246;23376:23;23407:19;23418:7;23407:10;:19::i;:::-;-1:-1:-1;23374:52:0;;-1:-1:-1;23441:22:0;;-1:-1:-1;;;;;23441:22:0;15604:38;;;:::o;15687:41::-;;;-1:-1:-1;;;15687:41:0;;;;;:::o;32706:156::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;32760:23:::1;32786:24;32804:4;32786:9;:24::i;:::-;32760:50;;32821:33;32838:15;32821:16;:33::i;23751:446::-:0;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;23846:42:::1;-1:-1:-1::0;;;;;23835:53:0;::::1;;;23827:100;;;;-1:-1:-1::0;;;23827:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;23947:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23946:21;23938:61;;;::::0;;-1:-1:-1;;;23938:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24013:16:0;::::1;24032:1;24013:16:::0;;;:7:::1;:16;::::0;;;;;:20;24010:108:::1;;-1:-1:-1::0;;;;;24089:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24069:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24050:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24010:108:::1;-1:-1:-1::0;;;;;24128:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24128:27:0::1;24151:4;24128:27:::0;;::::1;::::0;;;24166:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24166:23:0::1;::::0;;::::1;::::0;;23751:446::o;26081:123::-;-1:-1:-1;;;;;26169:27:0;26145:4;26169:27;;;:18;:27;;;;;;;;;26081:123::o;39452:171::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;39538:1:::1;39528:6;:11;;:27;;;;;39553:2;39543:6;:12;;39528:27;39520:68;;;::::0;;-1:-1:-1;;;39520:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;39599:7;:16:::0;39452:171::o;20391:103::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;20463:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;20463:23:0::1;-1:-1:-1::0;;;;20463:23:0;;::::1;::::0;;;::::1;::::0;;20391:103::o;20768:198::-;-1:-1:-1;;;;;20858:20:0;;20834:7;20858:20;;;:11;:20;;;;;;;;20854:49;;;-1:-1:-1;;;;;;20887:16:0;;;;;;:7;:16;;;;;;20880:23;;20854:49;-1:-1:-1;;;;;20941:16:0;;;;;;:7;:16;;;;;;20921:37;;:19;:37::i;5779:148::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;5886:1:::1;5870:6:::0;;5849:40:::1;::::0;-1:-1:-1;;;;;5870:6:0;;::::1;::::0;5849:40:::1;::::0;5886:1;;5849:40:::1;5917:1;5900:19:::0;;-1:-1:-1;;;;;;5900:19:0::1;::::0;;5779:148::o;25052:500::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25141:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;25133:65;;;::::0;;-1:-1:-1;;;25133:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25214:9;25209:336;25233:16;:23:::0;25229:27;::::1;25209:336;;;25305:7;-1:-1:-1::0;;;;;25282:30:0::1;:16;25299:1;25282:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25282:19:0::1;:30;25278:256;;;25355:16;25372:23:::0;;-1:-1:-1;;25372:27:0;;;25355:45;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25333:16:::1;:19:::0;;-1:-1:-1;;;;;25355:45:0;;::::1;::::0;25350:1;;25333:19;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;25333:67:0::1;-1:-1:-1::0;;;;;25333:67:0;;::::1;;::::0;;25419:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;25419:34:0::1;::::0;;25472:16:::1;:22:::0;;;::::1;;;25278:256;25258:3;;25209:336;;22293:120:::0;-1:-1:-1;;;;;22385:20:0;22361:4;22385:20;;;:11;:20;;;;;;;;;22293:120::o;20502:139::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;20592:17:::1;:41:::0;;;::::1;;-1:-1:-1::0;;;20592:41:0::1;-1:-1:-1::0;;;;20592:41:0;;::::1;::::0;;;::::1;::::0;;20502:139::o;5554:79::-;5592:7;5619:6;-1:-1:-1;;;;;5619:6:0;5554:79;:::o;20104:87::-;20176:7;20169:14;;;;;;;;-1:-1:-1;;20169:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20143:13;;20169:14;;20176:7;;20169:14;;20176:7;20169:14;;;;;;;;;;;;;;;;;;;;;;;;22016:269;22109:4;22126:129;22135:12;:10;:12::i;:::-;22149:7;22158:96;22197:15;22158:96;;;;;;;;;;;;;;;;;:11;:25;22170:12;:10;:12::i;:::-;-1:-1:-1;;;;;22158:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22158:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;39631:213::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;39735:1:::1;39719:12;:17;;:39;;;;;39756:2;39740:12;:18;;39719:39;39711:86;;;;-1:-1:-1::0;;;39711:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39808:13;:28:::0;39631:213::o;20974:167::-;21052:4;21069:42;21079:12;:10;:12::i;:::-;21093:9;21104:6;21069:9;:42::i;22421:137::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22512:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;22512:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22421:137::o;39852:213::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;39956:1:::1;39940:12;:17;;:39;;;;;39977:2;39961:12;:18;;39940:39;39932:86;;;;-1:-1:-1::0;;;39932:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40029:13;:28:::0;39852:213::o;33037:148::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;33131:21:::1;:46:::0;;;::::1;;-1:-1:-1::0;;;33131:46:0::1;-1:-1:-1::0;;;;33131:46:0;;::::1;::::0;;;::::1;::::0;;33037:148::o;21149:143::-;-1:-1:-1;;;;;21257:18:0;;;21230:7;21257:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21149:143::o;5940:244::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6029:22:0;::::1;6021:73;;;;-1:-1:-1::0;;;6021:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6131:6;::::0;;6110:38:::1;::::0;-1:-1:-1;;;;;6110:38:0;;::::1;::::0;6131:6;::::1;::::0;6110:38:::1;::::0;::::1;6159:6;:17:::0;;-1:-1:-1;;;;;;6159:17:0::1;-1:-1:-1::0;;;;;6159:17:0;;;::::1;::::0;;;::::1;::::0;;5940:244::o;32870:159::-;5696:12;:10;:12::i;:::-;5686:6;;-1:-1:-1;;;;;5686:6:0;;;:22;;;5678:67;;;;;-1:-1:-1;;;5678:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5678:67:0;;;;;;;;;;;;;;;32951:21:::1;32983:38;32951:21:::0;32983:18:::1;:38::i;39334:110::-:0;39415:21;39334:110;:::o;106:106::-;194:10;106:106;:::o;26212:337::-;-1:-1:-1;;;;;26305:19:0;;26297:68;;;;-1:-1:-1;;;26297:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26384:21:0;;26376:68;;;;-1:-1:-1;;;26376:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26457:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26509:32;;;;;;;;;;;;;;;;;26212:337;;;:::o;26557:3390::-;-1:-1:-1;;;;;26654:20:0;;26646:70;;;;-1:-1:-1;;;26646:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26735:23:0;;26727:71;;;;-1:-1:-1;;;26727:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26826:1;26817:6;:10;26809:64;;;;-1:-1:-1;;;26809:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26908:13;-1:-1:-1;;;;;26898:23:0;:6;-1:-1:-1;;;;;26898:23:0;;:64;;;;;26946:15;-1:-1:-1;;;;;26925:37:0;:9;-1:-1:-1;;;;;26925:37:0;;;26898:64;:98;;;;-1:-1:-1;;;;;;26967:29:0;;;;;;:18;:29;;;;;;;;26966:30;26898:98;:117;;;;-1:-1:-1;27000:15:0;;-1:-1:-1;;;27000:15:0;;;;26898:117;26894:250;;;27036:11;;-1:-1:-1;;;27036:11:0;;;;27028:47;;;;;-1:-1:-1;;;27028:47:0;;;;;;;;;;;;-1:-1:-1;;;27028:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27090:19:0;;;;;;:8;:19;;;;;27131:10;27112:15;:30;27090:52;;26894:250;-1:-1:-1;;;;;27171:25:0;;;;;;:17;:25;;;;;;;;27168:1045;;;27227:11;;-1:-1:-1;;;27227:11:0;;;;27219:47;;;;;-1:-1:-1;;;27219:47:0;;;;;;;;;;;;-1:-1:-1;;;27219:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27285:16:0;;;;;;:8;:16;;;;;;27304:15;-1:-1:-1;27277:43:0;;;;;;27331:28;27362:24;27380:4;27362:9;:24::i;:::-;27331:55;;27426:12;;27402:20;:36;27399:112;;-1:-1:-1;27487:12:0;;27399:112;27528:16;;-1:-1:-1;;;27528:16:0;;;;27527:17;:42;;;;-1:-1:-1;27548:21:0;;-1:-1:-1;;;27548:21:0;;;;27527:42;:63;;;;-1:-1:-1;27573:17:0;;-1:-1:-1;;;27573:17:0;;;;27527:63;:90;;;;;27604:13;-1:-1:-1;;;;;27594:23:0;:6;-1:-1:-1;;;;;27594:23:0;;;27527:90;27523:256;;;27634:30;:53;;;27731:36;27667:20;27731:14;:36::i;:::-;-1:-1:-1;;;;;27971:26:0;;27852:12;27971:26;;;:18;:26;;;;;;27867:4;;27971:26;;;:59;;-1:-1:-1;;;;;;28001:29:0;;;;;;:18;:29;;;;;;;;27971:59;27968:105;;;-1:-1:-1;28056:5:0;27968:105;28169:18;;28146:59;;28161:6;;-1:-1:-1;;;;;28169:18:0;28189:6;28197:7;28146:14;:59::i;:::-;27168:1045;;;28239:7;:5;:7::i;:::-;-1:-1:-1;;;;;28229:17:0;:6;-1:-1:-1;;;;;28229:17:0;;;:44;;;;;28260:13;-1:-1:-1;;;;;28250:23:0;:6;-1:-1:-1;;;;;28250:23:0;;;28229:44;28225:555;;;28309:12;;28299:6;:22;;28291:75;;;;-1:-1:-1;;;28291:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28584:12;;28548:32;28573:6;28548:20;28558:9;28548;:20::i;:::-;:24;;:32::i;:::-;:48;;28540:108;;;;-1:-1:-1;;;28540:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28671:11;;-1:-1:-1;;;28671:11:0;;;;28663:47;;;;;-1:-1:-1;;;28663:47:0;;;;;;;;;;;;-1:-1:-1;;;28663:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28733:16:0;;;;;;:8;:16;;;;;;28752:15;-1:-1:-1;28725:43:0;;;;;;29074:28;29105:24;29123:4;29105:9;:24::i;:::-;29074:55;;29169:12;;29145:20;:36;29142:112;;-1:-1:-1;29230:12:0;;29142:112;29271:16;;-1:-1:-1;;;29271:16:0;;;;29270:17;:42;;;;-1:-1:-1;29291:21:0;;-1:-1:-1;;;29291:21:0;;;;29270:42;:63;;;;-1:-1:-1;29316:17:0;;-1:-1:-1;;;29316:17:0;;;;29270:63;:90;;;;;29347:13;-1:-1:-1;;;;;29337:23:0;:6;-1:-1:-1;;;;;29337:23:0;;;29270:90;29266:256;;;29377:30;:53;;;29474:36;29410:20;29474:14;:36::i;:::-;-1:-1:-1;;;;;29714:26:0;;29595:12;29714:26;;;:18;:26;;;;;;29610:4;;29714:26;;;:59;;-1:-1:-1;;;;;;29744:29:0;;;;;;:18;:29;;;;;;;;29714:59;29711:105;;;-1:-1:-1;29799:5:0;29711:105;29889:50;29904:6;29912:9;29923:6;29931:7;29889:14;:50::i;:::-;26557:3390;;;;;:::o;1520:192::-;1606:7;1642:12;1634:6;;;;1626:29;;;;-1:-1:-1;;;1626:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1678:5:0;;;1520:192::o;38404:163::-;38445:7;38466:15;38483;38502:19;:17;:19::i;:::-;38465:56;;-1:-1:-1;38465:56:0;-1:-1:-1;38539:20:0;38465:56;;38539:11;:20::i;:::-;38532:27;;;;38404:163;:::o;1988:132::-;2046:7;2073:39;2077:1;2080;2073:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2066:46;1988:132;-1:-1:-1;;;1988:132:0:o;1187:181::-;1245:7;1277:5;;;1301:6;;;;1293:46;;;;;-1:-1:-1;;;1293:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;37099:518;37158:7;37167;37176;37185;37194;37203;37224:23;37249:12;37263:30;37297:63;37309:7;37318;;37327:32;37345:13;;37327;;:17;;:32;;;;:::i;:::-;37297:11;:63::i;:::-;37223:137;;;;;;37371:19;37393:10;:8;:10::i;:::-;37371:32;;37415:15;37432:23;37457:12;37473:39;37485:7;37494:4;37500:11;37473;:39::i;:::-;37414:98;;-1:-1:-1;37414:98:0;-1:-1:-1;37414:98:0;-1:-1:-1;37563:15:0;;-1:-1:-1;37580:4:0;;-1:-1:-1;37586:22:0;;-1:-1:-1;;;;;37099:518:0;;;;;;;:::o;1376:136::-;1434:7;1461:43;1465:1;1468;1461:43;;;;;;;;;;;;;;;;;:3;:43::i;31284:589::-;31434:16;;;31448:1;31434:16;;;31410:21;31434:16;;;;;31410:21;31434:16;;;;;;;;;;-1:-1:-1;31434:16:0;31410:40;;31479:4;31461;31466:1;31461:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;31461:23:0;;;-1:-1:-1;;;;;31461:23:0;;;;;31505:15;-1:-1:-1;;;;;31505:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31505:22:0;31495:7;;:4;;31500:1;;31495:7;;;;;;;;;;;:32;-1:-1:-1;;;;;31495:32:0;;;-1:-1:-1;;;;;31495:32:0;;;;;31540:62;31557:4;31572:15;31590:11;31540:8;:62::i;:::-;31641:15;-1:-1:-1;;;;;31641:66:0;;31722:11;31748:1;31792:4;31819;31839:15;31641:224;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31641:224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31284:589;;:::o;32402:106::-;32464:18;;:35;;-1:-1:-1;;;;;32464:18:0;;;;:35;;;;;32492:6;;32464:18;:35;:18;:35;32492:6;32464:18;:35;;;;;;;;;;;;;;;;;;;29955:1321;16310:16;:23;;-1:-1:-1;;;;16310:23:0;-1:-1:-1;;;16310:23:0;;;:16;30124:13;30106::::1;::::0;16310:23;;30062:77:::1;::::0;30106:32:::1;::::0;:17:::1;:32::i;:::-;30087:13;::::0;30062:39:::1;::::0;:20;;:24:::1;:39::i;:::-;:43:::0;::::1;:77::i;:::-;30040:99:::0;-1:-1:-1;30150:17:0::1;30170:37;:20:::0;30040:99;30170:24:::1;:37::i;:::-;30150:57:::0;-1:-1:-1;30271:12:0::1;30286:16;30150:57:::0;30300:1:::1;30286:13;:16::i;:::-;30271:31:::0;-1:-1:-1;30313:17:0::1;30333:19;:9:::0;30271:31;30333:13:::1;:19::i;:::-;30313:39:::0;-1:-1:-1;30655:21:0::1;30630:22;30744:21;:4:::0;30753:11;30744:8:::1;:21::i;:::-;30721:44;;30776:30;30793:12;30776:16;:30::i;:::-;30937:16;30956:41;:21;30982:14:::0;30956:25:::1;:41::i;:::-;30937:60:::0;-1:-1:-1;31008:18:0::1;31029:36;31052:12:::0;31029:18:::1;30937:60:::0;31042:4;31029:12:::1;:18::i;:36::-;31008:57;;31115:35;31128:9;31139:10;31115:12;:35::i;:::-;31168:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;31224:44;31243:24;:8:::0;31256:10;31243:12:::1;:24::i;:::-;31224:18;:44::i;:::-;-1:-1:-1::0;;16356:16:0;:24;;-1:-1:-1;;;;16356:24:0;;;-1:-1:-1;;;;;;;29955:1321:0:o;33193:819::-;33305:7;33301:40;;33327:14;:12;:14::i;:::-;-1:-1:-1;;;;;33358:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;33382:22:0;;;;;;:11;:22;;;;;;;;33381:23;33358:46;33354:597;;;33421:48;33443:6;33451:9;33462:6;33421:21;:48::i;:::-;33354:597;;;-1:-1:-1;;;;;33492:19:0;;;;;;:11;:19;;;;;;;;33491:20;:46;;;;-1:-1:-1;;;;;;33515:22:0;;;;;;:11;:22;;;;;;;;33491:46;33487:464;;;33554:46;33574:6;33582:9;33593:6;33554:19;:46::i;33487:464::-;-1:-1:-1;;;;;33623:19:0;;;;;;:11;:19;;;;;;;;33622:20;:47;;;;-1:-1:-1;;;;;;33647:22:0;;;;;;:11;:22;;;;;;;;33646:23;33622:47;33618:333;;;33686:44;33704:6;33712:9;33723:6;33686:17;:44::i;33618:333::-;-1:-1:-1;;;;;33752:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33775:22:0;;;;;;:11;:22;;;;;;;;33752:45;33748:203;;;33814:48;33836:6;33844:9;33855:6;33814:21;:48::i;33748:203::-;33895:44;33913:6;33921:9;33932:6;33895:17;:44::i;:::-;33967:7;33963:41;;33989:15;:13;:15::i;:::-;33193:819;;;;:::o;38575:555::-;38672:7;;38708;;38625;;;;;38726:289;38750:9;:16;38746:20;;38726:289;;;38816:7;38792;:21;38800:9;38810:1;38800:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38800:12:0;38792:21;;;;;;;;;;;;;:31;;:66;;;38851:7;38827;:21;38835:9;38845:1;38835:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38835:12:0;38827:21;;;;;;;;;;;;;:31;38792:66;38788:97;;;38868:7;;38877;;38860:25;;;;;;;;;38788:97;38910:34;38922:7;:21;38930:9;38940:1;38930:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38930:12:0;38922:21;;;;;;;;;;;;;38910:7;;:11;:34::i;:::-;38900:44;;38969:34;38981:7;:21;38989:9;38999:1;38989:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38989:12:0;38981:21;;;;;;;;;;;;;38969:7;;:11;:34::i;:::-;38959:44;-1:-1:-1;38768:3:0;;38726:289;;;-1:-1:-1;39051:7:0;;39039;;:20;;:11;:20::i;:::-;39029:7;:30;39025:61;;;39069:7;;39078;;39061:25;;;;;;;;39025:61;39105:7;;-1:-1:-1;39114:7:0;-1:-1:-1;38575:555:0;;;:::o;2134:278::-;2220:7;2255:12;2248:5;2240:28;;;;-1:-1:-1;;;2240:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2279:9;2295:1;2291;:5;;;;;;;2134:278;-1:-1:-1;;;;;2134:278:0:o;37625:429::-;37732:7;;;;37785:28;37809:3;37785:19;:7;37797:6;37785:11;:19::i;:28::-;37770:43;-1:-1:-1;37824:30:0;37857:43;37896:3;37857:34;:7;37869:21;37857:11;:34::i;:43::-;37824:76;-1:-1:-1;37911:23:0;37937:44;37959:21;37937:17;:7;37949:4;37937:11;:17::i;:::-;:21;;:44::i;:::-;37911:70;38017:4;;-1:-1:-1;38023:22:0;;-1:-1:-1;37625:429:0;;-1:-1:-1;;;;;37625:429:0:o;38062:334::-;38157:7;;;;38213:24;:7;38225:11;38213;:24::i;:::-;38195:42;-1:-1:-1;38248:12:0;38263:21;:4;38272:11;38263:8;:21::i;:::-;38248:36;-1:-1:-1;38295:23:0;38321:17;:7;38248:36;38321:11;:17::i;:::-;38357:7;;;;-1:-1:-1;38383:4:0;;-1:-1:-1;38062:334:0;;-1:-1:-1;;;;;38062:334:0:o;1720:260::-;1778:7;1812:6;1808:47;;-1:-1:-1;1842:1:0;1835:8;;1808:47;1879:5;;;1883:1;1879;:5;:1;1903:5;;;;;:10;1895:56;;;;-1:-1:-1;;;1895:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31881:513;32029:62;32046:4;32061:15;32079:11;32029:8;:62::i;:::-;32134:15;-1:-1:-1;;;;;32134:31:0;;32173:9;32206:4;32226:11;32252:1;32295;32338:7;:5;:7::i;:::-;32360:15;32134:252;;;;;;;;;;;;;-1:-1:-1;;;;;32134:252:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32134:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25560:332;25606:7;;:12;:34;;;;-1:-1:-1;25622:13:0;;:18;25606:34;:56;;;;-1:-1:-1;25644:13:0;;:18;25606:56;25603:68;;;25664:7;;25603:68;25701:7;;;25683:15;:25;25743:13;;;25719:21;:37;25791:13;;;25767:21;:37;-1:-1:-1;25817:11:0;;;;25839:17;;;;25867;25560:332;:::o;35167:590::-;35270:15;35287:23;35312:12;35326:23;35351:12;35365:27;35396:19;35407:7;35396:10;:19::i;:::-;-1:-1:-1;;;;;35444:15:0;;;;;;:7;:15;;;;;;35269:146;;-1:-1:-1;35269:146:0;;-1:-1:-1;35269:146:0;;-1:-1:-1;35269:146:0;-1:-1:-1;35269:146:0;-1:-1:-1;35269:146:0;-1:-1:-1;35444:28:0;;35464:7;35444:19;:28::i;:::-;-1:-1:-1;;;;;35426:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35501:7;:15;;;;:28;;35521:7;35501:19;:28::i;:::-;-1:-1:-1;;;;;35483:15:0;;;;;;;:7;:15;;;;;;:46;;;;35561:18;;;;;;;:39;;35584:15;35561:22;:39::i;:::-;-1:-1:-1;;;;;35540:18:0;;;;;;:7;:18;;;;;:60;35611:44;35635:19;35611:23;:44::i;:::-;35666:23;35678:4;35684;35666:11;:23::i;:::-;35722:9;-1:-1:-1;;;;;35705:44:0;35714:6;-1:-1:-1;;;;;35705:44:0;;35733:15;35705:44;;;;;;;;;;;;;;;;;;35167:590;;;;;;;;;:::o;34557:602::-;34658:15;34675:23;34700:12;34714:23;34739:12;34753:27;34784:19;34795:7;34784:10;:19::i;:::-;-1:-1:-1;;;;;34832:15:0;;;;;;:7;:15;;;;;;34657:146;;-1:-1:-1;34657:146:0;;-1:-1:-1;34657:146:0;;-1:-1:-1;34657:146:0;-1:-1:-1;34657:146:0;-1:-1:-1;34657:146:0;-1:-1:-1;34832:28:0;;34657:146;34832:19;:28::i;:::-;-1:-1:-1;;;;;34814:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34892:18;;;;;:7;:18;;;;;:39;;34915:15;34892:22;:39::i;:::-;-1:-1:-1;;;;;34871:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34963:7;:18;;;;:39;;34986:15;34963:22;:39::i;34020:529::-;34119:15;34136:23;34161:12;34175:23;34200:12;34214:27;34245:19;34256:7;34245:10;:19::i;:::-;-1:-1:-1;;;;;34293:15:0;;;;;;:7;:15;;;;;;34118:146;;-1:-1:-1;34118:146:0;;-1:-1:-1;34118:146:0;;-1:-1:-1;34118:146:0;-1:-1:-1;34118:146:0;-1:-1:-1;34118:146:0;-1:-1:-1;34293:28:0;;34118:146;34293:19;:28::i;35765:661::-;35868:15;35885:23;35910:12;35924:23;35949:12;35963:27;35994:19;36005:7;35994:10;:19::i;:::-;-1:-1:-1;;;;;36042:15:0;;;;;;:7;:15;;;;;;35867:146;;-1:-1:-1;35867:146:0;;-1:-1:-1;35867:146:0;;-1:-1:-1;35867:146:0;-1:-1:-1;35867:146:0;-1:-1:-1;35867:146:0;-1:-1:-1;36042:28:0;;36062:7;36042:19;:28::i;:::-;-1:-1:-1;;;;;36024:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36099:7;:15;;;;:28;;36119:7;36099:19;:28::i;25900:173::-;25954:15;;25944:7;:25;25996:21;;25980:13;:37;26044:21;;26028:13;:37;25900:173::o;36434:408::-;36515:19;36537:10;:8;:10::i;:::-;36515:32;-1:-1:-1;36558:27:0;36588:36;:19;36515:32;36588:23;:36::i;:::-;36676:4;36660:22;;;;:7;:22;;;;;;36558:66;;-1:-1:-1;36660:47:0;;36558:66;36660:26;:47::i;:::-;36651:4;36635:22;;;;:7;:22;;;;;;;;:72;;;;36721:11;:26;;;;;;36718:116;;;36803:4;36787:22;;;;:7;:22;;;;;;:47;;36814:19;36787:26;:47::i;:::-;36778:4;36762:22;;;;:7;:22;;;;;:72;36718:116;36434:408;;;:::o;36850:147::-;36928:7;;:17;;36940:4;36928:11;:17::i;:::-;36918:7;:27;36969:10;;:20;;36984:4;36969:14;:20::i;:::-;36956:10;:33;-1:-1:-1;;36850:147:0:o

Swarm Source

ipfs://0e3b4087bd908478af2e02de1c1fb332292a197ad5eb3ed950b4b243c5cc9e11
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.