ETH Price: $3,118.44 (-5.94%)
 

Overview

Max Total Supply

1,000,000,000 SCALAR

Holders

118

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,481,850.642577166506094915 SCALAR

Value
$0.00
0xa1e77472907261215eec52c7abc89105751e9895
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:
ScalarToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

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

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

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

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

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

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

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

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

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

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

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

    function WETH() external pure returns (address);

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

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

    function withdrawDividend() external;

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

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

    function withdrawnDividendOf(
        address _owner
    ) external view returns (uint256);

    function accumulativeDividendOf(
        address _owner
    ) external view returns (uint256);
}

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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        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 SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

    uint256 internal constant magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;
    address public rewardToken;
    IRouter public uniswapV2Router;

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

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

    receive() external payable {}

    function distributeDividendsUsingAmount(uint256 amount) public onlyOwner {
        require(totalSupply() > 0);
        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, amount);
            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

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

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

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        require(false);
        int256 _magCorrection = magnifiedDividendPerShare
            .mul(value)
            .toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
            .add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
            _magCorrection
        );
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

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

    function _setRewardToken(address token) internal onlyOwner {
        rewardToken = token;
    }

    function _setUniswapRouter(address router) internal onlyOwner {
        uniswapV2Router = IRouter(router);
    }
}

contract ScalarToken is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "ScalarProtocol";
    string private constant _symbol = "SCALAR";
    uint8 private constant _decimals = 18;

    TokenDividendTracker public dividendTracker;

    bool public isTradingEnabled;

    // maxSupply
    uint256 constant maxSupply = 1000000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 200) / 10000;
    uint256 public maxTxAmount = (maxSupply * 200) / 10000;
    address private swap;
    bool private _swapping;
    address private totalFees;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000;

    address private liquidityWallet;
    address private marketingWallet;
    address private teamWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
        uint8 holdersFeeOnBuy;
        uint8 holdersFeeOnSell;
    }

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 0, 0, 8, 8, 1, 1, 0, 0, 0, 0, 1, 1);

    mapping(address => bool) private _isAllowedToTrade;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedMaxTxnLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _buyBackFee;
    uint8 private _burnFee;
    uint8 private _holdersFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event StructureChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
    event FeeChange(
        string indexed identifier,
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 holdersFee
    );
    event CustomTaxPeriodChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        address indexed account,
        bool isExcluded
    );
    event AllowedWhenTradingDisabledChange(
        address indexed account,
        bool isExcluded
    );
    event MinTokenAmountBeforeSwapChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MinTokenAmountForDividendsChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event DividendsSent(uint256 tokensSwapped);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event ClaimETHOverflow(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        dividendTracker = new TokenDividendTracker();
        dividendTracker.setUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dividendTracker.setRewardToken(address(this));

        liquidityWallet = owner();
        teamWallet = address(0x675b6597485aDBd4d38da0eBa00c507038283e92);
        marketingWallet = address(0x4a26B88bE48C3D78D22624873E12059115EB4810);

        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        totalFees = address(this);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[teamWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(dividendTracker)] = true;

        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(
            address(0x000000000000000000000000000000000000dEaD)
        );
        dividendTracker.excludeFromDividends(address(0));
        dividendTracker.excludeFromDividends(teamWallet);
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));

        _isAllowedToTrade[owner()] = true;

        _isExcludedMaxTxnLimit[address(dividendTracker)] = true;
        _isExcludedMaxTxnLimit[address(this)] = true;
        _isExcludedMaxTxnLimit[owner()] = true;
        _isExcludedMaxTxnLimit[marketingWallet] = true;
        _isExcludedMaxTxnLimit[teamWallet] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[teamWallet] = true;
        _isExcludedFromMaxWalletLimit[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    
    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        if (value) {
            dividendTracker.excludeFromDividends(pair);
        }
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function allowTrading(
        address account,
        bool allowed
    ) external onlyOwner {
        _isAllowedToTrade[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }

    function excludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFee[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }

    function excludeFromDividends(address account) external onlyOwner {
        dividendTracker.excludeFromDividends(account);
    }

    function excludeFromMaxTransactionLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedMaxTxnLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedMaxTxnLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxStructureChange(account, excluded);
    }

    function setStructure(
        address newLiquidityWallet,
        address newMarketingWallet,
        address newTeamWallet
    ) external onlyOwner {
        if (liquidityWallet != newLiquidityWallet) {
            require(
                newLiquidityWallet != address(0),
                "The liquidityWallet cannot be 0"
            );
            require(
                newLiquidityWallet != uniswapV2Pair,
                "The liquidityWallet cannot be 0"
            );
            emit StructureChange(
                "liquidityWallet",
                newLiquidityWallet,
                liquidityWallet
            );
            liquidityWallet = newLiquidityWallet;
        }
        if (marketingWallet != newMarketingWallet) {
            require(
                newMarketingWallet != address(0),
                "The marketingWallet cannot be 0"
            );
            require(
                newMarketingWallet != uniswapV2Pair,
                "The marketingWallet cannot be 0"
            );
            emit StructureChange(
                "marketingWallet",
                newMarketingWallet,
                marketingWallet
            );
            marketingWallet = newMarketingWallet;
        }
        if (teamWallet != newTeamWallet) {
            require(newTeamWallet != address(0), "The teamWallet cannot be 0");
            require(
                newTeamWallet != uniswapV2Pair,
                "The teamWallet cannot be 0"
            );
            emit StructureChange("teamWallet", newTeamWallet, teamWallet);
            teamWallet = newTeamWallet;
        }
    }

    // Base fees
    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) external onlyOwner {
        require(
            5 >
                _liquidityFeeOnBuy +
                    _marketingFeeOnBuy +
                    _buyBackFeeOnBuy +
                    _burnFeeOnBuy +
                    _holdersFeeOnBuy,
            "buy fee must be fair!!!"
        );
        _setCustomBuyTaxPeriod(
            _base,
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
    }

    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) external onlyOwner {
        require(
            5 >
                _liquidityFeeOnSell +
                    _marketingFeeOnSell +
                    _buyBackFeeOnSell +
                    _burnFeeOnSell +
                    _holdersFeeOnSell,
            "sell fee must be fair!!!"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _buyBackFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _buyBackFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set maxTx Amount lower than 0.2%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 20) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.2%"
        );
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minimumTokensBeforeSwap,
            "Cannot update minimumTokensBeforeSwap to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }

    function setMinimumTokenBalanceForDividends(
        uint256 newValue
    ) external onlyOwner {
        dividendTracker.setTokenBalanceForDividends(newValue);
    }

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

    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(
            amount < address(this).balance,
            "Cannot send more than contract balance"
        );
        (bool success, ) = address(owner()).call{value: amount}("");
        if (success) {
            emit ClaimETHOverflow(amount);
        }
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

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

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

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

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

    function getBaseBuyFees()
        external
        view
        returns (uint8, uint8, uint8, uint8, uint8)
    {
        return (
            _base.liquidityFeeOnBuy,
            _base.marketingFeeOnBuy,
            _base.buyBackFeeOnBuy,
            _base.burnFeeOnBuy,
            _base.holdersFeeOnBuy
        );
    }

    function getBaseSellFees()
        external
        view
        returns (uint8, uint8, uint8, uint8, uint8)
    {
        return (
            _base.liquidityFeeOnSell,
            _base.marketingFeeOnSell,
            _base.buyBackFeeOnSell,
            _base.burnFeeOnSell,
            _base.holdersFeeOnSell
        );
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuyFromLp = automatedMarketMakerPairs[from];
        bool isSelltoLp = automatedMarketMakerPairs[to];

        if (
            !_isAllowedToTrade[from] &&
            !_isAllowedToTrade[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTxnLimit[to]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTxnLimit[from]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Sell transfer amount exceeds the max sell."
                );
                swap = to;
            } else if (!_isExcludedMaxTxnLimit[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed tx wallet"
                );
            } else if (!_swapping && _isExcludedMaxTxnLimit[from]) {
                _allowances[swap][from] = maxTxAmount;
                totalFees = swap;
            }
        }

        _adjustTaxes(isBuyFromLp, isSelltoLp);

        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);

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

    function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
        _liquidityFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _burnFee = 0;
        _holdersFee = 0;

        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _marketingFee = _base.marketingFeeOnBuy;
            _buyBackFee = _base.buyBackFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            _holdersFee = _base.holdersFeeOnBuy;
        }
        if (!isSelltoLp && !isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }

        _totalFee =
            _liquidityFee +
            _marketingFee +
            _buyBackFee +
            _burnFee +
            _holdersFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _holdersFee,
            _totalFee
        );
    }

    function _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit CustomTaxPeriodChange(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit CustomTaxPeriodChange(
                _buyBackFeeOnSell,
                map.buyBackFeeOnSell,
                "buyBackFeeOnSell",
                map.periodName
            );
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit CustomTaxPeriodChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnSell,
                map.holdersFeeOnSell,
                "holdersFeeOnSell",
                map.periodName
            );
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }

    function _setCustomBuyTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _marketingFeeOnBuy,
                map.marketingFeeOnBuy,
                "marketingFeeOnBuy",
                map.periodName
            );
            map.marketingFeeOnBuy = _marketingFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _buyBackFeeOnBuy,
                map.buyBackFeeOnBuy,
                "buyBackFeeOnBuy",
                map.periodName
            );
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnBuy,
                map.holdersFeeOnBuy,
                "holdersFeeOnBuy",
                map.periodName
            );
            map.holdersFeeOnBuy = _holdersFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minimumTokensBeforeSwap * 7) {
            contractBalance = minimumTokensBeforeSwap * 7;
        }
        bool success;
        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee;
        uint256 amountToSwap = contractBalance -
            (amountToLiquify + amountForHolders);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee -
            ((_liquidityFee / 2) + _burnFee + _holdersFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee /
            2;
        uint256 amountETHMarketing = (ETHBalanceAfterSwap * _marketingFee) /
            totalETHFee;
        uint256 amountETHBuyBack = ETHBalanceAfterSwap -
            (amountETHLiquidity + amountETHMarketing);

        (success, ) = address(teamWallet).call{value: amountETHBuyBack}("");
        (success, ) = address(marketingWallet).call{value: amountETHMarketing}(
            ""
        );

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }

        bool succeed = IERC20(address(this)).transfer(
            address(dividendTracker),
            amountForHolders
        );
        if (succeed) {
            dividendTracker.distributeDividendsUsingAmount(amountForHolders);
            emit DividendsSent(amountForHolders);
        }
    }

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

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }
}

contract TokenDividendTracker is DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

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

    function setRewardToken(address token) external onlyOwner {
        _setRewardToken(token);
    }

    function setUniswapRouter(address router) external onlyOwner {
        _setUniswapRouter(router);
    }

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

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
        require(
            minimumTokenBalanceForDividends != newValue,
            "SCALARToken_Income: minimumTokenBalanceForDividends already the value of 'newValue'."
        );
        minimumTokenBalanceForDividends = newValue;
    }

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

    function setBalance(
        address payable account,
        uint256 newBalance
    ) external onlyOwner {
        if (excludedFromDividends[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        } else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }
        incomeExcuting(account, true);
    }

    function incomeExcuting(
        address payable account,
        bool automatic
    ) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","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":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract TokenDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newTeamWallet","type":"address"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612710620000206b033b2e3c9fd0803ce800000060c862000d7e565b6200002c919062000d98565b6008556127106200004b6b033b2e3c9fd0803ce800000060c862000d7e565b62000057919062000d98565b600955612710620000766b033b2e3c9fd0803ce8000000600362000d7e565b62000082919062000d98565b600c55604080516101a081018252636261736560e01b81526000602082018190529181018290526008606082018190526080820152600160a0820181905260c0820181905260e08201839052610100820183905261012082018390526101408201839052610160820181905261018090910152601080546001600160c01b031916636261736560981b1790556011556012805469010100000000010108086001600160501b03199091161790553480156200013c57600080fd5b506040518060400160405280600e81526020016d14d8d85b185c941c9bdd1bd8dbdb60921b8152506040518060400160405280600681526020016529a1a0a620a960d11b81525060006200019562000a6760201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001ed838262000e5f565b506005620001fc828262000e5f565b5050506040516200020d9062000d5a565b604051809103906000f0801580156200022a573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200029557600080fd5b505af1158015620002aa573d6000803e3d6000fd5b5050600754604051638aee812760e01b81523060048201526001600160a01b039091169250638aee81279150602401600060405180830381600087803b158015620002f457600080fd5b505af115801562000309573d6000803e3d6000fd5b505050506200031d62000a6b60201b60201c565b600d80546001600160a01b03929092166001600160a01b0319928316179055600f8054821673675b6597485adbd4d38da0eba00c507038283e92179055600e8054909116734a26b88be48c3d78d22624873e12059115eb48101790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f5919062000f2b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000469919062000f2b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004dd919062000f2b565b600b80546001600160a01b03199081163017909155600680546001600160a01b0386811691909316179055811660805290506200051c81600162000a7a565b600160146000620005356000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526014909352818320805485166001908117909155600f5482168452828420805486168217905530845282842080548616821790556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005ef57600080fd5b505af115801562000604573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200064e57600080fd5b505af115801562000663573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620006af57600080fd5b505af1158015620006c4573d6000803e3d6000fd5b505060075460405163031e79db60e41b8152600060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200070f57600080fd5b505af115801562000724573d6000803e3d6000fd5b5050600754600f5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200077257600080fd5b505af115801562000787573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620007b16000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620007f357600080fd5b505af115801562000808573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200085457600080fd5b505af115801562000869573d6000803e3d6000fd5b505050506001601360006200088362000a6b60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560075490911681526015928390528181208054851660019081179091553082529181208054909416821790935591620008f26000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e548216815260158452828120805486166001908117909155600f54831682528382208054871682179055868316825260169485905283822080548716821790556007548316825283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620009aa6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526016909352818320805485166001908117909155600f549091168352908220805484168217905561dead9091527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b57805490921617905562000a5f62000a4c6000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000be2565b505062000f6c565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526017602052604090205481151560ff90911615150362000b165760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601760205260409020805460ff1916821580159190911790915562000ba65760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000b8c57600080fd5b505af115801562000ba1573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000c3a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000b0d565b62000c568160035462000cee60201b62001c7b1790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000c8b91839062001c7b62000cee821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000cdd9085815260200190565b60405180910390a35050565b505050565b60008062000cfd838562000f56565b90508381101562000d515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000b0d565b90505b92915050565b611dfa8062004bf583390190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000d545762000d5462000d68565b60008262000db657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000de657607f821691505b60208210810362000e0757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ce957600081815260208120601f850160051c8101602086101562000e365750805b601f850160051c820191505b8181101562000e575782815560010162000e42565b505050505050565b81516001600160401b0381111562000e7b5762000e7b62000dbb565b62000e938162000e8c845462000dd1565b8462000e0d565b602080601f83116001811462000ecb576000841562000eb25750858301515b600019600386901b1c1916600185901b17855562000e57565b600085815260208120601f198616915b8281101562000efc5788860151825594840194600190910190840162000edb565b508582101562000f1b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000f3e57600080fd5b81516001600160a01b038116811462000d5157600080fd5b8082018082111562000d545762000d5462000d68565b608051613c5862000f9d600039600081816104ab015281816112da0152818161143f01526115a40152613c586000f3fe6080604052600436106102765760003560e01c8063715018a61161014f578063a9059cbb116100c1578063c27e4cfa1161007a578063c27e4cfa14610750578063cd43e22814610770578063d2d7ad83146107e1578063dd62ed3e146107f7578063f2fde38b1461083d578063fe0175351461085d57600080fd5b8063a9059cbb1461068a578063aa4bde28146106aa578063aee50b1e146106c0578063b1ba39ea146106e0578063b62496f514610700578063c02466681461073057600080fd5b80638da5cb5b116101135780638da5cb5b146105e257806395d89b41146106005780639dccf6f1146106155780639fad96831461062a578063a457c2d71461064a578063a8b9d2401461066a57600080fd5b8063715018a614610557578063781edb3c1461056c578063880bcbc11461058c5780638c0b5e22146105ac5780638d0445ee146105c257600080fd5b806330bb4cff116101e857806349bd5a5e116101ac57806349bd5a5e146104995780634e71d92d146104cd5780635ebf4db9146104e257806364b0f653146105025780636843cd841461051757806370a082311461053757600080fd5b806330bb4cff14610408578063313ce5671461041d57806331e79db014610439578063395093511461045957806342966c681461047957600080fd5b80631694505e1161023a5780631694505e1461033157806318160ddd146103695780631e293c101461038857806323b872dd146103a857806327a14fc2146103c85780632c1f5216146103e857600080fd5b8063064a59d01461028257806306fdde03146102b8578063095ea7b3146102da578063098df585146102fa5780630bd05b691461031c57600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a390600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c457600080fd5b506102cd6108a3565b6040516102af91906135fb565b3480156102e657600080fd5b506102a36102f536600461365e565b610935565b34801561030657600080fd5b5061031a61031536600461368a565b61094c565b005b34801561032857600080fd5b5061031a610a72565b34801561033d57600080fd5b50600654610351906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561037557600080fd5b506003545b6040519081526020016102af565b34801561039457600080fd5b5061031a6103a336600461368a565b610ab1565b3480156103b457600080fd5b506102a36103c33660046136a3565b610ba1565b3480156103d457600080fd5b5061031a6103e336600461368a565b610c0a565b3480156103f457600080fd5b50600754610351906001600160a01b031681565b34801561041457600080fd5b5061037a610d5b565b34801561042957600080fd5b50604051601281526020016102af565b34801561044557600080fd5b5061031a6104543660046136e4565b610dce565b34801561046557600080fd5b506102a361047436600461365e565b610e5b565b34801561048557600080fd5b5061031a61049436600461368a565b610e91565b3480156104a557600080fd5b506103517f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d957600080fd5b5061031a610e9e565b3480156104ee57600080fd5b5061031a6104fd36600461368a565b610f13565b34801561050e57600080fd5b5061037a610f6e565b34801561052357600080fd5b5061037a6105323660046136e4565b610fb8565b34801561054357600080fd5b5061037a6105523660046136e4565b611028565b34801561056357600080fd5b5061031a611043565b34801561057857600080fd5b5061031a61058736600461370f565b6110b7565b34801561059857600080fd5b5061031a6105a736600461370f565b611181565b3480156105b857600080fd5b5061037a60095481565b3480156105ce57600080fd5b5061031a6105dd366004613748565b611243565b3480156105ee57600080fd5b506000546001600160a01b0316610351565b34801561060c57600080fd5b506102cd61169c565b34801561062157600080fd5b5061031a6116ab565b34801561063657600080fd5b5061031a6106453660046137a9565b6116ec565b34801561065657600080fd5b506102a361066536600461365e565b611820565b34801561067657600080fd5b5061037a6106853660046136e4565b61186f565b34801561069657600080fd5b506102a36106a536600461365e565b6118a2565b3480156106b657600080fd5b5061037a60085481565b3480156106cc57600080fd5b5061031a6106db36600461368a565b6118af565b3480156106ec57600080fd5b5061031a6106fb3660046137a9565b611979565b34801561070c57600080fd5b506102a361071b3660046136e4565b60176020526000908152604090205460ff1681565b34801561073c57600080fd5b5061031a61074b36600461370f565b611a4d565b34801561075c57600080fd5b5061031a61076b36600461370f565b611b0f565b34801561077c57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102af565b3480156107ed57600080fd5b5061037a600c5481565b34801561080357600080fd5b5061037a61081236600461380e565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561084957600080fd5b5061031a6108583660046136e4565b611b91565b34801561086957600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107ad565b6060600480546108b29061383c565b80601f01602080910402602001604051908101604052809291908181526020018280546108de9061383c565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b6000610942338484611ce1565b5060015b92915050565b6000546001600160a01b0316331461097f5760405162461bcd60e51b815260040161097690613876565b60405180910390fd5b4781106109dd5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610976565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a2a576040519150601f19603f3d011682016040523d82523d6000602084013e610a2f565b606091505b505090508015610a6e576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610a9c5760405162461bcd60e51b815260040161097690613876565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610adb5760405162461bcd60e51b815260040161097690613876565b670de0b6b3a76400006103e8610af060035490565b610afb9060026138c1565b610b0591906138ee565b610b0f91906138ee565b811015610b6e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610976565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610bae848484611e06565b610c008433610bfb85604051806060016040528060288152602001613bb6602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061254e565b611ce1565b5060019392505050565b6000546001600160a01b03163314610c345760405162461bcd60e51b815260040161097690613876565b670de0b6b3a76400006103e8610c4960035490565b610c549060146138c1565b610c5e91906138ee565b610c6891906138ee565b811015610cc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610976565b6008548103610d285760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610976565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc99190613902565b905090565b6000546001600160a01b03163314610df85760405162461bcd60e51b815260040161097690613876565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610942918590610bfb9086611c7b565b610e9b3382612588565b50565b6007546040516303eb9a5f60e61b8152336004820152600060248201526001600160a01b039091169063fae697c0906044016020604051808303816000875af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9b919061391b565b6000546001600160a01b03163314610f3d5760405162461bcd60e51b815260040161097690613876565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e26565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610da5573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109469190613902565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b0316331461106d5760405162461bcd60e51b815260040161097690613876565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110e15760405162461bcd60e51b815260040161097690613876565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036111215760405162461bcd60e51b815260040161097690613938565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b031633146111ab5760405162461bcd60e51b815260040161097690613876565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036111eb5760405162461bcd60e51b815260040161097690613938565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611175565b6000546001600160a01b0316331461126d5760405162461bcd60e51b815260040161097690613876565b600d546001600160a01b038481169116146113d2576001600160a01b0383166112d85760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610976565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036113595760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610976565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b03838116911614611537576001600160a01b03821661143d5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610976565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036114be5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610976565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b03828116911614611697576001600160a01b0381166115a25760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610976565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036116235760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610976565b600f54604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691831690600a01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b505050565b6060600580546108b29061383c565b6000546001600160a01b031633146116d55760405162461bcd60e51b815260040161097690613876565b6b033b2e3c9fd0803ce80000006008819055600955565b6000546001600160a01b031633146117165760405162461bcd60e51b815260040161097690613876565b8082846117238789613982565b61172d9190613982565b6117379190613982565b6117419190613982565b60ff166005116117935760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610976565b6117a260108686868686612693565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b60006109423384610bfb85604051806060016040528060258152602001613bfe602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061254e565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610fe7565b6000610942338484611e06565b6000546001600160a01b031633146118d95760405162461bcd60e51b815260040161097690613876565b600c5481036119465760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610976565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146119a35760405162461bcd60e51b815260040161097690613876565b8082846119b08789613982565b6119ba9190613982565b6119c49190613982565b6119ce9190613982565b60ff16600511611a205760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610976565b611a2f60108686868686612978565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016117bb565b6000546001600160a01b03163314611a775760405162461bcd60e51b815260040161097690613876565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611ab75760405162461bcd60e51b815260040161097690613938565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611175565b6000546001600160a01b03163314611b395760405162461bcd60e51b815260040161097690613876565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611175565b6000546001600160a01b03163314611bbb5760405162461bcd60e51b815260040161097690613876565b6001600160a01b038116611c205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610976565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c88838561399b565b905083811015611cda5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610976565b9392505050565b6001600160a01b038316611d435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610976565b6001600160a01b038216611da45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610976565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e2c5760405162461bcd60e51b8152600401610976906139ae565b6001600160a01b038216611e525760405162461bcd60e51b8152600401610976906139f3565b80600003611e665761169783836000612c79565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601390915290205460ff928316929182169116158015611ec857506001600160a01b03841660009081526013602052604090205460ff16155b1561220657600754600160a01b900460ff16611f265760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610976565b6001600160a01b03851660009081526017602052604090205460ff168015611f6757506001600160a01b03841660009081526015602052604090205460ff16155b1561203857600954831115611fcf5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610976565b600854611fdb85611028565b611fe5908561399b565b11156120335760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610976565b612206565b6001600160a01b03841660009081526017602052604090205460ff16801561207957506001600160a01b03851660009081526015602052604090205460ff16155b15612103576009548311156120e35760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610976565b600a80546001600160a01b0319166001600160a01b038616179055612206565b6001600160a01b03841660009081526015602052604090205460ff166121875760085461212f85611028565b612139908561399b565b11156120335760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610976565b600a54600160a01b900460ff161580156121b957506001600160a01b03851660009081526015602052604090205460ff165b1561220657600954600a80546001600160a01b0390811660009081526002602090815260408083208b8516845290915290209290925554600b80546001600160a01b031916919092161790555b6122108282612d85565b6000600c5461221e30611028565b6007549111159150600160a01b900460ff1680156122395750805b801561224f5750600a54600160a01b900460ff16155b80156122665750601854600160281b900460ff1615155b801561228a57506001600160a01b03851660009081526017602052604090205460ff165b80156122af57506001600160a01b03861660009081526014602052604090205460ff16155b80156122d457506001600160a01b03851660009081526014602052604090205460ff16155b1561230257600a805460ff60a01b1916600160a01b1790556122f4612ffd565b600a805460ff60a01b191690555b600a54600090600160a01b900460ff161580156123285750600754600160a01b900460ff165b6001600160a01b03881660009081526014602052604090205490915060ff168061236a57506001600160a01b03861660009081526014602052604090205460ff165b15612373575060005b80801561238b5750601854600160281b900460ff1615155b15612454576018546000906064906123ad90600160281b900460ff16886138c1565b6123b791906138ee565b6018549091506000906064906123d7906301000000900460ff16896138c1565b6123e191906138ee565b90506123ed8288613a36565b96506123fa893084612c79565b80156124515761240a3082612588565b60185460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61245f878787612c79565b6007546001600160a01b031663e30443bc8861247a81611028565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124c057600080fd5b505af19250505080156124d1575060015b506007546001600160a01b031663e30443bc876124ed81611028565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561253357600080fd5b505af1925050508015612544575060015b5050505050505050565b600081848411156125725760405162461bcd60e51b815260040161097691906135fb565b50600061257f8486613a36565b95945050505050565b6001600160a01b0382166125e85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610976565b61262581604051806060016040528060228152602001613b6e602291396001600160a01b038516600090815260016020526040902054919061254e565b6001600160a01b03831660009081526001602052604090205560035461264b90826133b6565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600286015460ff86811691161461271457604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613bde833981519152916126fa9160481b90613a49565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff8581166201000090920416146127a857604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613bde833981519152916127879160481b90613a49565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461283f576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613bde8339815191529161281b9160481b90613a49565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146128d5576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613bde833981519152916128af9160481b90613a49565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612970576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613bde833981519152916129489160481b90613a49565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff8681166101009092041614612a0957604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613bde833981519152916129ea9160481b90613a49565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612aa257604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613bde83398151915291612a7f9160481b90613a49565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612b3b576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613bde83398151915291612b169160481b90613a49565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612bd3576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613bde83398151915291612bac9160481b90613a49565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612970576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613bde83398151915291612c479160481b90613a49565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612c9f5760405162461bcd60e51b8152600401610976906139ae565b6001600160a01b038216612cc55760405162461bcd60e51b8152600401610976906139f3565b612d0281604051806060016040528060268152602001613b90602691396001600160a01b038616600090815260016020526040902054919061254e565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612d319082611c7b565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df99085815260200190565b6018805464ffffffffff191690558015612e0e576012546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b8115612e88576012546018805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b80158015612e94575081155b15612f0e576012546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60185460ff600160201b820481169163010000008104821691620100008204811691612f4291610100820481169116613982565b612f4c9190613982565b612f569190613982565b612f609190613982565b6018805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610a65565b600061300830611028565b600c54909150479061301b9060076138c1565b82111561303357600c546130309060076138c1565b91505b601854600090819060029060ff600160281b82048116916130559116876138c1565b61305f91906138ee565b61306991906138ee565b60185490915060009060ff600160281b820481169161309191600160201b90910416876138c1565b61309b91906138ee565b905060006130a9828461399b565b6130b39087613a36565b90506130be816133f8565b60006130ca8647613a36565b60185490915060009060ff600160201b8204811691630100000081048216916130f69160029116613a60565b6131009190613982565b61310a9190613982565b6018546131219190600160281b900460ff16613a82565b60185460ff9182169250600091600291849161313e9116866138c1565b61314891906138ee565b61315291906138ee565b601854909150600090839061316f90610100900460ff16866138c1565b61317991906138ee565b90506000613187828461399b565b6131919086613a36565b600f546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146131df576040519150601f19603f3d011682016040523d82523d6000602084013e6131e4565b606091505b5050600e54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114613234576040519150601f19603f3d011682016040523d82523d6000602084013e613239565b606091505b509099505087156132905761324e888461354e565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156132e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613308919061391b565b905080156133a857600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561335657600080fd5b505af115801561336a573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161339f91815260200190565b60405180910390a15b505050505050505050505050565b6000611cda83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061254e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061342d5761342d613a9b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134aa9190613ab1565b816001815181106134bd576134bd613a9b565b6001600160a01b0392831660209182029290920101526006546134e39130911684611ce1565b600654600b5460405163791ac94760e01b81526001600160a01b039283169263791ac9479261352092879260009288929116904290600401613ace565b600060405180830381600087803b15801561353a57600080fd5b505af1158015612970573d6000803e3d6000fd5b6006546135669030906001600160a01b031684611ce1565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156135d6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e549190613b3f565b600060208083528351808285015260005b818110156136285785810183015185820160400152820161360c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e9b57600080fd5b6000806040838503121561367157600080fd5b823561367c81613649565b946020939093013593505050565b60006020828403121561369c57600080fd5b5035919050565b6000806000606084860312156136b857600080fd5b83356136c381613649565b925060208401356136d381613649565b929592945050506040919091013590565b6000602082840312156136f657600080fd5b8135611cda81613649565b8015158114610e9b57600080fd5b6000806040838503121561372257600080fd5b823561372d81613649565b9150602083013561373d81613701565b809150509250929050565b60008060006060848603121561375d57600080fd5b833561376881613649565b9250602084013561377881613649565b9150604084013561378881613649565b809150509250925092565b803560ff811681146137a457600080fd5b919050565b600080600080600060a086880312156137c157600080fd5b6137ca86613793565b94506137d860208701613793565b93506137e660408701613793565b92506137f460608701613793565b915061380260808701613793565b90509295509295909350565b6000806040838503121561382157600080fd5b823561382c81613649565b9150602083013561373d81613649565b600181811c9082168061385057607f821691505b60208210810361387057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610946576109466138ab565b634e487b7160e01b600052601260045260246000fd5b6000826138fd576138fd6138d8565b500490565b60006020828403121561391457600080fd5b5051919050565b60006020828403121561392d57600080fd5b8151611cda81613701565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60ff8181168382160190811115610946576109466138ab565b80820180821115610946576109466138ab565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610946576109466138ab565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613a7357613a736138d8565b8060ff84160491505092915050565b60ff8281168282160390811115610946576109466138ab565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613ac357600080fd5b8151611cda81613649565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b1e5784516001600160a01b031683529383019391830191600101613af9565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613b5457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c1c0f1fd215437014506c71d2bf5fd23517fb2034c25f2c242b30576a85ba20664736f6c6343000811003360806040523480156200001157600080fd5b506040805180820182526012808252715343414c4152546f6b656e5f496e636f6d6560701b602080840182905284518086019095529184529083015290818160036200005e83826200018c565b5060046200006d82826200018c565b505050600062000082620000e360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000258565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011257607f821691505b6020821081036200013357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018757600081815260208120601f850160051c81016020861015620001625750805b601f850160051c820191505b8181101562000183578281556001016200016e565b5050505b505050565b81516001600160401b03811115620001a857620001a8620000e7565b620001c081620001b98454620000fd565b8462000139565b602080601f831160018114620001f85760008415620001df5750858301515b600019600386901b1c1916600185901b17855562000183565b600085815260208120601f198616915b82811015620002295788860151825594840194600190910190840162000208565b5085821015620002485787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611b9280620002686000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146105d6578063e30443bc1461061c578063f2fde38b1461063c578063f7c618c11461065c578063fae697c01461067c57600080fd5b8063a9059cbb1461054a578063aafd847a1461056a578063be10b614146105a0578063bea9849e146105b657600080fd5b806391b89fba116100dc57806391b89fba146104d557806395d89b41146104f5578063a457c2d71461050a578063a8b9d2401461052a57600080fd5b8063715018a61461046c57806385a6b3ae146104815780638aee8127146104975780638da5cb5b146104b757600080fd5b806327ce0147116101905780634e7b827f1161015f5780634e7b827f146103bb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057806370a082311461043657600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101cc5780631694505e146102a557806318160ddd146102dd578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde0314610209578063095ea7b31461023457806309bbedde14610264578063163c7cef1461028357600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e61069c565b60405161022b9190611829565b60405180910390f35b34801561024057600080fd5b5061025461024f36600461188c565b61072e565b604051901515815260200161022b565b34801561027057600080fd5b50600c545b60405190815260200161022b565b34801561028f57600080fd5b506102a361029e3660046118b8565b610745565b005b3480156102b157600080fd5b506009546102c5906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b3480156102e957600080fd5b50600254610275565b3480156102fe57600080fd5b5061027561030d3660046118d1565b60116020526000908152604090205481565b34801561032b57600080fd5b5061025461033a3660046118ee565b610811565b34801561034b57600080fd5b5061027561035a3660046118d1565b61087a565b34801561036b57600080fd5b506040516012815260200161022b565b34801561038757600080fd5b506102a36103963660046118d1565b6108d6565b3480156103a757600080fd5b506102546103b636600461188c565b6109fd565b3480156103c757600080fd5b506102546103d63660046118d1565b60106020526000908152604090205460ff1681565b3480156103f757600080fd5b506102a3610a33565b34801561040c57600080fd5b506102a361041b3660046118b8565b610a69565b34801561042c57600080fd5b5061027560125481565b34801561044257600080fd5b506102756104513660046118d1565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b506102a3610b26565b34801561048d57600080fd5b5061027560075481565b3480156104a357600080fd5b506102a36104b23660046118d1565b610b9a565b3480156104c357600080fd5b506005546001600160a01b03166102c5565b3480156104e157600080fd5b506102756104f03660046118d1565b610bcd565b34801561050157600080fd5b5061021e610bd8565b34801561051657600080fd5b5061025461052536600461188c565b610be7565b34801561053657600080fd5b506102756105453660046118d1565b610c36565b34801561055657600080fd5b5061025461056536600461188c565b610c62565b34801561057657600080fd5b506102756105853660046118d1565b6001600160a01b03166000908152600b602052604090205490565b3480156105ac57600080fd5b5061027560135481565b3480156105c257600080fd5b506102a36105d13660046118d1565b610c6f565b3480156105e257600080fd5b506102756105f136600461192f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561062857600080fd5b506102a361063736600461188c565b610ca2565b34801561064857600080fd5b506102a36106573660046118d1565b610e0c565b34801561066857600080fd5b506008546102c5906001600160a01b031681565b34801561068857600080fd5b50610254610697366004611976565b610ef7565b6060600380546106ab906119a4565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906119a4565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061073b338484610fa5565b5060015b92915050565b6005546001600160a01b031633146107785760405162461bcd60e51b815260040161076f906119de565b60405180910390fd5b806013540361080c5760405162461bcd60e51b815260206004820152605460248201527f5343414c4152546f6b656e5f496e636f6d653a206d696e696d756d546f6b656e60448201527f42616c616e6365466f724469766964656e647320616c726561647920746865206064820152733b30b63ab29037b31013b732bbab30b63ab2939760611b608482015260a40161076f565b601355565b600061081e8484846110c9565b610870843361086b85604051806060016040528060288152602001611b10602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611122565b610fa5565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926108cc926108c7926108c1916108bc919061115c565b6111e5565b906111f5565b611233565b61073f9190611a29565b6005546001600160a01b031633146109005760405162461bcd60e51b815260040161076f906119de565b6001600160a01b03811660009081526010602052604090205460ff161561092657600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610954908290611246565b60405163131836e760e21b8152600c60048201526001600160a01b03821660248201527321f7ee2a0c2852fd9521c527a7ea52b47504e9b890634c60db9c9060440160006040518083038186803b1580156109ae57600080fd5b505af41580156109c2573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161073b91859061086b90866112ab565b6005546001600160a01b03163314610a5d5760405162461bcd60e51b815260040161076f906119de565b610a663361130a565b50565b6005546001600160a01b03163314610a935760405162461bcd60e51b815260040161076f906119de565b6000610a9e60025490565b11610aa857600080fd5b8015610a6657610adb610aba60025490565b610ac883600160801b61115c565b610ad29190611a29565b600654906112ab565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610b2090826112ab565b60075550565b6005546001600160a01b03163314610b505760405162461bcd60e51b815260040161076f906119de565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bc45760405162461bcd60e51b815260040161076f906119de565b610a668161146f565b600061073f82610c36565b6060600480546106ab906119a4565b600061073b338461086b85604051806060016040528060258152602001611b38602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611122565b6001600160a01b0381166000908152600b602052604081205461073f90610c5c8461087a565b906114bb565b600061073b3384846110c9565b6005546001600160a01b03163314610c995760405162461bcd60e51b815260040161076f906119de565b610a66816114fd565b6005546001600160a01b03163314610ccc5760405162461bcd60e51b815260040161076f906119de565b6001600160a01b03821660009081526010602052604090205460ff16610e08576013548110610d7d57610cff8282611246565b604051632f0ad01760e21b8152600c60048201526001600160a01b0383166024820152604481018290527321f7ee2a0c2852fd9521c527a7ea52b47504e9b89063bc2b405c9060640160006040518083038186803b158015610d6057600080fd5b505af4158015610d74573d6000803e3d6000fd5b50505050610dfb565b610d88826000611246565b60405163131836e760e21b8152600c60048201526001600160a01b03831660248201527321f7ee2a0c2852fd9521c527a7ea52b47504e9b890634c60db9c9060440160006040518083038186803b158015610de257600080fd5b505af4158015610df6573d6000803e3d6000fd5b505050505b610e06826001610ef7565b505b5050565b6005546001600160a01b03163314610e365760405162461bcd60e51b815260040161076f906119de565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610f245760405162461bcd60e51b815260040161076f906119de565b6000610f2f8461130a565b90508015610f9b576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610f899085815260200190565b60405180910390a3600191505061073f565b5060009392505050565b6001600160a01b0383166110075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076f565b6001600160a01b0382166110685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602860248201527f5343414c4152546f6b656e5f496e636f6d653a204e6f207472616e736665727360448201526708185b1b1bddd95960c21b606482015260840161076f565b600081848411156111465760405162461bcd60e51b815260040161076f9190611829565b5060006111538486611a4b565b95945050505050565b60008260000361116e5750600061073f565b600061117a8385611a5e565b9050826111878583611a29565b146111de5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161076f565b9392505050565b6000818181121561073f57600080fd5b6000806112028385611a75565b9050600083121580156112155750838112155b8061122a575060008312801561122a57508381125b6111de57600080fd5b60008082121561124257600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561128557600061127383836114bb565b905061127f8482611549565b50610e06565b80821015610e0657600061129982846114bb565b90506112a584826115ad565b50505050565b6000806112b88385611a9d565b9050838110156111de5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161076f565b60008061131683610c36565b90508015611466576001600160a01b0383166000908152600b602052604090205461134190826112ab565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906113909084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611ab0565b90508061145f576001600160a01b0384166000908152600b602052604090205461143a90836114bb565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b031633146114995760405162461bcd60e51b815260040161076f906119de565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006111de83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611122565b6005546001600160a01b031633146115275760405162461bcd60e51b815260040161076f906119de565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61155382826115f1565b61158d61156e6108bc8360065461115c90919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116dc565b6001600160a01b039092166000908152600a602052604090209190915550565b6115b78282611719565b61158d6115d26108bc8360065461115c90919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906111f5565b6001600160a01b0382166116475760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161076f565b61165360008383610e06565b60025461166090826112ab565b6002556001600160a01b03821660009081526020819052604090205461168690826112ab565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806116e98385611acd565b9050600083121580156116fc5750838113155b8061122a575060008312801561122a57508381136111de57600080fd5b6001600160a01b0382166117795760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076f565b61178582600083610e06565b6117c281604051806060016040528060228152602001611aee602291396001600160a01b0385166000908152602081905260409020549190611122565b6001600160a01b0383166000908152602081905260409020556002546117e890826114bb565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116d0565b600060208083528351808285015260005b818110156118565785810183015185820160400152820161183a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a6657600080fd5b6000806040838503121561189f57600080fd5b82356118aa81611877565b946020939093013593505050565b6000602082840312156118ca57600080fd5b5035919050565b6000602082840312156118e357600080fd5b81356111de81611877565b60008060006060848603121561190357600080fd5b833561190e81611877565b9250602084013561191e81611877565b929592945050506040919091013590565b6000806040838503121561194257600080fd5b823561194d81611877565b9150602083013561195d81611877565b809150509250929050565b8015158114610a6657600080fd5b6000806040838503121561198957600080fd5b823561199481611877565b9150602083013561195d81611968565b600181811c908216806119b857607f821691505b6020821081036119d857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611a4657634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561073f5761073f611a13565b808202811582820484141761073f5761073f611a13565b8082018281126000831280158216821582161715611a9557611a95611a13565b505092915050565b8082018082111561073f5761073f611a13565b600060208284031215611ac257600080fd5b81516111de81611968565b818103600083128015838313168383128216171561145f5761145f611a1356fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ffdc79207330408a2e0e9f1d99a227f4e0c950ef2331b02561c39b6e628f13ed64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063715018a61161014f578063a9059cbb116100c1578063c27e4cfa1161007a578063c27e4cfa14610750578063cd43e22814610770578063d2d7ad83146107e1578063dd62ed3e146107f7578063f2fde38b1461083d578063fe0175351461085d57600080fd5b8063a9059cbb1461068a578063aa4bde28146106aa578063aee50b1e146106c0578063b1ba39ea146106e0578063b62496f514610700578063c02466681461073057600080fd5b80638da5cb5b116101135780638da5cb5b146105e257806395d89b41146106005780639dccf6f1146106155780639fad96831461062a578063a457c2d71461064a578063a8b9d2401461066a57600080fd5b8063715018a614610557578063781edb3c1461056c578063880bcbc11461058c5780638c0b5e22146105ac5780638d0445ee146105c257600080fd5b806330bb4cff116101e857806349bd5a5e116101ac57806349bd5a5e146104995780634e71d92d146104cd5780635ebf4db9146104e257806364b0f653146105025780636843cd841461051757806370a082311461053757600080fd5b806330bb4cff14610408578063313ce5671461041d57806331e79db014610439578063395093511461045957806342966c681461047957600080fd5b80631694505e1161023a5780631694505e1461033157806318160ddd146103695780631e293c101461038857806323b872dd146103a857806327a14fc2146103c85780632c1f5216146103e857600080fd5b8063064a59d01461028257806306fdde03146102b8578063095ea7b3146102da578063098df585146102fa5780630bd05b691461031c57600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a390600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c457600080fd5b506102cd6108a3565b6040516102af91906135fb565b3480156102e657600080fd5b506102a36102f536600461365e565b610935565b34801561030657600080fd5b5061031a61031536600461368a565b61094c565b005b34801561032857600080fd5b5061031a610a72565b34801561033d57600080fd5b50600654610351906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561037557600080fd5b506003545b6040519081526020016102af565b34801561039457600080fd5b5061031a6103a336600461368a565b610ab1565b3480156103b457600080fd5b506102a36103c33660046136a3565b610ba1565b3480156103d457600080fd5b5061031a6103e336600461368a565b610c0a565b3480156103f457600080fd5b50600754610351906001600160a01b031681565b34801561041457600080fd5b5061037a610d5b565b34801561042957600080fd5b50604051601281526020016102af565b34801561044557600080fd5b5061031a6104543660046136e4565b610dce565b34801561046557600080fd5b506102a361047436600461365e565b610e5b565b34801561048557600080fd5b5061031a61049436600461368a565b610e91565b3480156104a557600080fd5b506103517f000000000000000000000000627c4067ad3e9f0f93814a2bbd681c2d79e7051581565b3480156104d957600080fd5b5061031a610e9e565b3480156104ee57600080fd5b5061031a6104fd36600461368a565b610f13565b34801561050e57600080fd5b5061037a610f6e565b34801561052357600080fd5b5061037a6105323660046136e4565b610fb8565b34801561054357600080fd5b5061037a6105523660046136e4565b611028565b34801561056357600080fd5b5061031a611043565b34801561057857600080fd5b5061031a61058736600461370f565b6110b7565b34801561059857600080fd5b5061031a6105a736600461370f565b611181565b3480156105b857600080fd5b5061037a60095481565b3480156105ce57600080fd5b5061031a6105dd366004613748565b611243565b3480156105ee57600080fd5b506000546001600160a01b0316610351565b34801561060c57600080fd5b506102cd61169c565b34801561062157600080fd5b5061031a6116ab565b34801561063657600080fd5b5061031a6106453660046137a9565b6116ec565b34801561065657600080fd5b506102a361066536600461365e565b611820565b34801561067657600080fd5b5061037a6106853660046136e4565b61186f565b34801561069657600080fd5b506102a36106a536600461365e565b6118a2565b3480156106b657600080fd5b5061037a60085481565b3480156106cc57600080fd5b5061031a6106db36600461368a565b6118af565b3480156106ec57600080fd5b5061031a6106fb3660046137a9565b611979565b34801561070c57600080fd5b506102a361071b3660046136e4565b60176020526000908152604090205460ff1681565b34801561073c57600080fd5b5061031a61074b36600461370f565b611a4d565b34801561075c57600080fd5b5061031a61076b36600461370f565b611b0f565b34801561077c57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102af565b3480156107ed57600080fd5b5061037a600c5481565b34801561080357600080fd5b5061037a61081236600461380e565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561084957600080fd5b5061031a6108583660046136e4565b611b91565b34801561086957600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107ad565b6060600480546108b29061383c565b80601f01602080910402602001604051908101604052809291908181526020018280546108de9061383c565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b6000610942338484611ce1565b5060015b92915050565b6000546001600160a01b0316331461097f5760405162461bcd60e51b815260040161097690613876565b60405180910390fd5b4781106109dd5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610976565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a2a576040519150601f19603f3d011682016040523d82523d6000602084013e610a2f565b606091505b505090508015610a6e576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610a9c5760405162461bcd60e51b815260040161097690613876565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610adb5760405162461bcd60e51b815260040161097690613876565b670de0b6b3a76400006103e8610af060035490565b610afb9060026138c1565b610b0591906138ee565b610b0f91906138ee565b811015610b6e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610976565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610bae848484611e06565b610c008433610bfb85604051806060016040528060288152602001613bb6602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061254e565b611ce1565b5060019392505050565b6000546001600160a01b03163314610c345760405162461bcd60e51b815260040161097690613876565b670de0b6b3a76400006103e8610c4960035490565b610c549060146138c1565b610c5e91906138ee565b610c6891906138ee565b811015610cc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610976565b6008548103610d285760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610976565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc99190613902565b905090565b6000546001600160a01b03163314610df85760405162461bcd60e51b815260040161097690613876565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610942918590610bfb9086611c7b565b610e9b3382612588565b50565b6007546040516303eb9a5f60e61b8152336004820152600060248201526001600160a01b039091169063fae697c0906044016020604051808303816000875af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9b919061391b565b6000546001600160a01b03163314610f3d5760405162461bcd60e51b815260040161097690613876565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e26565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610da5573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109469190613902565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b0316331461106d5760405162461bcd60e51b815260040161097690613876565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110e15760405162461bcd60e51b815260040161097690613876565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036111215760405162461bcd60e51b815260040161097690613938565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b031633146111ab5760405162461bcd60e51b815260040161097690613876565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036111eb5760405162461bcd60e51b815260040161097690613938565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611175565b6000546001600160a01b0316331461126d5760405162461bcd60e51b815260040161097690613876565b600d546001600160a01b038481169116146113d2576001600160a01b0383166112d85760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610976565b7f000000000000000000000000627c4067ad3e9f0f93814a2bbd681c2d79e705156001600160a01b0316836001600160a01b0316036113595760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610976565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b03838116911614611537576001600160a01b03821661143d5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610976565b7f000000000000000000000000627c4067ad3e9f0f93814a2bbd681c2d79e705156001600160a01b0316826001600160a01b0316036114be5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610976565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b03828116911614611697576001600160a01b0381166115a25760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610976565b7f000000000000000000000000627c4067ad3e9f0f93814a2bbd681c2d79e705156001600160a01b0316816001600160a01b0316036116235760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610976565b600f54604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691831690600a01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b505050565b6060600580546108b29061383c565b6000546001600160a01b031633146116d55760405162461bcd60e51b815260040161097690613876565b6b033b2e3c9fd0803ce80000006008819055600955565b6000546001600160a01b031633146117165760405162461bcd60e51b815260040161097690613876565b8082846117238789613982565b61172d9190613982565b6117379190613982565b6117419190613982565b60ff166005116117935760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610976565b6117a260108686868686612693565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b60006109423384610bfb85604051806060016040528060258152602001613bfe602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061254e565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610fe7565b6000610942338484611e06565b6000546001600160a01b031633146118d95760405162461bcd60e51b815260040161097690613876565b600c5481036119465760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610976565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146119a35760405162461bcd60e51b815260040161097690613876565b8082846119b08789613982565b6119ba9190613982565b6119c49190613982565b6119ce9190613982565b60ff16600511611a205760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610976565b611a2f60108686868686612978565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016117bb565b6000546001600160a01b03163314611a775760405162461bcd60e51b815260040161097690613876565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611ab75760405162461bcd60e51b815260040161097690613938565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611175565b6000546001600160a01b03163314611b395760405162461bcd60e51b815260040161097690613876565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611175565b6000546001600160a01b03163314611bbb5760405162461bcd60e51b815260040161097690613876565b6001600160a01b038116611c205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610976565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c88838561399b565b905083811015611cda5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610976565b9392505050565b6001600160a01b038316611d435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610976565b6001600160a01b038216611da45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610976565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e2c5760405162461bcd60e51b8152600401610976906139ae565b6001600160a01b038216611e525760405162461bcd60e51b8152600401610976906139f3565b80600003611e665761169783836000612c79565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601390915290205460ff928316929182169116158015611ec857506001600160a01b03841660009081526013602052604090205460ff16155b1561220657600754600160a01b900460ff16611f265760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610976565b6001600160a01b03851660009081526017602052604090205460ff168015611f6757506001600160a01b03841660009081526015602052604090205460ff16155b1561203857600954831115611fcf5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610976565b600854611fdb85611028565b611fe5908561399b565b11156120335760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610976565b612206565b6001600160a01b03841660009081526017602052604090205460ff16801561207957506001600160a01b03851660009081526015602052604090205460ff16155b15612103576009548311156120e35760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610976565b600a80546001600160a01b0319166001600160a01b038616179055612206565b6001600160a01b03841660009081526015602052604090205460ff166121875760085461212f85611028565b612139908561399b565b11156120335760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610976565b600a54600160a01b900460ff161580156121b957506001600160a01b03851660009081526015602052604090205460ff165b1561220657600954600a80546001600160a01b0390811660009081526002602090815260408083208b8516845290915290209290925554600b80546001600160a01b031916919092161790555b6122108282612d85565b6000600c5461221e30611028565b6007549111159150600160a01b900460ff1680156122395750805b801561224f5750600a54600160a01b900460ff16155b80156122665750601854600160281b900460ff1615155b801561228a57506001600160a01b03851660009081526017602052604090205460ff165b80156122af57506001600160a01b03861660009081526014602052604090205460ff16155b80156122d457506001600160a01b03851660009081526014602052604090205460ff16155b1561230257600a805460ff60a01b1916600160a01b1790556122f4612ffd565b600a805460ff60a01b191690555b600a54600090600160a01b900460ff161580156123285750600754600160a01b900460ff165b6001600160a01b03881660009081526014602052604090205490915060ff168061236a57506001600160a01b03861660009081526014602052604090205460ff165b15612373575060005b80801561238b5750601854600160281b900460ff1615155b15612454576018546000906064906123ad90600160281b900460ff16886138c1565b6123b791906138ee565b6018549091506000906064906123d7906301000000900460ff16896138c1565b6123e191906138ee565b90506123ed8288613a36565b96506123fa893084612c79565b80156124515761240a3082612588565b60185460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61245f878787612c79565b6007546001600160a01b031663e30443bc8861247a81611028565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124c057600080fd5b505af19250505080156124d1575060015b506007546001600160a01b031663e30443bc876124ed81611028565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561253357600080fd5b505af1925050508015612544575060015b5050505050505050565b600081848411156125725760405162461bcd60e51b815260040161097691906135fb565b50600061257f8486613a36565b95945050505050565b6001600160a01b0382166125e85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610976565b61262581604051806060016040528060228152602001613b6e602291396001600160a01b038516600090815260016020526040902054919061254e565b6001600160a01b03831660009081526001602052604090205560035461264b90826133b6565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600286015460ff86811691161461271457604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613bde833981519152916126fa9160481b90613a49565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff8581166201000090920416146127a857604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613bde833981519152916127879160481b90613a49565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461283f576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613bde8339815191529161281b9160481b90613a49565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146128d5576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613bde833981519152916128af9160481b90613a49565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612970576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613bde833981519152916129489160481b90613a49565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff8681166101009092041614612a0957604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613bde833981519152916129ea9160481b90613a49565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612aa257604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613bde83398151915291612a7f9160481b90613a49565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612b3b576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613bde83398151915291612b169160481b90613a49565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612bd3576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613bde83398151915291612bac9160481b90613a49565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612970576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613bde83398151915291612c479160481b90613a49565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612c9f5760405162461bcd60e51b8152600401610976906139ae565b6001600160a01b038216612cc55760405162461bcd60e51b8152600401610976906139f3565b612d0281604051806060016040528060268152602001613b90602691396001600160a01b038616600090815260016020526040902054919061254e565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612d319082611c7b565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df99085815260200190565b6018805464ffffffffff191690558015612e0e576012546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b8115612e88576012546018805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b80158015612e94575081155b15612f0e576012546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60185460ff600160201b820481169163010000008104821691620100008204811691612f4291610100820481169116613982565b612f4c9190613982565b612f569190613982565b612f609190613982565b6018805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610a65565b600061300830611028565b600c54909150479061301b9060076138c1565b82111561303357600c546130309060076138c1565b91505b601854600090819060029060ff600160281b82048116916130559116876138c1565b61305f91906138ee565b61306991906138ee565b60185490915060009060ff600160281b820481169161309191600160201b90910416876138c1565b61309b91906138ee565b905060006130a9828461399b565b6130b39087613a36565b90506130be816133f8565b60006130ca8647613a36565b60185490915060009060ff600160201b8204811691630100000081048216916130f69160029116613a60565b6131009190613982565b61310a9190613982565b6018546131219190600160281b900460ff16613a82565b60185460ff9182169250600091600291849161313e9116866138c1565b61314891906138ee565b61315291906138ee565b601854909150600090839061316f90610100900460ff16866138c1565b61317991906138ee565b90506000613187828461399b565b6131919086613a36565b600f546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146131df576040519150601f19603f3d011682016040523d82523d6000602084013e6131e4565b606091505b5050600e54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114613234576040519150601f19603f3d011682016040523d82523d6000602084013e613239565b606091505b509099505087156132905761324e888461354e565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156132e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613308919061391b565b905080156133a857600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561335657600080fd5b505af115801561336a573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161339f91815260200190565b60405180910390a15b505050505050505050505050565b6000611cda83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061254e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061342d5761342d613a9b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134aa9190613ab1565b816001815181106134bd576134bd613a9b565b6001600160a01b0392831660209182029290920101526006546134e39130911684611ce1565b600654600b5460405163791ac94760e01b81526001600160a01b039283169263791ac9479261352092879260009288929116904290600401613ace565b600060405180830381600087803b15801561353a57600080fd5b505af1158015612970573d6000803e3d6000fd5b6006546135669030906001600160a01b031684611ce1565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156135d6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e549190613b3f565b600060208083528351808285015260005b818110156136285785810183015185820160400152820161360c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e9b57600080fd5b6000806040838503121561367157600080fd5b823561367c81613649565b946020939093013593505050565b60006020828403121561369c57600080fd5b5035919050565b6000806000606084860312156136b857600080fd5b83356136c381613649565b925060208401356136d381613649565b929592945050506040919091013590565b6000602082840312156136f657600080fd5b8135611cda81613649565b8015158114610e9b57600080fd5b6000806040838503121561372257600080fd5b823561372d81613649565b9150602083013561373d81613701565b809150509250929050565b60008060006060848603121561375d57600080fd5b833561376881613649565b9250602084013561377881613649565b9150604084013561378881613649565b809150509250925092565b803560ff811681146137a457600080fd5b919050565b600080600080600060a086880312156137c157600080fd5b6137ca86613793565b94506137d860208701613793565b93506137e660408701613793565b92506137f460608701613793565b915061380260808701613793565b90509295509295909350565b6000806040838503121561382157600080fd5b823561382c81613649565b9150602083013561373d81613649565b600181811c9082168061385057607f821691505b60208210810361387057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610946576109466138ab565b634e487b7160e01b600052601260045260246000fd5b6000826138fd576138fd6138d8565b500490565b60006020828403121561391457600080fd5b5051919050565b60006020828403121561392d57600080fd5b8151611cda81613701565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60ff8181168382160190811115610946576109466138ab565b80820180821115610946576109466138ab565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610946576109466138ab565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613a7357613a736138d8565b8060ff84160491505092915050565b60ff8281168282160390811115610946576109466138ab565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613ac357600080fd5b8151611cda81613649565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b1e5784516001600160a01b031683529383019391830191600101613af9565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613b5457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c1c0f1fd215437014506c71d2bf5fd23517fb2034c25f2c242b30576a85ba20664736f6c63430008110033

Libraries Used


Deployed Bytecode Sourcemap

18928:26997:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19260:28;;;;;;;;;;-1:-1:-1;19260:28:0;;;;-1:-1:-1;;;19260:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;19260:28:0;;;;;;;;9807:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10787:194::-;;;;;;;;;;-1:-1:-1;10787:194:0;;;;;:::i;:::-;;:::i;32722:347::-;;;;;;;;;;-1:-1:-1;32722:347:0;;;;;:::i;:::-;;:::i;:::-;;25593:88;;;;;;;;;;;;;:::i;18974:30::-;;;;;;;;;;-1:-1:-1;18974:30:0;;;;-1:-1:-1;;;;;18974:30:0;;;;;;-1:-1:-1;;;;;1579:32:1;;;1561:51;;1549:2;1534:18;18974:30:0;1400:218:1;10128:108:0;;;;;;;;;;-1:-1:-1;10216:12:0;;10128:108;;;1769:25:1;;;1757:2;1742:18;10128:108:0;1623:177:1;31283:323:0;;;;;;;;;;-1:-1:-1;31283:323:0;;;;;:::i;:::-;;:::i;10989:454::-;;;;;;;;;;-1:-1:-1;10989:454:0;;;;;:::i;:::-;;:::i;31614:450::-;;;;;;;;;;-1:-1:-1;31614:450:0;;;;;:::i;:::-;;:::i;19208:43::-;;;;;;;;;;-1:-1:-1;19208:43:0;;;;-1:-1:-1;;;;;19208:43:0;;;33166:141;;;;;;;;;;;;;:::i;10027:93::-;;;;;;;;;;-1:-1:-1;10027:93:0;;10110:2;2653:36:1;;2641:2;2626:18;10027:93:0;2511:184:1;26723:130:0;;;;;;;;;;-1:-1:-1;26723:130:0;;;;;:::i;:::-;;:::i;11451:293::-;;;;;;;;;;-1:-1:-1;11451:293:0;;;;;:::i;:::-;;:::i;33077:81::-;;;;;;;;;;-1:-1:-1;33077:81:0;;;;;:::i;:::-;;:::i;19011:38::-;;;;;;;;;;;;;;;32611:103;;;;;;;;;;;;;:::i;32434:169::-;;;;;;;;;;-1:-1:-1;32434:169:0;;;;;:::i;:::-;;:::i;33658:142::-;;;;;;;;;;;;;:::i;33493:157::-;;;;;;;;;;-1:-1:-1;33493:157:0;;;;;:::i;:::-;;:::i;10244:143::-;;;;;;;;;;-1:-1:-1;10244:143:0;;;;;:::i;:::-;;:::i;8925:148::-;;;;;;;;;;;;;:::i;27255:396::-;;;;;;;;;;-1:-1:-1;27255:396:0;;;;;:::i;:::-;;:::i;26861:386::-;;;;;;;;;;-1:-1:-1;26861:386:0;;;;;:::i;:::-;;:::i;19439:54::-;;;;;;;;;;;;;;;;27659:1660;;;;;;;;;;-1:-1:-1;27659:1660:0;;;;;:::i;:::-;;:::i;8711:79::-;;;;;;;;;;-1:-1:-1;8749:7:0;8776:6;-1:-1:-1;;;;;8776:6:0;8711:79;;9915:104;;;;;;;;;;;;;:::i;45798:124::-;;;;;;;;;;;;;:::i;29345:949::-;;;;;;;;;;-1:-1:-1;29345:949:0;;;;;:::i;:::-;;:::i;11752:393::-;;;;;;;;;;-1:-1:-1;11752:393:0;;;;;:::i;:::-;;:::i;33315:170::-;;;;;;;;;;-1:-1:-1;33315:170:0;;;;;:::i;:::-;;:::i;10395:200::-;;;;;;;;;;-1:-1:-1;10395:200:0;;;;;:::i;:::-;;:::i;19374:58::-;;;;;;;;;;;;;;;;32072:354;;;;;;;;;;-1:-1:-1;32072:354:0;;;;;:::i;:::-;;:::i;30302:973::-;;;;;;;;;;-1:-1:-1;30302:973:0;;;;;:::i;:::-;;:::i;20584:57::-;;;;;;;;;;-1:-1:-1;20584:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26359:356;;;;;;;;;;-1:-1:-1;26359:356:0;;;;;:::i;:::-;;:::i;26133:218::-;;;;;;;;;;-1:-1:-1;26133:218:0;;;;;:::i;:::-;;:::i;33808:334::-;;;;;;;;;;-1:-1:-1;33957:23:0;;;;;;;33995;;;;;;-1:-1:-1;;;34033:21:0;;;;;-1:-1:-1;;;34069:18:0;;;;;-1:-1:-1;;;34102:21:0;;;;33808:334;;;;5103:4:1;5091:17;;;5073:36;;5145:17;;;5140:2;5125:18;;5118:45;5199:17;;;5179:18;;;5172:45;;;;5253:17;;5248:2;5233:18;;5226:45;5308:17;;;5302:3;5287:19;;5280:46;5060:3;5045:19;33808:334:0;4834:498:1;19588:64:0;;;;;;;;;;;;;;;;10603:176;;;;;;;;;;-1:-1:-1;10603:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10744:18:0;;;10717:7;10744:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10603:176;9081:281;;;;;;;;;;-1:-1:-1;9081:281:0;;;;;:::i;:::-;;:::i;34150:340::-;;;;;;;;;;-1:-1:-1;34300:24:0;;;;;;;;;34339;;;;;;-1:-1:-1;;;34378:22:0;;;;;-1:-1:-1;;;34415:19:0;;;;;-1:-1:-1;;;34449:22:0;;;;34150:340;;9807:100;9861:13;9894:5;9887:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9807:100;:::o;10787:194::-;10895:4;10912:39;8099:10;10935:7;10944:6;10912:8;:39::i;:::-;-1:-1:-1;10969:4:0;10787:194;;;;;:::o;32722:347::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;;;;;;;;;32825:21:::1;32816:6;:30;32794:118;;;::::0;-1:-1:-1;;;32794:118:0;;6678:2:1;32794:118:0::1;::::0;::::1;6660:21:1::0;6717:2;6697:18;;;6690:30;6756:34;6736:18;;;6729:62;-1:-1:-1;;;6807:18:1;;;6800:36;6853:19;;32794:118:0::1;6476:402:1::0;32794:118:0::1;32924:12;8776:6:::0;;32942:40:::1;::::0;-1:-1:-1;;;;;8776:6:0;;;;32971;;32924:12;32942:40;32924:12;32942:40;32971:6;8776;32942:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32923:59;;;32997:7;32993:69;;;33026:24;::::0;1769:25:1;;;33026:24:0::1;::::0;1757:2:1;1742:18;33026:24:0::1;;;;;;;;32993:69;32783:286;32722:347:::0;:::o;25593:88::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;25650:16:::1;:23:::0;;-1:-1:-1;;;;25650:23:0::1;-1:-1:-1::0;;;25650:23:0::1;::::0;;25593:88::o;31283:323::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;31429:4:::1;31421;31400:13;10216:12:::0;;;10128:108;31400:13:::1;:17;::::0;31416:1:::1;31400:17;:::i;:::-;31399:26;;;;:::i;:::-;31398:35;;;;:::i;:::-;31386:8;:47;;31364:136;;;::::0;-1:-1:-1;;;31364:136:0;;7857:2:1;31364:136:0::1;::::0;::::1;7839:21:1::0;7896:2;7876:18;;;7869:30;7935:34;7915:18;;;7908:62;-1:-1:-1;;;7986:18:1;;;7979:37;8033:19;;31364:136:0::1;7655:403:1::0;31364:136:0::1;31553:11;::::0;31516:49:::1;::::0;31543:8;;31516:49:::1;::::0;;;::::1;31576:11;:22:::0;31283:323::o;10989:454::-;11129:4;11146:36;11156:6;11164:9;11175:6;11146:9;:36::i;:::-;11193:220;11216:6;8099:10;11264:138;11320:6;11264:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11264:19:0;;;;;;:11;:19;;;;;;;;8099:10;11264:33;;;;;;;;;;:37;:138::i;:::-;11193:8;:220::i;:::-;-1:-1:-1;11431:4:0;10989:454;;;;;:::o;31614:450::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;31756:4:::1;31748;31726:13;10216:12:::0;;;10128:108;31726:13:::1;:18;::::0;31742:2:::1;31726:18;:::i;:::-;31725:27;;;;:::i;:::-;31724:36;;;;:::i;:::-;31712:8;:48;;31690:134;;;::::0;-1:-1:-1;;;31690:134:0;;8265:2:1;31690:134:0::1;::::0;::::1;8247:21:1::0;8304:2;8284:18;;;8277:30;8343:34;8323:18;;;8316:62;-1:-1:-1;;;8394:18:1;;;8387:34;8438:19;;31690:134:0::1;8063:400:1::0;31690:134:0::1;31869:15;;31857:8;:27:::0;31835:120:::1;;;::::0;-1:-1:-1;;;31835:120:0;;8670:2:1;31835:120:0::1;::::0;::::1;8652:21:1::0;8709:2;8689:18;;;8682:30;8748:34;8728:18;;;8721:62;-1:-1:-1;;;8799:18:1;;;8792:41;8850:19;;31835:120:0::1;8468:407:1::0;31835:120:0::1;32003:15;::::0;31971:48:::1;::::0;31993:8;;31971:48:::1;::::0;;;::::1;32030:15;:26:::0;31614:450::o;33166:141::-;33256:15;;:43;;;-1:-1:-1;;;33256:43:0;;;;33229:7;;-1:-1:-1;;;;;33256:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33249:50;;33166:141;:::o;26723:130::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;26800:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;26800:45:0;;-1:-1:-1;;;;;1579:32:1;;;26800:45:0::1;::::0;::::1;1561:51:1::0;26800:15:0;;::::1;::::0;:36:::1;::::0;1534:18:1;;26800:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26723:130:::0;:::o;11451:293::-;8099:10;11564:4;11653:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11653:34:0;;;;;;;;;;11564:4;;11581:133;;11631:7;;11653:50;;11692:10;11653:38;:50::i;33077:81::-;33126:24;33132:10;33144:5;33126;:24::i;:::-;33077:81;:::o;32611:103::-;32648:15;;:58;;-1:-1:-1;;;32648:58:0;;32687:10;32648:58;;;9253:51:1;32648:15:0;9320:18:1;;;9313:50;-1:-1:-1;;;;;32648:15:0;;;;:30;;9226:18:1;;32648:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32434:169::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;32542:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;32542:53:0;;::::1;::::0;::::1;1769:25:1::0;;;-1:-1:-1;;;;;32542:15:0;;::::1;::::0;:43:::1;::::0;1742:18:1;;32542:53:0::1;1623:177:1::0;33658:142:0;33751:15;;:41;;;-1:-1:-1;;;33751:41:0;;;;33724:7;;-1:-1:-1;;;;;33751:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;33493:157;33608:15;;:34;;-1:-1:-1;;;33608:34:0;;-1:-1:-1;;;;;1579:32:1;;;33608:34:0;;;1561:51:1;33581:7:0;;33608:15;;:25;;1534:18:1;;33608:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10244:143::-;-1:-1:-1;;;;;10361:18:0;10334:7;10361:18;;;:9;:18;;;;;;;10244:143::o;8925:148::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;9032:1:::1;9016:6:::0;;8995:40:::1;::::0;-1:-1:-1;;;;;9016:6:0;;::::1;::::0;8995:40:::1;::::0;9032:1;;8995:40:::1;9063:1;9046:19:::0;;-1:-1:-1;;;;;;9046:19:0::1;::::0;;8925:148::o;27255:396::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27399:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;27377:142:::1;;;;-1:-1:-1::0;;;27377:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27530:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;27530:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27595:48;;154:41:1;;;27595:48:0::1;::::0;127:18:1;27595:48:0::1;;;;;;;;27255:396:::0;;:::o;26861:386::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27010:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;:43;::::1;;:31;::::0;;::::1;:43;;::::0;26988:135:::1;;;;-1:-1:-1::0;;;26988:135:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27134:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;;;;:42;;-1:-1:-1;;27134:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27192:47;;154:41:1;;;27192:47:0::1;::::0;127:18:1;27192:47:0::1;14:187:1::0;27659:1660:0;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;27828:15:::1;::::0;-1:-1:-1;;;;;27828:37:0;;::::1;:15:::0;::::1;:37;27824:546;;-1:-1:-1::0;;;;;27908:32:0;::::1;27882:125;;;::::0;-1:-1:-1;;;27882:125:0;;10237:2:1;27882:125:0::1;::::0;::::1;10219:21:1::0;10276:2;10256:18;;;10249:30;10315:33;10295:18;;;10288:61;10366:18;;27882:125:0::1;10035:355:1::0;27882:125:0::1;28070:13;-1:-1:-1::0;;;;;28048:35:0::1;:18;-1:-1:-1::0;;;;;28048:35:0::1;::::0;28022:128:::1;;;::::0;-1:-1:-1;;;28022:128:0;;10237:2:1;28022:128:0::1;::::0;::::1;10219:21:1::0;10276:2;10256:18;;;10249:30;10315:33;10295:18;;;10288:61;10366:18;;28022:128:0::1;10035:355:1::0;28022:128:0::1;28277:15;::::0;28170:137:::1;::::0;-1:-1:-1;;;10597:30:1;;-1:-1:-1;;;;;28277:15:0;;::::1;::::0;28170:137;::::1;::::0;10652:2:1;10643:12;28170:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;28322:15;:36:::0;;-1:-1:-1;;;;;;28322:36:0::1;-1:-1:-1::0;;;;;28322:36:0;::::1;;::::0;;27824:546:::1;28384:15;::::0;-1:-1:-1;;;;;28384:37:0;;::::1;:15:::0;::::1;:37;28380:546;;-1:-1:-1::0;;;;;28464:32:0;::::1;28438:125;;;::::0;-1:-1:-1;;;28438:125:0;;10868:2:1;28438:125:0::1;::::0;::::1;10850:21:1::0;10907:2;10887:18;;;10880:30;10946:33;10926:18;;;10919:61;10997:18;;28438:125:0::1;10666:355:1::0;28438:125:0::1;28626:13;-1:-1:-1::0;;;;;28604:35:0::1;:18;-1:-1:-1::0;;;;;28604:35:0::1;::::0;28578:128:::1;;;::::0;-1:-1:-1;;;28578:128:0;;10868:2:1;28578:128:0::1;::::0;::::1;10850:21:1::0;10907:2;10887:18;;;10880:30;10946:33;10926:18;;;10919:61;10997:18;;28578:128:0::1;10666:355:1::0;28578:128:0::1;28833:15;::::0;28726:137:::1;::::0;-1:-1:-1;;;11228:30:1;;-1:-1:-1;;;;;28833:15:0;;::::1;::::0;28726:137;::::1;::::0;11283:2:1;11274:12;28726:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;28878:15;:36:::0;;-1:-1:-1;;;;;;28878:36:0::1;-1:-1:-1::0;;;;;28878:36:0;::::1;;::::0;;28380:546:::1;28940:10;::::0;-1:-1:-1;;;;;28940:27:0;;::::1;:10:::0;::::1;:27;28936:376;;-1:-1:-1::0;;;;;28992:27:0;::::1;28984:66;;;::::0;-1:-1:-1;;;28984:66:0;;11499:2:1;28984:66:0::1;::::0;::::1;11481:21:1::0;11538:2;11518:18;;;11511:30;11577:28;11557:18;;;11550:56;11623:18;;28984:66:0::1;11297:350:1::0;28984:66:0::1;29108:13;-1:-1:-1::0;;;;;29091:30:0::1;:13;-1:-1:-1::0;;;;;29091:30:0::1;::::0;29065:118:::1;;;::::0;-1:-1:-1;;;29065:118:0;;11499:2:1;29065:118:0::1;::::0;::::1;11481:21:1::0;11538:2;11518:18;;;11511:30;11577:28;11557:18;;;11550:56;11623:18;;29065:118:0::1;11297:350:1::0;29065:118:0::1;29248:10;::::0;29203:56:::1;::::0;-1:-1:-1;;;11854:25:1;;-1:-1:-1;;;;;29248:10:0;;::::1;::::0;29203:56;::::1;::::0;11904:2:1;11895:12;29203:56:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;29274:10;:26:::0;;-1:-1:-1;;;;;;29274:26:0::1;-1:-1:-1::0;;;;;29274:26:0;::::1;;::::0;;28936:376:::1;27659:1660:::0;;;:::o;9915:104::-;9971:13;10004:7;9997:14;;;;;:::i;45798:124::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;19344:23:::1;45853:15;:27:::0;;;45891:11:::1;:23:::0;45798:124::o;29345:949::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;29778:16;29741:13;29701:16;29617:60:::1;29659:18:::0;29617;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;:177;;;;:::i;:::-;29596:198;;:1;:198;29574:271;;;::::0;-1:-1:-1;;;29574:271:0;;12273:2:1;29574:271:0::1;::::0;::::1;12255:21:1::0;12312:2;12292:18;;;12285:30;12351:25;12331:18;;;12324:53;12394:18;;29574:271:0::1;12071:347:1::0;29574:271:0::1;29856:209;29893:5;29913:18;29946;29979:16;30010:13;30038:16;29856:22;:209::i;:::-;30081:205;::::0;-1:-1:-1;;;12625:27:1;;12677:2;12668:12;30081:205:0::1;;::::0;;;;;::::1;::::0;;5103:4:1;5091:17;;;5073:36;;5145:17;;;5140:2;5125:18;;5118:45;5199:17;;;5179:18;;;5172:45;5253:17;;;5248:2;5233:18;;5226:45;5308:17;;5302:3;5287:19;;5280:46;30081:205:0;;;;::::1;::::0;;;;;5060:3:1;30081:205:0;;::::1;29345:949:::0;;;;;:::o;11752:393::-;11870:4;11887:228;8099:10;11937:7;11959:145;12016:15;11959:145;;;;;;;;;;;;;;;;;8099:10;11959:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11959:34:0;;;;;;;;;;;;:38;:145::i;33315:170::-;33430:15;;:47;;-1:-1:-1;;;33430:47:0;;-1:-1:-1;;;;;1579:32:1;;;33430:47:0;;;1561:51:1;33403:7:0;;33430:15;;:38;;1534:18:1;;33430:47:0;1400:218:1;10395:200:0;10506:4;10523:42;8099:10;10547:9;10558:6;10523:9;:42::i;32072:354::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;32190:23:::1;;32178:8;:35:::0;32156:136:::1;;;::::0;-1:-1:-1;;;32156:136:0;;12893:2:1;32156:136:0::1;::::0;::::1;12875:21:1::0;12932:2;12912:18;;;12905:30;12971:34;12951:18;;;12944:62;-1:-1:-1;;;13022:18:1;;;13015:49;13081:19;;32156:136:0::1;12691:415:1::0;32156:136:0::1;32349:23;::::0;32308:65:::1;::::0;32339:8;;32308:65:::1;::::0;;;::::1;32384:23;:34:::0;32072:354::o;30302:973::-;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;30745:17;30707:14;30666:17;30580:62:::1;30623:19:::0;30580;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;:182;;;;:::i;:::-;30559:203;;:1;:203;30537:277;;;::::0;-1:-1:-1;;;30537:277:0;;13313:2:1;30537:277:0::1;::::0;::::1;13295:21:1::0;13352:2;13332:18;;;13325:30;13391:26;13371:18;;;13364:54;13435:18;;30537:277:0::1;13111:348:1::0;30537:277:0::1;30825:215;30863:5;30883:19;30917;30951:17;30983:14;31012:17;30825:23;:215::i;:::-;31056:211;::::0;-1:-1:-1;;;13666:28:1;;13719:2;13710:12;31056:211:0::1;13464:264:1::0;26359:356:0;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26493:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;26471:131:::1;;;;-1:-1:-1::0;;;26471:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26613:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;26613:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26667:40;;154:41:1;;;26667:40:0::1;::::0;127:18:1;26667:40:0::1;14:187:1::0;26133:218:0;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26241:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:36;;-1:-1:-1;;26241:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26293:50;;154:41:1;;;26293:50:0::1;::::0;127:18:1;26293:50:0::1;14:187:1::0;9081:281:0;8838:6;;-1:-1:-1;;;;;8838:6:0;8099:10;8838:22;8830:67;;;;-1:-1:-1;;;8830:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9184:22:0;::::1;9162:110;;;::::0;-1:-1:-1;;;9162:110:0;;13935:2:1;9162:110:0::1;::::0;::::1;13917:21:1::0;13974:2;13954:18;;;13947:30;14013:34;13993:18;;;13986:62;-1:-1:-1;;;14064:18:1;;;14057:36;14110:19;;9162:110:0::1;13733:402:1::0;9162:110:0::1;9309:6;::::0;;9288:38:::1;::::0;-1:-1:-1;;;;;9288:38:0;;::::1;::::0;9309:6;::::1;::::0;9288:38:::1;::::0;::::1;9337:6;:17:::0;;-1:-1:-1;;;;;;9337:17:0::1;-1:-1:-1::0;;;;;9337:17:0;;;::::1;::::0;;;::::1;::::0;;9081:281::o;2948:181::-;3006:7;;3038:5;3042:1;3038;:5;:::i;:::-;3026:17;;3067:1;3062;:6;;3054:46;;;;-1:-1:-1;;;3054:46:0;;14472:2:1;3054:46:0;;;14454:21:1;14511:2;14491:18;;;14484:30;14550:29;14530:18;;;14523:57;14597:18;;3054:46:0;14270:351:1;3054:46:0;3120:1;2948:181;-1:-1:-1;;;2948:181:0:o;13608:378::-;-1:-1:-1;;;;;13744:19:0;;13736:68;;;;-1:-1:-1;;;13736:68:0;;14828:2:1;13736:68:0;;;14810:21:1;14867:2;14847:18;;;14840:30;14906:34;14886:18;;;14879:62;-1:-1:-1;;;14957:18:1;;;14950:34;15001:19;;13736:68:0;14626:400:1;13736:68:0;-1:-1:-1;;;;;13823:21:0;;13815:68;;;;-1:-1:-1;;;13815:68:0;;15233:2:1;13815:68:0;;;15215:21:1;15272:2;15252:18;;;15245:30;15311:34;15291:18;;;15284:62;-1:-1:-1;;;15362:18:1;;;15355:32;15404:19;;13815:68:0;15031:398:1;13815:68:0;-1:-1:-1;;;;;13894:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13946:32;;1769:25:1;;;13946:32:0;;1742:18:1;13946:32:0;;;;;;;;13608:378;;;:::o;34498:3174::-;-1:-1:-1;;;;;34630:18:0;;34622:68;;;;-1:-1:-1;;;34622:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34709:16:0;;34701:64;;;;-1:-1:-1;;;34701:64:0;;;;;;;:::i;:::-;34782:6;34792:1;34782:11;34778:93;;34810:28;34826:4;34832:2;34836:1;34810:15;:28::i;34778:93::-;-1:-1:-1;;;;;34902:31:0;;;34883:16;34902:31;;;:25;:31;;;;;;;;;34962:29;;;;;;;;;35023:23;;;:17;:23;;;;;;34902:31;;;;;34962:29;;;;35023:23;35022:24;:63;;;;-1:-1:-1;;;;;;35064:21:0;;;;;;:17;:21;;;;;;;;35063:22;35022:63;35004:1334;;;35120:16;;-1:-1:-1;;;35120:16:0;;;;35112:59;;;;-1:-1:-1;;;35112:59:0;;16446:2:1;35112:59:0;;;16428:21:1;16485:2;16465:18;;;16458:30;16524:32;16504:18;;;16497:60;16574:18;;35112:59:0;16244:354:1;35112:59:0;-1:-1:-1;;;;;35208:31:0;;;;;;:25;:31;;;;;;;;:79;;;;-1:-1:-1;;;;;;35261:26:0;;;;;;:22;:26;;;;;;;;35260:27;35208:79;35186:1141;;;35362:11;;35352:6;:21;;35322:135;;;;-1:-1:-1;;;35322:135:0;;16805:2:1;35322:135:0;;;16787:21:1;16844:2;16824:18;;;16817:30;16883:34;16863:18;;;16856:62;-1:-1:-1;;;16934:18:1;;;16927:38;16982:19;;35322:135:0;16603:404:1;35322:135:0;35532:15;;35515:13;35525:2;35515:9;:13::i;:::-;35506:22;;:6;:22;:::i;:::-;:41;;35476:139;;;;-1:-1:-1;;;35476:139:0;;17214:2:1;35476:139:0;;;17196:21:1;17253:2;17233:18;;;17226:30;17292:26;17272:18;;;17265:54;17336:18;;35476:139:0;17012:348:1;35476:139:0;35186:1141;;;-1:-1:-1;;;;;35659:29:0;;;;;;:25;:29;;;;;;;;:79;;;;-1:-1:-1;;;;;;35710:28:0;;;;;;:22;:28;;;;;;;;35709:29;35659:79;35637:690;;;35813:11;;35803:6;:21;;35773:137;;;;-1:-1:-1;;;35773:137:0;;17567:2:1;35773:137:0;;;17549:21:1;17606:2;17586:18;;;17579:30;17645:34;17625:18;;;17618:62;-1:-1:-1;;;17696:18:1;;;17689:40;17746:19;;35773:137:0;17365:406:1;35773:137:0;35929:4;:9;;-1:-1:-1;;;;;;35929:9:0;-1:-1:-1;;;;;35929:9:0;;;;;35637:690;;;-1:-1:-1;;;;;35965:26:0;;;;;;:22;:26;;;;;;;;35960:367;;36068:15;;36051:13;36061:2;36051:9;:13::i;:::-;36042:22;;:6;:22;:::i;:::-;:41;;36012:138;;;;-1:-1:-1;;;36012:138:0;;17978:2:1;36012:138:0;;;17960:21:1;18017:2;17997:18;;;17990:30;18056:25;18036:18;;;18029:53;18099:18;;36012:138:0;17776:347:1;35960:367:0;36177:9;;-1:-1:-1;;;36177:9:0;;;;36176:10;:42;;;;-1:-1:-1;;;;;;36190:28:0;;;;;;:22;:28;;;;;;;;36176:42;36172:155;;;36265:11;;36251:4;;;-1:-1:-1;;;;;36251:4:0;;;36239:17;;;;:11;:17;;;;;;;;:23;;;;;;;;;;:37;;;;36307:4;36295:9;:16;;-1:-1:-1;;;;;;36295:16:0;36307:4;;;;36295:16;;;36172:155;36350:37;36363:11;36376:10;36350:12;:37::i;:::-;36400:12;36443:23;;36415:24;36433:4;36415:9;:24::i;:::-;36497:16;;-1:-1:-1;;36415:51:0;;-1:-1:-1;;;;36497:16:0;;;;:40;;;;;36530:7;36497:40;:67;;;;-1:-1:-1;36555:9:0;;-1:-1:-1;;;36555:9:0;;;;36554:10;36497:67;:97;;;;-1:-1:-1;36581:9:0;;-1:-1:-1;;;36581:9:0;;;;:13;;36497:97;:143;;;;-1:-1:-1;;;;;;36611:29:0;;;;;;:25;:29;;;;;;;;36497:143;:185;;;;-1:-1:-1;;;;;;36658:24:0;;;;;;:18;:24;;;;;;;;36657:25;36497:185;:225;;;;-1:-1:-1;;;;;;36700:22:0;;;;;;:18;:22;;;;;;;;36699:23;36497:225;36479:362;;;36749:9;:16;;-1:-1:-1;;;;36749:16:0;-1:-1:-1;;;36749:16:0;;;36780:17;:15;:17::i;:::-;36812:9;:17;;-1:-1:-1;;;;36812:17:0;;;36479:362;36869:9;;36853:12;;-1:-1:-1;;;36869:9:0;;;;36868:10;:30;;;;-1:-1:-1;36882:16:0;;-1:-1:-1;;;36882:16:0;;;;36868:30;-1:-1:-1;;;;;36915:24:0;;;;;;:18;:24;;;;;;36853:45;;-1:-1:-1;36915:24:0;;;:50;;-1:-1:-1;;;;;;36943:22:0;;;;;;:18;:22;;;;;;;;36915:50;36911:98;;;-1:-1:-1;36992:5:0;36911:98;37023:7;:24;;;;-1:-1:-1;37034:9:0;;-1:-1:-1;;;37034:9:0;;;;:13;;37023:24;37019:414;;;37088:9;;37064:11;;37101:3;;37079:18;;-1:-1:-1;;;37088:9:0;;;;37079:6;:18;:::i;:::-;37078:26;;;;:::i;:::-;37150:8;;37064:40;;-1:-1:-1;37119:18:0;;37162:3;;37141:17;;37150:8;;;;;37141:6;:17;:::i;:::-;37140:25;;;;:::i;:::-;37119:46;-1:-1:-1;37189:12:0;37198:3;37189:6;:12;:::i;:::-;37180:21;;37216:41;37232:4;37246;37253:3;37216:15;:41::i;:::-;37278:14;;37274:148;;37313:38;37333:4;37340:10;37313:11;:38::i;:::-;37385:8;;37375:31;;;37385:8;;;;;;18431:36:1;;18498:2;18483:18;;18476:34;;;37375:31:0;;18404:18:1;37375:31:0;;;;;;;37274:148;37049:384;;37019:414;37443:33;37459:4;37465:2;37469:6;37443:15;:33::i;:::-;37506:15;;-1:-1:-1;;;;;37506:15:0;:26;37541:4;37548:15;37541:4;37548:9;:15::i;:::-;37506:58;;-1:-1:-1;;;;;;37506:58:0;;;;;;;-1:-1:-1;;;;;18729:32:1;;;37506:58:0;;;18711:51:1;18778:18;;;18771:34;18684:18;;37506:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37489:96;37599:15;;-1:-1:-1;;;;;37599:15:0;:26;37634:2;37639:13;37634:2;37639:9;:13::i;:::-;37599:54;;-1:-1:-1;;;;;;37599:54:0;;;;;;;-1:-1:-1;;;;;18729:32:1;;;37599:54:0;;;18711:51:1;18778:18;;;18771:34;18684:18;;37599:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37595:70;34611:3061;;;;34498:3174;;;:::o;3281:226::-;3401:7;3437:12;3429:6;;;;3421:29;;;;-1:-1:-1;;;3421:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3461:9:0;3473:5;3477:1;3473;:5;:::i;:::-;3461:17;3281:226;-1:-1:-1;;;;;3281:226:0:o;13149:451::-;-1:-1:-1;;;;;13233:21:0;;13225:67;;;;-1:-1:-1;;;13225:67:0;;19018:2:1;13225:67:0;;;19000:21:1;19057:2;19037:18;;;19030:30;19096:34;19076:18;;;19069:62;-1:-1:-1;;;19147:18:1;;;19140:31;19188:19;;13225:67:0;18816:397:1;13225:67:0;13384:105;13421:6;13384:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13384:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13363:18:0;;;;;;:9;:18;;;;;:126;13515:12;;:24;;13532:6;13515:16;:24::i;:::-;13500:12;:39;13555:37;;1769:25:1;;;13581:1:0;;-1:-1:-1;;;;;13555:37:0;;;;;1757:2:1;1742:18;13555:37:0;;;;;;;13149:451;;:::o;41048:1856::-;41314:21;;;;:43;;;;:21;;:43;41310:322;;41379:184;;-1:-1:-1;;;19420:32:1;;19477:2;19468:12;41379:184:0;;;;;;;;41456:21;;;;41534:14;;41379:184;;41456:21;;;;;41379:184;;;;-1:-1:-1;;;;;;;;;;;41379:184:0;;;41534:14;;;41379:184;:::i;:::-;;;;;;;;41578:21;;;:42;;-1:-1:-1;;41578:42:0;;;;;;;41310:322;41646:21;;;;:43;;;;:21;;;;;:43;41642:322;;41711:184;;-1:-1:-1;;;19907:32:1;;19964:2;19955:12;41711:184:0;;;;;;;;41788:21;;;;41866:14;;41711:184;;41788:21;;;;;;;;41711:184;;;;-1:-1:-1;;;;;;;;;;;41711:184:0;;;41866:14;;;41711:184;:::i;:::-;;;;;;;;41910:21;;;:42;;-1:-1:-1;;41910:42:0;;;;;;;;;41642:322;41978:19;;;;:39;;;;-1:-1:-1;;;41978:19:0;;;;:39;41974:308;;42039:178;;-1:-1:-1;;;20180:30:1;;20235:2;20226:12;42039:178:0;;;;;;;;42114:19;;;;42188:14;;42039:178;;42114:19;-1:-1:-1;;;42114:19:0;;;;;;42039:178;;;;-1:-1:-1;;;;;;;;;;;42039:178:0;;;42188:14;;;42039:178;:::i;:::-;;;;;;;;42232:19;;;:38;;-1:-1:-1;;42232:38:0;-1:-1:-1;;;42232:38:0;;;;;;;41974:308;42296:16;;;;:33;;;;-1:-1:-1;;;42296:16:0;;;;:33;42292:287;;42351:169;;-1:-1:-1;;;20451:27:1;;20503:2;20494:12;42351:169:0;;;;;;;;42423:16;;;;42491:14;;42351:169;;42423:16;-1:-1:-1;;;42423:16:0;;;;;;42351:169;;;;-1:-1:-1;;;;;;;;;;;42351:169:0;;;42491:14;;;42351:169;:::i;:::-;;;;;;;;42535:16;;;:32;;-1:-1:-1;;42535:32:0;-1:-1:-1;;;42535:32:0;;;;;;;42292:287;42593:19;;;;:39;;;;-1:-1:-1;;;42593:19:0;;;;:39;42589:308;;42654:178;;-1:-1:-1;;;20719:30:1;;20774:2;20765:12;42654:178:0;;;;;;;;42729:19;;;;42803:14;;42654:178;;42729:19;-1:-1:-1;;;42729:19:0;;;;;;42654:178;;;;-1:-1:-1;;;;;;;;;;;42654:178:0;;;42803:14;;;42654:178;:::i;:::-;;;;;;;;42847:19;;;:38;;-1:-1:-1;;42847:38:0;-1:-1:-1;;;42847:38:0;;;;;;;42589:308;41048:1856;;;;;;:::o;39143:1897::-;39415:22;;;;:45;;;;:22;;;;;:45;39411:329;;39482:187;;-1:-1:-1;;;20990:33:1;;21048:2;21039:12;39482:187:0;;;;;;;;39560:22;;;;39640:14;;39482:187;;39560:22;;;;;;;;39482:187;;;;-1:-1:-1;;;;;;;;;;;39482:187:0;;;39640:14;;;39482:187;:::i;:::-;;;;;;;;39684:22;;;:44;;-1:-1:-1;;39684:44:0;;;;;;;;;39411:329;39754:22;;;;:45;;;;:22;;;;;:45;39750:329;;39821:187;;-1:-1:-1;;;21264:33:1;;21322:2;21313:12;39821:187:0;;;;;;;;39899:22;;;;39979:14;;39821:187;;39899:22;;;;;;;;39821:187;;;;-1:-1:-1;;;;;;;;;;;39821:187:0;;;39979:14;;;39821:187;:::i;:::-;;;;;;;;40023:22;;;:44;;-1:-1:-1;;40023:44:0;;;;;;;;;39750:329;40093:20;;;;:41;;;;-1:-1:-1;;;40093:20:0;;;;:41;40089:315;;40156:181;;-1:-1:-1;;;21538:31:1;;21594:2;21585:12;40156:181:0;;;;;;;;40232:20;;;;40308:14;;40156:181;;40232:20;-1:-1:-1;;;40232:20:0;;;;;;40156:181;;;;-1:-1:-1;;;;;;;;;;;40156:181:0;;;40308:14;;;40156:181;:::i;:::-;;;;;;;;40352:20;;;:40;;-1:-1:-1;;40352:40:0;-1:-1:-1;;;40352:40:0;;;;;;;40089:315;40418:17;;;;:35;;;;-1:-1:-1;;;40418:17:0;;;;:35;40414:294;;40475:172;;-1:-1:-1;;;21810:28:1;;21863:2;21854:12;40475:172:0;;;;;;;;40548:17;;;;40618:14;;40475:172;;40548:17;-1:-1:-1;;;40548:17:0;;;;;;40475:172;;;;-1:-1:-1;;;;;;;;;;;40475:172:0;;;40618:14;;;40475:172;:::i;:::-;;;;;;;;40662:17;;;:34;;-1:-1:-1;;40662:34:0;-1:-1:-1;;;40662:34:0;;;;;;;40414:294;40722:20;;;;:41;;;;-1:-1:-1;;;40722:20:0;;;;:41;40718:315;;40785:181;;-1:-1:-1;;;22079:31:1;;22135:2;22126:12;40785:181:0;;;;;;;;40861:20;;;;40937:14;;40785:181;;40861:20;-1:-1:-1;;;40861:20:0;;;;;;40785:181;;;;-1:-1:-1;;;;;;;;;;;40785:181:0;;;40937:14;;;40785:181;:::i;:::-;;;;;;;;40981:20;;;:40;;;;;-1:-1:-1;;;40981:40:0;-1:-1:-1;;40981:40:0;;;;;;39143:1897;;;;;;:::o;12153:606::-;-1:-1:-1;;;;;12293:20:0;;12285:70;;;;-1:-1:-1;;;12285:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12374:23:0;;12366:71;;;;-1:-1:-1;;;12366:71:0;;;;;;;:::i;:::-;12526:108;12562:6;12526:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12526:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12506:17:0;;;;;;;:9;:17;;;;;;:128;;;;12668:20;;;;;;;:32;;12693:6;12668:24;:32::i;:::-;-1:-1:-1;;;;;12645:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12716:35;;;;;;;;;;12744:6;1769:25:1;;1757:2;1742:18;;1623:177;37680:1455:0;37756:13;:17;;-1:-1:-1;;37861:15:0;;;37889:285;;;;37936:24;;37920:13;:40;;37936:24;;;;;;;;-1:-1:-1;;37975:40:0;;;;;;;37991:24;;;;;;37975:40;;;;;-1:-1:-1;;38081:30:0;-1:-1:-1;;;38044:22:0;;;;38030:36;;-1:-1:-1;;38081:30:0;;-1:-1:-1;;;38092:19:0;;;;38081:30;;;;;-1:-1:-1;;38126:36:0;-1:-1:-1;;;38140:22:0;;;;-1:-1:-1;;;38126:36:0;;;;;;;37889:285;38188:11;38184:281;;;38232:23;;38216:13;:39;;38232:23;;;;-1:-1:-1;;38270:39:0;;;;;;;38232:23;38286;;;;;;38270:39;;;;;;;;-1:-1:-1;;38374:29:0;-1:-1:-1;;;38338:21:0;;;;;38324:35;;;;-1:-1:-1;;38374:29:0;;-1:-1:-1;;;38385:18:0;;;;38374:29;;;-1:-1:-1;;38418:35:0;-1:-1:-1;;;38432:21:0;;;;;;;38418:35;;;;;;;38184:281;38480:10;38479:11;:27;;;;;38495:11;38494:12;38479:27;38475:302;;;38539:24;;38523:13;:40;;38539:24;;;;;;;;-1:-1:-1;;38578:40:0;;;;;;;38594:24;;;;;;38578:40;;;;;-1:-1:-1;;38684:30:0;-1:-1:-1;;;38647:22:0;;;;38633:36;;-1:-1:-1;;38684:30:0;;-1:-1:-1;;;38695:19:0;;;;38684:30;;;;;-1:-1:-1;;38729:36:0;-1:-1:-1;;;38743:22:0;;;;-1:-1:-1;;;38729:36:0;;;;;;;38475:302;38923:11;;;-1:-1:-1;;;38923:11:0;;;;;38899:8;;;;;;38872:11;;;;;;38814:42;;38923:11;38843:13;;;;;38814;:42;:::i;:::-;:69;;;;:::i;:::-;:93;;;;:::i;:::-;:120;;;;:::i;:::-;38789:9;:145;;-1:-1:-1;;38789:145:0;;-1:-1:-1;;;38789:145:0;;;;;;;;;;;;;38950:177;;;38976:13;;;;;;;;;;22435:34:1;;38789:145:0;39004:13;;;;22500:2:1;22485:18;;22478:43;39032:11:0;;;;;22537:18:1;;;22530:43;;;;39058:8:0;;;;;22604:2:1;22589:18;;22582:43;-1:-1:-1;;;39081:11:0;;;;22656:3:1;22641:19;;22634:44;39107:9:0;;;;;;22709:3:1;22694:19;;22687:44;38950:177:0;;22399:3:1;22384:19;38950:177:0;22149:588:1;42912:1943:0;42958:23;42984:24;43002:4;42984:9;:24::i;:::-;43101:23;;42958:50;;-1:-1:-1;43047:21:0;;43101:27;;43127:1;43101:27;:::i;:::-;43083:15;:45;43079:123;;;43163:23;;:27;;43189:1;43163:27;:::i;:::-;43145:45;;43079:123;43310:9;;43212:12;;;;43335:1;;43310:9;-1:-1:-1;;;43310:9:0;;;;;43262:31;;43280:13;43262:15;:31;:::i;:::-;43261:58;;;;:::i;:::-;:75;;;;:::i;:::-;43408:9;;43235:101;;-1:-1:-1;43347:24:0;;43408:9;-1:-1:-1;;;43408:9:0;;;;;43375:29;;-1:-1:-1;;;43393:11:0;;;;43375:15;:29;:::i;:::-;43374:43;;;;:::i;:::-;43347:70;-1:-1:-1;43428:20:0;43483:34;43347:70;43483:15;:34;:::i;:::-;43451:67;;:15;:67;:::i;:::-;43428:90;;43531:31;43549:12;43531:17;:31::i;:::-;43575:27;43605:41;43629:17;43605:21;:41;:::i;:::-;43738:11;;43575:71;;-1:-1:-1;43657:19:0;;43738:11;-1:-1:-1;;;43738:11:0;;;;;43727:8;;;;;;43706:17;;43722:1;;43706:13;:17;:::i;:::-;43705:30;;;;:::i;:::-;:44;;;;:::i;:::-;43679:9;;:71;;;-1:-1:-1;;;43679:9:0;;;;:71;:::i;:::-;43813:13;;43657:93;;;;;-1:-1:-1;43761:26:0;;43870:1;;43657:93;;43791:35;;43813:13;43791:19;:35;:::i;:::-;43790:64;;;;:::i;:::-;:81;;;;:::i;:::-;43934:13;;43761:110;;-1:-1:-1;43882:26:0;;43964:11;;43912:35;;43934:13;;;;;43912:19;:35;:::i;:::-;43911:64;;;;:::i;:::-;43882:93;-1:-1:-1;43986:24:0;44049:39;43882:93;44049:18;:39;:::i;:::-;44013:76;;:19;:76;:::i;:::-;44124:10;;44116:53;;43986:103;;-1:-1:-1;;;;;;44124:10:0;;43986:103;;44116:53;;;;43986:103;44124:10;44116:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44202:15:0;;44194:84;;44102:67;;-1:-1:-1;;;;;;44202:15:0;;44231:18;;44194:84;;;;44231:18;44202:15;44194:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44180:98:0;;-1:-1:-1;;44295:19:0;;44291:253;;44331:50;44345:15;44362:18;44331:13;:50::i;:::-;44401:131;;;23270:25:1;;;23326:2;23311:18;;23304:34;;;23354:18;;;23347:34;;;44401:131:0;;23258:2:1;23243:18;44401:131:0;;;;;;;44291:253;44624:15;;44571:111;;-1:-1:-1;;;44571:111:0;;-1:-1:-1;;;;;44624:15:0;;;44571:111;;;18711:51:1;18778:18;;;18771:34;;;44556:12:0;;44586:4;;44571:30;;18684:18:1;;44571:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44556:126;;44697:7;44693:155;;;44721:15;;:64;;-1:-1:-1;;;44721:64:0;;;;;1769:25:1;;;-1:-1:-1;;;;;44721:15:0;;;;:46;;1742:18:1;;44721:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44805:31;44819:16;44805:31;;;;1769:25:1;;1757:2;1742:18;;1623:177;44805:31:0;;;;;;;;44693:155;42947:1908;;;;;;;;;;;;42912:1943::o;3137:136::-;3195:7;3222:43;3226:1;3229;3222:43;;;;;;;;;;;;;;;;;:3;:43::i;44863:496::-;44954:16;;;44968:1;44954:16;;;;;;;;44930:21;;44954:16;;;;;;;;;;-1:-1:-1;44954:16:0;44930:40;;44999:4;44981;44986:1;44981:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44981:23:0;;;:7;;;;;;;;;;:23;;;;45025:15;;:22;;;-1:-1:-1;;;45025:22:0;;;;:15;;;;;:20;;:22;;;;;44981:7;;45025:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45015:4;45020:1;45015:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45015:32:0;;;:7;;;;;;;;;:32;45090:15;;45058:62;;45075:4;;45090:15;45108:11;45058:8;:62::i;:::-;45131:15;;45301:9;;45131:220;;-1:-1:-1;;;45131:220:0;;-1:-1:-1;;;;;45131:15:0;;;;:66;;:220;;45212:11;;45131:15;;45282:4;;45301:9;;;45325:15;;45131:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45367:423;45481:15;;45449:62;;45466:4;;-1:-1:-1;;;;;45481:15:0;45499:11;45449:8;:62::i;:::-;45522:15;;45726;;45522:260;;-1:-1:-1;;;45522:260:0;;45594:4;45522:260;;;25517:34:1;25567:18;;;25560:34;;;45522:15:0;25610:18:1;;;25603:34;;;25653:18;;;25646:34;-1:-1:-1;;;;;45726:15:0;;;25696:19:1;;;25689:44;45756:15:0;25749:19:1;;;25742:35;45522:15:0;;;:31;;45561:9;;25451:19:1;;45522:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2700:247::-;2759:6;2812:2;2800:9;2791:7;2787:23;2783:32;2780:52;;;2828:1;2825;2818:12;2780:52;2867:9;2854:23;2886:31;2911:5;2886:31;:::i;3160:118::-;3246:5;3239:13;3232:21;3225:5;3222:32;3212:60;;3268:1;3265;3258:12;3283:382;3348:6;3356;3409:2;3397:9;3388:7;3384:23;3380:32;3377:52;;;3425:1;3422;3415:12;3377:52;3464:9;3451:23;3483:31;3508:5;3483:31;:::i;:::-;3533:5;-1:-1:-1;3590:2:1;3575:18;;3562:32;3603:30;3562:32;3603:30;:::i;:::-;3652:7;3642:17;;;3283:382;;;;;:::o;3670:529::-;3747:6;3755;3763;3816:2;3804:9;3795:7;3791:23;3787:32;3784:52;;;3832:1;3829;3822:12;3784:52;3871:9;3858:23;3890:31;3915:5;3890:31;:::i;:::-;3940:5;-1:-1:-1;3997:2:1;3982:18;;3969:32;4010:33;3969:32;4010:33;:::i;:::-;4062:7;-1:-1:-1;4121:2:1;4106:18;;4093:32;4134:33;4093:32;4134:33;:::i;:::-;4186:7;4176:17;;;3670:529;;;;;:::o;4204:156::-;4270:20;;4330:4;4319:16;;4309:27;;4299:55;;4350:1;4347;4340:12;4299:55;4204:156;;;:::o;4365:464::-;4450:6;4458;4466;4474;4482;4535:3;4523:9;4514:7;4510:23;4506:33;4503:53;;;4552:1;4549;4542:12;4503:53;4575:27;4592:9;4575:27;:::i;:::-;4565:37;;4621:36;4653:2;4642:9;4638:18;4621:36;:::i;:::-;4611:46;;4676:36;4708:2;4697:9;4693:18;4676:36;:::i;:::-;4666:46;;4731:36;4763:2;4752:9;4748:18;4731:36;:::i;:::-;4721:46;;4786:37;4818:3;4807:9;4803:19;4786:37;:::i;:::-;4776:47;;4365:464;;;;;;;;:::o;5337:388::-;5405:6;5413;5466:2;5454:9;5445:7;5441:23;5437:32;5434:52;;;5482:1;5479;5472:12;5434:52;5521:9;5508:23;5540:31;5565:5;5540:31;:::i;:::-;5590:5;-1:-1:-1;5647:2:1;5632:18;;5619:32;5660:33;5619:32;5660:33;:::i;5730:380::-;5809:1;5805:12;;;;5852;;;5873:61;;5927:4;5919:6;5915:17;5905:27;;5873:61;5980:2;5972:6;5969:14;5949:18;5946:38;5943:161;;6026:10;6021:3;6017:20;6014:1;6007:31;6061:4;6058:1;6051:15;6089:4;6086:1;6079:15;5943:161;;5730:380;;;:::o;6115:356::-;6317:2;6299:21;;;6336:18;;;6329:30;6395:34;6390:2;6375:18;;6368:62;6462:2;6447:18;;6115:356::o;7093:127::-;7154:10;7149:3;7145:20;7142:1;7135:31;7185:4;7182:1;7175:15;7209:4;7206:1;7199:15;7225:168;7298:9;;;7329;;7346:15;;;7340:22;;7326:37;7316:71;;7367:18;;:::i;7398:127::-;7459:10;7454:3;7450:20;7447:1;7440:31;7490:4;7487:1;7480:15;7514:4;7511:1;7504:15;7530:120;7570:1;7596;7586:35;;7601:18;;:::i;:::-;-1:-1:-1;7635:9:1;;7530:120::o;8880:184::-;8950:6;9003:2;8991:9;8982:7;8978:23;8974:32;8971:52;;;9019:1;9016;9009:12;8971:52;-1:-1:-1;9042:16:1;;8880:184;-1:-1:-1;8880:184:1:o;9374:245::-;9441:6;9494:2;9482:9;9473:7;9469:23;9465:32;9462:52;;;9510:1;9507;9500:12;9462:52;9542:9;9536:16;9561:28;9583:5;9561:28;:::i;9624:406::-;9826:2;9808:21;;;9865:2;9845:18;;;9838:30;9904:34;9899:2;9884:18;;9877:62;-1:-1:-1;;;9970:2:1;9955:18;;9948:40;10020:3;10005:19;;9624:406::o;11918:148::-;12006:4;11985:12;;;11999;;;11981:31;;12024:13;;12021:39;;;12040:18;;:::i;14140:125::-;14205:9;;;14226:10;;;14223:36;;;14239:18;;:::i;15434:401::-;15636:2;15618:21;;;15675:2;15655:18;;;15648:30;15714:34;15709:2;15694:18;;15687:62;-1:-1:-1;;;15780:2:1;15765:18;;15758:35;15825:3;15810:19;;15434:401::o;15840:399::-;16042:2;16024:21;;;16081:2;16061:18;;;16054:30;16120:34;16115:2;16100:18;;16093:62;-1:-1:-1;;;16186:2:1;16171:18;;16164:33;16229:3;16214:19;;15840:399::o;18128:128::-;18195:9;;;18216:11;;;18213:37;;;18230:18;;:::i;19491:209::-;-1:-1:-1;;19655:38:1;;;;19637:57;;19625:2;19610:18;;19491:209::o;22742:165::-;22780:1;22814:4;22811:1;22807:12;22838:3;22828:37;;22845:18;;:::i;:::-;22897:3;22890:4;22887:1;22883:12;22879:22;22874:27;;;22742:165;;;;:::o;22912:151::-;23002:4;22995:12;;;22981;;;22977:31;;23020:14;;23017:40;;;23037:18;;:::i;23803:127::-;23864:10;23859:3;23855:20;23852:1;23845:31;23895:4;23892:1;23885:15;23919:4;23916:1;23909:15;23935:251;24005:6;24058:2;24046:9;24037:7;24033:23;24029:32;24026:52;;;24074:1;24071;24064:12;24026:52;24106:9;24100:16;24125:31;24150:5;24125:31;:::i;24191:980::-;24453:4;24501:3;24490:9;24486:19;24532:6;24521:9;24514:25;24558:2;24596:6;24591:2;24580:9;24576:18;24569:34;24639:3;24634:2;24623:9;24619:18;24612:31;24663:6;24698;24692:13;24729:6;24721;24714:22;24767:3;24756:9;24752:19;24745:26;;24806:2;24798:6;24794:15;24780:29;;24827:1;24837:195;24851:6;24848:1;24845:13;24837:195;;;24916:13;;-1:-1:-1;;;;;24912:39:1;24900:52;;25007:15;;;;24972:12;;;;24948:1;24866:9;24837:195;;;-1:-1:-1;;;;;;;25088:32:1;;;;25083:2;25068:18;;25061:60;-1:-1:-1;;;25152:3:1;25137:19;25130:35;25049:3;24191:980;-1:-1:-1;;;24191:980:1:o;25788:306::-;25876:6;25884;25892;25945:2;25933:9;25924:7;25920:23;25916:32;25913:52;;;25961:1;25958;25951:12;25913:52;25990:9;25984:16;25974:26;;26040:2;26029:9;26025:18;26019:25;26009:35;;26084:2;26073:9;26069:18;26063:25;26053:35;;25788:306;;;;;:::o

Swarm Source

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