ETH Price: $2,692.15 (+2.02%)
Gas: 10 Gwei

Token

Diamond (DIAMONDS)
 

Overview

Max Total Supply

1,000,000,000,000 DIAMONDS

Holders

399 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
47,952,809.652432913359494117 DIAMONDS

Value
$0.00
0xF6D16557767f76C35bCe496bC5414ebd70517CBd
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Diamond deals to both issues via a tax structure that wrecks JEETS, and a utility that slashes GAS.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Diamond

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-25
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

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

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, 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)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

contract Ownable {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

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

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

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

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

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

library SignedSafeMath {
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

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

library SafeCast {
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(
            value <= type(uint224).max,
            "SafeCast: value doesn't fit in 224 bits"
        );
        return uint224(value);
    }

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(
            value <= type(uint128).max,
            "SafeCast: value doesn't fit in 128 bits"
        );
        return uint128(value);
    }

    function toUint96(uint256 value) internal pure returns (uint96) {
        require(
            value <= type(uint96).max,
            "SafeCast: value doesn't fit in 96 bits"
        );
        return uint96(value);
    }

    function toUint64(uint256 value) internal pure returns (uint64) {
        require(
            value <= type(uint64).max,
            "SafeCast: value doesn't fit in 64 bits"
        );
        return uint64(value);
    }

    function toUint32(uint256 value) internal pure returns (uint32) {
        require(
            value <= type(uint32).max,
            "SafeCast: value doesn't fit in 32 bits"
        );
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(
            value <= type(uint16).max,
            "SafeCast: value doesn't fit in 16 bits"
        );
        return uint16(value);
    }

    function toUint8(uint256 value) internal pure returns (uint8) {
        require(
            value <= type(uint8).max,
            "SafeCast: value doesn't fit in 8 bits"
        );
        return uint8(value);
    }

    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    function toInt128(int256 value) internal pure returns (int128) {
        require(
            value >= type(int128).min && value <= type(int128).max,
            "SafeCast: value doesn't fit in 128 bits"
        );
        return int128(value);
    }

    function toInt64(int256 value) internal pure returns (int64) {
        require(
            value >= type(int64).min && value <= type(int64).max,
            "SafeCast: value doesn't fit in 64 bits"
        );
        return int64(value);
    }

    function toInt32(int256 value) internal pure returns (int32) {
        require(
            value >= type(int32).min && value <= type(int32).max,
            "SafeCast: value doesn't fit in 32 bits"
        );
        return int32(value);
    }

    function toInt16(int256 value) internal pure returns (int16) {
        require(
            value >= type(int16).min && value <= type(int16).max,
            "SafeCast: value doesn't fit in 16 bits"
        );
        return int16(value);
    }

    function toInt8(int256 value) internal pure returns (int8) {
        require(
            value >= type(int8).min && value <= type(int8).max,
            "SafeCast: value doesn't fit in 8 bits"
        );
        return int8(value);
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        require(
            value <= uint256(type(int256).max),
            "SafeCast: value doesn't fit in an int256"
        );
        return int256(value);
    }
}

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

    function distributeDividends() external payable;

    function withdrawDividend() external;

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

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

abstract contract DividendPayingToken is
    ERC20,
    DividendPayingTokenInterface,
    DividendPayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SignedSafeMath for int256;
    using SafeCast for uint256;
    using SafeCast for int256;
    uint256 internal constant magnitude = 2**128;

    uint256 internal magnifiedDividendPerShare;

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

    uint256 public totalDividendsDistributed;

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

    receive() external payable {
        distributeDividends();
    }

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

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

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

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

    function _withdrawDividendOfUser(address payable user, address payable to)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend, to);
            (bool success, ) = to.call{value: _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))
                .toInt256()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256() / magnitude;
    }

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

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

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

    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 getAccount(address _account)
        public
        view
        returns (uint256 _withdrawableDividends, uint256 _withdrawnDividends)
    {
        _withdrawableDividends = withdrawableDividendOf(_account);
        _withdrawnDividends = withdrawnDividends[_account];
    }
}

contract DiamondDividendTracker is DividendPayingToken, Ownable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private tokenHoldersCount;
    mapping(address => bool) private tokenHoldersMap;

    mapping(address => bool) public excludedFromDividends;

    uint256 public immutable minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);

    constructor()
        DividendPayingToken(
            "Diamond_Dividend_Tracker",
            "Diamond_Dividend_Tracker"
        )
    {
        minimumTokenBalanceForDividends = 10000 * 10**18;
    }

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

    function _approve(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Diamond_Dividend_Tracker: No approvals allowed");
    }

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

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

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

        _setBalance(account, 0);

        if (tokenHoldersMap[account] == true) {
            tokenHoldersMap[account] = false;
            tokenHoldersCount.decrement();
        }

        emit ExcludeFromDividends(account);
    }

    function includeFromDividends(address account, uint256 balance)
        external
        onlyOwner
    {
        excludedFromDividends[account] = false;

        if (balance >= minimumTokenBalanceForDividends) {
            _setBalance(account, balance);

            if (tokenHoldersMap[account] == false) {
                tokenHoldersMap[account] = true;
                tokenHoldersCount.increment();
            }
        }

        emit ExcludeFromDividends(account);
    }

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

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersCount.current();
    }

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

        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);

            if (tokenHoldersMap[account] == false) {
                tokenHoldersMap[account] = true;
                tokenHoldersCount.increment();
            }
        } else {
            _setBalance(account, 0);

            if (tokenHoldersMap[account] == true) {
                tokenHoldersMap[account] = false;
                tokenHoldersCount.decrement();
            }
        }
    }

    function processAccount(address account, address toAccount)
        public
        onlyOwner
        returns (uint256)
    {
        uint256 amount = _withdrawDividendOfUser(
            payable(account),
            payable(toAccount)
        );
        return amount;
    }
}

contract Diamond is ERC20, Ownable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    string private constant _name = "Diamond";
    string private constant _symbol = "DIAMONDS";
    uint8 private constant _decimals = 18;
    uint256 private constant _tTotal = 1e12 * 10**18;

    IUniswapV2Router02 private uniswapV2Router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    bool private tradingOpen = false;
    uint256 private launchBlock = 0;
    address private uniswapV2Pair;

    IERC20 private MyBagsInstance;
    uint256 private minimumMyBagsToken = 1e8 * 10**18;
    uint256 private privateSaleTimestamp;
    uint256 private publicSaleTimestamp;

    mapping(address => bool) private automatedMarketMakerPairs;
    mapping(address => bool) public isExcludeFromFee;
    mapping(address => bool) public isBot;

    uint256 private walletLimitPercentage = 50;
    mapping(address => bool) public isExludeFromWalletLimit;

    uint256 private baseBuyTax = 10;
    uint256 public baseSellTax = 5;
    uint256 public sellPercentageOfHolding = 20;
    uint256 public minutesIntervalPerSell = 7200 minutes;
    mapping(address => uint256) public initialSellTimestamp;

    uint256 private autoLP = 27;
    uint256 private devFee = 40;
    uint256 private marketingFee = 33;

    uint256 public minContractTokensToSwap = 2e9 * 10**18;
    bool public swapAll = false;

    struct MinutesRangeTax {
        uint256 from;
        uint256 to;
        uint256 tax;
    }

    mapping(address => uint256) public initialBuyTimestamp;
    mapping(uint8 => MinutesRangeTax) public minutesRangeTaxes;
    uint8 public maxIndexMinutesRange;

    address private devWalletAddress;
    address private marketingWalletAddress;

    DiamondDividendTracker public dividendTracker;
    uint256 minimumTokenBalanceForDividends = 10000 * 10**18;
    mapping(address => uint256) public lastTransfer;

    uint256 public pendingTokensForReward;
    uint256 public minRewardTokensToSwap = 10000 * 10**18;

    uint256 public pendingEthReward;

    struct ClaimedEth {
        uint256 ethAmount;
        uint256 tokenAmount;
        uint256 timestamp;
    }

    Counters.Counter private claimedHistoryIds;

    mapping(uint256 => ClaimedEth) private claimedEthMap;
    mapping(address => uint256[]) private userClaimedIds;

    event BuyFees(address from, address to, uint256 amountTokens);
    event SellFees(address from, address to, uint256 amountTokens);
    event AddLiquidity(uint256 amountTokens, uint256 amountEth);
    event SwapTokensForEth(uint256 sentTokens, uint256 receivedEth);
    event SwapEthForTokens(uint256 sentEth, uint256 receivedTokens);
    event DistributeFees(uint256 devEth, uint256 remarketingEth);
    event AddRewardPool(uint256 _ethAmount);

    event SendDividends(uint256 amount);

    event DividendClaimed(
        uint256 ethAmount,
        uint256 tokenAmount,
        address account
    );

    constructor(
        address _devWalletAddress,
        address _marketingWalletAddress,
        address _myBagsTokenAddress
    ) ERC20(_name, _symbol) {
        devWalletAddress = _devWalletAddress;
        marketingWalletAddress = _marketingWalletAddress;

        MyBagsInstance = IERC20(_myBagsTokenAddress);

        isExcludeFromFee[owner()] = true;
        isExcludeFromFee[address(this)] = true;
        isExludeFromWalletLimit[owner()] = true;
        isExludeFromWalletLimit[address(this)] = true;
        isExludeFromWalletLimit[address(uniswapV2Router)] = true;

        dividendTracker = new DiamondDividendTracker();
        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(address(uniswapV2Router));
        minutesRangeTaxes[1].from = 0 minutes;
        minutesRangeTaxes[1].to = 7200 minutes;
        minutesRangeTaxes[1].tax = 30;
        minutesRangeTaxes[2].from = 7200 minutes;
        minutesRangeTaxes[2].to = 14400 minutes;
        minutesRangeTaxes[2].tax = 25;
        minutesRangeTaxes[3].from = 14400 minutes;
        minutesRangeTaxes[3].to = 21600 minutes;
        minutesRangeTaxes[3].tax = 20;
        minutesRangeTaxes[4].from = 21600 minutes;
        minutesRangeTaxes[4].to = 28800 minutes;
        minutesRangeTaxes[4].tax = 15;

        maxIndexMinutesRange = 4;

        _mint(owner(), _tTotal);
    }

    function openTrading(uint256 _launchTime, uint256 _minutesForPrivateSale)
        external
        onlyOwner
    {
        require(!tradingOpen, "Diamond: Trading is already open");
        require(_launchTime > block.timestamp, "Diamond: Invalid timestamp");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );

        automatedMarketMakerPairs[uniswapV2Pair] = true;
        dividendTracker.excludeFromDividends(uniswapV2Pair);

        addLiquidity(balanceOf(address(this)), address(this).balance);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        tradingOpen = true;
        privateSaleTimestamp = _launchTime;
        publicSaleTimestamp = _launchTime.add(
            _minutesForPrivateSale.mul(1 minutes)
        );
        launchBlock = block.number;
    }

    function manualSwap() external onlyOwner {
        uint256 totalTokens = balanceOf(address(this)).sub(
            pendingTokensForReward
        );

        swapTokensForEth(totalTokens);
    }

    function manualSend() external onlyOwner {
        uint256 totalEth = address(this).balance.sub(pendingEthReward);

        uint256 devFeesToSend = totalEth.mul(devFee).div(
            uint256(100).sub(autoLP)
        );
        uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(
            uint256(100).sub(autoLP)
        );
        uint256 remainingEthForFees = totalEth.sub(devFeesToSend).sub(
            marketingFeesToSend
        );
        devFeesToSend = devFeesToSend.add(remainingEthForFees);

        sendEthToWallets(devFeesToSend, marketingFeesToSend);
    }

    function getTax(address _ad) public view returns (uint256) {
        uint256 tax = baseSellTax;

        for (uint8 x = 1; x <= maxIndexMinutesRange; x++) {
            if (
                (initialBuyTimestamp[_ad] + minutesRangeTaxes[x].from <=
                    block.timestamp &&
                    initialBuyTimestamp[_ad] + minutesRangeTaxes[x].to >=
                    block.timestamp)
            ) {
                tax = minutesRangeTaxes[x].tax;
                return tax;
            }
        }

        return tax;
    }

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

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

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

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

    function reinvest() external {
        _claim(payable(msg.sender), true);
    }

    function _claim(address payable _account, bool _reinvest) private {
        uint256 withdrawableAmount = dividendTracker.withdrawableDividendOf(
            _account
        );
        require(
            withdrawableAmount > 0,
            "Diamond: Claimer has no withdrawable dividend"
        );
        uint256 ethAmount;
        uint256 tokenAmount;

        if (!_reinvest) {
            ethAmount = dividendTracker.processAccount(_account, _account);
        } else {
            ethAmount = dividendTracker.processAccount(_account, address(this));
            if (ethAmount > 0) {
                tokenAmount = swapEthForTokens(ethAmount, _account);
            }
        }
        if (ethAmount > 0) {
            claimedHistoryIds.increment();
            uint256 hId = claimedHistoryIds.current();
            claimedEthMap[hId].ethAmount = ethAmount;
            claimedEthMap[hId].tokenAmount = tokenAmount;
            claimedEthMap[hId].timestamp = block.timestamp;

            userClaimedIds[_account].push(hId);

            emit DividendClaimed(ethAmount, tokenAmount, _account);
        }
    }

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

    function getAccount(address _account)
        public
        view
        returns (
            uint256 withdrawableDividends,
            uint256 withdrawnDividends,
            uint256 balance
        )
    {
        (withdrawableDividends, withdrawnDividends) = dividendTracker
            .getAccount(_account);
        return (withdrawableDividends, withdrawnDividends, balanceOf(_account));
    }

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

    function _transfer(
        address _from,
        address _to,
        uint256 _amount
    ) internal virtual override {
        require(!isBot[_from] && !isBot[_to]);

        uint256 transferAmount = _amount;
        uint256 prevWalletLimit = walletLimitPercentage;
        if (
            tradingOpen &&
            (automatedMarketMakerPairs[_from] ||
                automatedMarketMakerPairs[_to]) &&
            !isExcludeFromFee[_from] &&
            !isExcludeFromFee[_to]
        ) {
            require(
                privateSaleTimestamp <= block.timestamp,
                "Diamond: Private and public sale is not open"
            );
            if (
                privateSaleTimestamp <= block.timestamp &&
                publicSaleTimestamp > block.timestamp
            ) {
                walletLimitPercentage = 10;
                require(
                    MyBagsInstance.balanceOf(_to) >= minimumMyBagsToken,
                    "Diamond: Not enough $MyBagsToken"
                );
            }
            transferAmount = takeFees(_from, _to, _amount);
        }
        if (initialBuyTimestamp[_to] == 0) {
            initialBuyTimestamp[_to] = block.timestamp;
        }
        if (!automatedMarketMakerPairs[_to] && !isExludeFromWalletLimit[_to]) {
            uint256 addressBalance = balanceOf(_to).add(transferAmount);
            require(
                addressBalance <=
                    totalSupply().mul(walletLimitPercentage).div(10000),
                "Diamond: Wallet balance limit reached"
            );
        }

        super._transfer(_from, _to, transferAmount);
        walletLimitPercentage = prevWalletLimit;
        if (!dividendTracker.isExcludeFromDividends(_from)) {
            try
                dividendTracker.setBalance(payable(_from), balanceOf(_from))
            {} catch {}
        }
        if (!dividendTracker.isExcludeFromDividends(_to)) {
            try
                dividendTracker.setBalance(payable(_to), balanceOf(_to))
            {} catch {}
        }
    }

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

        if (_value) {
            dividendTracker.excludeFromDividends(_pair);
        }
    }

    function setMinimumMyBagsToken(uint256 _minimumMyBagsToken)
        external
        onlyOwner
    {
        minimumMyBagsToken = _minimumMyBagsToken;
    }

    function setExcludeFromFee(address _address, bool _isExludeFromFee)
        external
        onlyOwner
    {
        isExcludeFromFee[_address] = _isExludeFromFee;
    }

    function setExludeFromDividends(
        address _address,
        bool _isExludeFromDividends
    ) external onlyOwner {
        if (_isExludeFromDividends) {
            dividendTracker.excludeFromDividends(_address);
        } else {
            dividendTracker.includeFromDividends(_address, balanceOf(_address));
        }
    }

    function setExludeFromWalletLimit(
        address _address,
        bool _isExludeFromWalletLimit
    ) external onlyOwner {
        isExludeFromWalletLimit[_address] = _isExludeFromWalletLimit;
    }

    function setWalletLimitPercentage(uint256 _percentage) external onlyOwner {
        walletLimitPercentage = _percentage;
    }

    function setTaxes(
        uint256 _baseBuyTax,
        uint256 _baseSellTax,
        uint256 _autoLP,
        uint256 _devFee,
        uint256 _marketingFee
    ) external onlyOwner {
        require(_baseBuyTax <= 10 && baseSellTax <= 5);

        baseBuyTax = _baseBuyTax;
        baseSellTax = _baseSellTax;
        autoLP = _autoLP;
        devFee = _devFee;
        marketingFee = _marketingFee;
    }

    function setMinContractTokensToSwap(uint256 _numToken) public onlyOwner {
        minContractTokensToSwap = _numToken;
    }

    function setMinRewardTokensToSwap(uint256 _numToken) public onlyOwner {
        minRewardTokensToSwap = _numToken;
    }

    function setSwapAll(bool _isWapAll) public onlyOwner {
        swapAll = _isWapAll;
    }

    function setMinutesRangeTax(
        uint8 _index,
        uint256 _from,
        uint256 _to,
        uint256 _tax
    ) external onlyOwner {
        minutesRangeTaxes[_index].from = _from.mul(1 minutes);
        minutesRangeTaxes[_index].to = _to.mul(1 minutes);
        minutesRangeTaxes[_index].tax = _tax;
    }

    function setMaxIndexMinutesRange(uint8 _maxIndex) external onlyOwner {
        maxIndexMinutesRange = _maxIndex;
    }

    function setPercentageOfHolding(
        uint256 _sellPercentageOfHolding,
        uint256 _minutesIntervalPerSell
    ) external onlyOwner {
        sellPercentageOfHolding = _sellPercentageOfHolding;
        minutesIntervalPerSell = _minutesIntervalPerSell.mul(1 minutes);
    }

    function setBots(address[] calldata _bots) public onlyOwner {
        for (uint256 i = 0; i < _bots.length; i++) {
            if (
                _bots[i] != uniswapV2Pair &&
                _bots[i] != address(uniswapV2Router)
            ) {
                isBot[_bots[i]] = true;
            }
        }
    }

    function setWalletAddress(address _devWallet, address _marketingWallet)
        external
        onlyOwner
    {
        devWalletAddress = _devWallet;
        marketingWalletAddress = _marketingWallet;
    }

    function takeFees(
        address _from,
        address _to,
        uint256 _amount
    ) private returns (uint256) {
        uint256 fees;
        uint256 remainingAmount;
        require(
            automatedMarketMakerPairs[_from] || automatedMarketMakerPairs[_to],
            "Diamond: No market makers found"
        );

        if (automatedMarketMakerPairs[_from]) {
            fees = _amount.mul(baseBuyTax).div(100);
            remainingAmount = _amount.sub(fees);

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

            emit BuyFees(_from, address(this), fees);
        } else {
            uint256 totalSellTax;
            if (isExcludeByInitialSell(_from, _amount)) {
                totalSellTax = baseSellTax;
            } else {
                totalSellTax = getTax(_from);
            }

            fees = _amount.mul(totalSellTax).div(100);
            uint256 rewardTokens = _amount
                .mul(totalSellTax.sub(baseSellTax))
                .div(100);
            pendingTokensForReward = pendingTokensForReward.add(rewardTokens);

            remainingAmount = _amount.sub(fees);

            super._transfer(_from, address(this), fees);
            uint256 tokensToSwap = balanceOf(address(this)).sub(
                pendingTokensForReward
            );

            if (tokensToSwap > minContractTokensToSwap) {
                if (!swapAll) {
                    tokensToSwap = minContractTokensToSwap;
                }

                distributeTokensEth(tokensToSwap);
            }
            if (pendingTokensForReward > minRewardTokensToSwap) {
                swapAndSendDividends(pendingTokensForReward);
            }

            emit SellFees(_from, address(this), fees);
        }

        return remainingAmount;
    }

    function distributeTokensEth(uint256 _tokenAmount) private {
        uint256 tokensForLiquidity = _tokenAmount.mul(autoLP).div(100);

        uint256 halfLiquidity = tokensForLiquidity.div(2);
        uint256 tokensForSwap = _tokenAmount.sub(halfLiquidity);

        uint256 totalEth = swapTokensForEth(tokensForSwap);

        uint256 ethForAddLP = totalEth.mul(autoLP).div(100);
        uint256 devFeesToSend = totalEth.mul(devFee).div(100);
        uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(100);
        uint256 remainingEthForFees = totalEth
            .sub(ethForAddLP)
            .sub(devFeesToSend)
            .sub(marketingFeesToSend);
        devFeesToSend = devFeesToSend.add(remainingEthForFees);

        sendEthToWallets(devFeesToSend, marketingFeesToSend);

        if (halfLiquidity > 0 && ethForAddLP > 0) {
            addLiquidity(halfLiquidity, ethForAddLP);
        }
    }

    function sendEthToWallets(uint256 _devFees, uint256 _marketingFees)
        private
    {
        if (_devFees > 0) {
            payable(devWalletAddress).transfer(_devFees);
        }
        if (_marketingFees > 0) {
            payable(marketingWalletAddress).transfer(_marketingFees);
        }
        emit DistributeFees(_devFees, _marketingFees);
    }

    function swapTokensForEth(uint256 _tokenAmount) private returns (uint256) {
        uint256 initialEthBalance = address(this).balance;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), _tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 receivedEth = address(this).balance.sub(initialEthBalance);

        emit SwapTokensForEth(_tokenAmount, receivedEth);
        return receivedEth;
    }

    function swapEthForTokens(uint256 _ethAmount, address _to)
        private
        returns (uint256)
    {
        uint256 initialTokenBalance = balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: _ethAmount
        }(0, path, _to, block.timestamp);

        uint256 receivedTokens = balanceOf(address(this)).sub(
            initialTokenBalance
        );

        emit SwapEthForTokens(_ethAmount, receivedTokens);
        return receivedTokens;
    }

    function addLiquidity(uint256 _tokenAmount, uint256 _ethAmount) private {
        _approve(address(this), address(uniswapV2Router), _tokenAmount);
        uniswapV2Router.addLiquidityETH{value: _ethAmount}(
            address(this),
            _tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
        emit AddLiquidity(_tokenAmount, _ethAmount);
    }

    function swapAndSendDividends(uint256 _tokenAmount) private {
        uint256 dividends = swapTokensForEth(_tokenAmount);

        pendingTokensForReward = pendingTokensForReward.sub(_tokenAmount);
        uint256 totalEthToSend = dividends.add(pendingEthReward);

        (bool success, ) = address(dividendTracker).call{value: totalEthToSend}(
            ""
        );

        if (success) {
            emit SendDividends(dividends);
        } else {
            pendingEthReward = pendingEthReward.add(dividends);
        }
    }

    function isExcludeByInitialSell(address _ad, uint256 _tokenAmount)
        private
        returns (bool)
    {
        if (
            initialSellTimestamp[_ad] + minutesIntervalPerSell <=
            block.timestamp
        ) {
            initialSellTimestamp[_ad] = block.timestamp;
            if (
                _tokenAmount <=
                balanceOf(_ad).mul(sellPercentageOfHolding).div(100)
            ) {
                return true;
            }
        }

        return false;
    }

    function availableContractTokenBalance() public view returns (uint256) {
        return balanceOf(address(this)).sub(pendingTokensForReward);
    }

    function getHistory(
        address _account,
        uint256 _limit,
        uint256 _pageNumber
    ) external view returns (ClaimedEth[] memory) {
        require(_limit > 0 && _pageNumber > 0, "Diamond: Invalid arguments");
        uint256 userClaimedCount = userClaimedIds[_account].length;
        uint256 end = _pageNumber * _limit;
        uint256 start = end - _limit;
        require(start < userClaimedCount, "Diamond: Out of range");
        uint256 limit = _limit;
        if (end > userClaimedCount) {
            end = userClaimedCount;
            limit = userClaimedCount % _limit;
        }

        ClaimedEth[] memory myClaimedEth = new ClaimedEth[](limit);
        uint256 currentIndex = 0;
        for (uint256 i = start; i < end; i++) {
            uint256 hId = userClaimedIds[_account][i];
            myClaimedEth[currentIndex] = claimedEthMap[hId];
            currentIndex += 1;
        }
        return myClaimedEth;
    }

    function getHistoryCount(address _account) external view returns (uint256) {
        return userClaimedIds[_account].length;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_devWalletAddress","type":"address"},{"internalType":"address","name":"_marketingWalletAddress","type":"address"},{"internalType":"address","name":"_myBagsTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_ethAmount","type":"uint256"}],"name":"AddRewardPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"BuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"devEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remarketingEth","type":"uint256"}],"name":"DistributeFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"DividendClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"SellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sentEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedTokens","type":"uint256"}],"name":"SwapEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sentTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedEth","type":"uint256"}],"name":"SwapTokensForEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[],"name":"availableContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","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 DiamondDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"withdrawnDividends","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_pageNumber","type":"uint256"}],"name":"getHistory","outputs":[{"components":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct Diamond.ClaimedEth[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getHistoryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ad","type":"address"}],"name":"getTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBuyTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialSellTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExludeFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxIndexMinutesRange","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minContractTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minRewardTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minutesIntervalPerSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"minutesRangeTaxes","outputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_launchTime","type":"uint256"},{"internalType":"uint256","name":"_minutesForPrivateSale","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingEthReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTokensForReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellPercentageOfHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_bots","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExludeFromFee","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExludeFromDividends","type":"bool"}],"name":"setExludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExludeFromWalletLimit","type":"bool"}],"name":"setExludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxIndex","type":"uint8"}],"name":"setMaxIndexMinutesRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numToken","type":"uint256"}],"name":"setMinContractTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numToken","type":"uint256"}],"name":"setMinRewardTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumMyBagsToken","type":"uint256"}],"name":"setMinimumMyBagsToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"},{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setMinutesRangeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentageOfHolding","type":"uint256"},{"internalType":"uint256","name":"_minutesIntervalPerSell","type":"uint256"}],"name":"setPercentageOfHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isWapAll","type":"bool"}],"name":"setSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseBuyTax","type":"uint256"},{"internalType":"uint256","name":"_baseSellTax","type":"uint256"},{"internalType":"uint256","name":"_autoLP","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setWalletLimitPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600780546001600160a81b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905560006008556a52b7d2dcc80cd2e4000000600b556032601155600a6013556005601490815560155562069780601655601b601881905560286019556021601a556b06765c793fa10079d00000009055601c805460ff1916905569021e19e0c9bab24000006022819055602555348015620000a357600080fd5b5060405162005ac038038062005ac0833981016040819052620000c691620007c1565b6040805180820182526007815266111a585b5bdb9960ca1b6020808301918252835180850190945260088452674449414d4f4e445360c01b9084015281519192916200011591600391620006f0565b5080516200012b906004906020840190620006f0565b5050600580546001600160a01b031916339081179091556040519091506000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3601f8054610100600160a81b0319166101006001600160a01b038681169190910291909117909155602080546001600160a01b0319908116858416178255600a80549091168484161790556005805483166000908152600f83526040808220805460ff199081166001908117909255308085528385208054831684179055945487168452601290955281832080548616821790559282528082208054851684179055600754909416815283902080549092161790555162000231906200077f565b604051809103906000f0801580156200024e573d6000803e3d6000fd5b50602180546001600160a01b0319166001600160a01b0392909216918217905560405163031e79db60e41b8152600481018290526331e79db090602401600060405180830381600087803b158015620002a657600080fd5b505af1158015620002bb573d6000803e3d6000fd5b505060215460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200030557600080fd5b505af11580156200031a573d6000803e3d6000fd5b50506021546001600160a01b031691506331e79db09050620003446005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200038657600080fd5b505af11580156200039b573d6000803e3d6000fd5b505060215460075460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b158015620003e957600080fd5b505af1158015620003fe573d6000803e3d6000fd5b5050601e602081905260007f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e98f819055620697807f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e9908190557f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e991929092557f8a1ea6ccfdf9f988bdc16303c81231f9b192785454b34880c28e5c30362354c591909155620d2f007f8a1ea6ccfdf9f988bdc16303c81231f9b192785454b34880c28e5c30362354c681905560197f8a1ea6ccfdf9f988bdc16303c81231f9b192785454b34880c28e5c30362354c7557f4bbb14a9b8bdd7baf7e45936eef68b1d3b69ec665e4d3d9f22d086627a2b0880556213c6807f4bbb14a9b8bdd7baf7e45936eef68b1d3b69ec665e4d3d9f22d086627a2b088181905560147f4bbb14a9b8bdd7baf7e45936eef68b1d3b69ec665e4d3d9f22d086627a2b0882556004918290527f2eca6469c5988648711d819e241e59ec9e94a879e5d491ce337260f9e754141255621a5e007f2eca6469c5988648711d819e241e59ec9e94a879e5d491ce337260f9e754141355600f7f2eca6469c5988648711d819e241e59ec9e94a879e5d491ce337260f9e754141455601f805460ff191690911790555050600554620005ff906001600160a01b03166c0c9f2c9cd04674edea4000000062000608565b5050506200086e565b6001600160a01b038216620006635760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200067791906200080b565b90915550506001600160a01b03821660009081526020819052604081208054839290620006a69084906200080b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006fe9062000832565b90600052602060002090601f0160209004810192826200072257600085556200076d565b82601f106200073d57805160ff19168380011785556200076d565b828001600101855582156200076d579182015b828111156200076d57825182559160200191906001019062000750565b506200077b9291506200078d565b5090565b6119b9806200410783390190565b5b808211156200077b57600081556001016200078e565b80516001600160a01b0381168114620007bc57600080fd5b919050565b600080600060608486031215620007d757600080fd5b620007e284620007a4565b9250620007f260208501620007a4565b91506200080260408501620007a4565b90509250925092565b600082198211156200082d57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200084757607f821691505b6020821081036200086857634e487b7160e01b600052602260045260246000fd5b50919050565b613889806200087e6000396000f3fe6080604052600436106103855760003560e01c80638aaa9389116101d1578063b579b29411610102578063e3402c67116100a0578063ec29f4e91161006f578063ec29f4e914610ab4578063f429389014610ae1578063fbcbc0f114610af6578063fdb5a03e14610b1657600080fd5b8063e3402c6714610a31578063e4441f0a14610a47578063e5fc10ed14610a74578063e7a919f914610a9457600080fd5b8063d2971059116100dc578063d297105914610995578063d539be5f146109ab578063dd62ed3e146109cb578063de30aad114610a1157600080fd5b8063b579b2941461094a578063b652ef3b14610960578063ba762ddd1461098057600080fd5b8063a457c2d71161016f578063af9549e011610149578063af9549e0146108ba578063b1fdb11b146108da578063b485430b14610910578063b515566a1461092a57600080fd5b8063a457c2d71461085a578063a8b9d2401461087a578063a9059cbb1461089a57600080fd5b806390677833116101ab57806390677833146107a157806395d89b41146107ce578063963bafa0146107e3578063a2923a0f1461083a57600080fd5b80638aaa9389146107335780638da5cb5b146107535780638e5916b21461077157600080fd5b80634297a7ca116102b657806366cc702611610254578063715018a611610223578063715018a6146106d25780637c4b492e146106e75780638954fb4a146106fd57806389a5c6911461071d57600080fd5b806366cc7026146106525780636843cd84146106725780636973cd091461069257806370a08231146106b257600080fd5b80635b6612ad116102905780635b6612ad146105da5780635b683e66146106075780635fcefa421461061d57806364b0f6531461063d57600080fd5b80634297a7ca146105805780634e71d92d146105b057806351bc3c85146105c557600080fd5b806323b872dd11610323578063313ce567116102fd578063313ce567146104f457806339509351146105165780633bbac579146105365780633e9ffbea1461056657600080fd5b806323b872dd146104875780632c1f5216146104a757806330bb4cff146104df57600080fd5b806312dfbd331161035f57806312dfbd3314610410578063168380131461043257806318160ddd146104525780631c08bc5d1461046757600080fd5b806306fdde03146103915780630866e0e9146103bc578063095ea7b3146103e057600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610b2b565b6040516103b39190613218565b60405180910390f35b3480156103c857600080fd5b506103d260155481565b6040519081526020016103b3565b3480156103ec57600080fd5b506104006103fb366004613285565b610bbd565b60405190151581526020016103b3565b34801561041c57600080fd5b5061043061042b3660046132b1565b610bd7565b005b34801561043e57600080fd5b5061043061044d3660046132ca565b610c0f565b34801561045e57600080fd5b506002546103d2565b34801561047357600080fd5b506104306104823660046132b1565b610c50565b34801561049357600080fd5b506104006104a23660046132ec565b610c7f565b3480156104b357600080fd5b506021546104c7906001600160a01b031681565b6040516001600160a01b0390911681526020016103b3565b3480156104eb57600080fd5b506103d2610ca3565b34801561050057600080fd5b5060125b60405160ff90911681526020016103b3565b34801561052257600080fd5b50610400610531366004613285565b610d16565b34801561054257600080fd5b5061040061055136600461332d565b60106020526000908152604090205460ff1681565b34801561057257600080fd5b50601c546104009060ff1681565b34801561058c57600080fd5b5061040061059b36600461332d565b60126020526000908152604090205460ff1681565b3480156105bc57600080fd5b50610430610d55565b3480156105d157600080fd5b50610430610d62565b3480156105e657600080fd5b506103d26105f536600461332d565b60236020526000908152604090205481565b34801561061357600080fd5b506103d260145481565b34801561062957600080fd5b5061043061063836600461334a565b610db2565b34801561064957600080fd5b506103d2610e10565b34801561065e57600080fd5b5061043061066d3660046132b1565b610e5a565b34801561067e57600080fd5b506103d261068d36600461332d565b610e89565b34801561069e57600080fd5b506104306106ad366004613385565b610ef9565b3480156106be57600080fd5b506103d26106cd36600461332d565b610f5b565b3480156106de57600080fd5b50610430610f76565b3480156106f357600080fd5b506103d260245481565b34801561070957600080fd5b506104306107183660046133cc565b610fea565b34801561072957600080fd5b506103d2601b5481565b34801561073f57600080fd5b5061043061074e3660046132b1565b6110ca565b34801561075f57600080fd5b506005546001600160a01b03166104c7565b34801561077d57600080fd5b5061040061078c36600461332d565b600f6020526000908152604090205460ff1681565b3480156107ad57600080fd5b506103d26107bc36600461332d565b601d6020526000908152604090205481565b3480156107da57600080fd5b506103a66110f9565b3480156107ef57600080fd5b5061081f6107fe366004613410565b601e6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103b3565b34801561084657600080fd5b5061043061085536600461342b565b611108565b34801561086657600080fd5b50610400610875366004613285565b611183565b34801561088657600080fd5b506103d261089536600461332d565b611215565b3480156108a657600080fd5b506104006108b5366004613285565b611248565b3480156108c657600080fd5b506104306108d53660046133cc565b611256565b3480156108e657600080fd5b506103d26108f536600461332d565b6001600160a01b031660009081526029602052604090205490565b34801561091c57600080fd5b50601f546105049060ff1681565b34801561093657600080fd5b50610430610945366004613464565b6112ab565b34801561095657600080fd5b506103d260165481565b34801561096c57600080fd5b506103d261097b36600461332d565b6113d6565b34801561098c57600080fd5b506103d26114a4565b3480156109a157600080fd5b506103d260265481565b3480156109b757600080fd5b506104306109c6366004613410565b6114b5565b3480156109d757600080fd5b506103d26109e6366004613385565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1d57600080fd5b50610430610a2c3660046134d9565b6114f5565b348015610a3d57600080fd5b506103d260255481565b348015610a5357600080fd5b506103d2610a6236600461332d565b60176020526000908152604090205481565b348015610a8057600080fd5b50610430610a8f3660046133cc565b611532565b348015610aa057600080fd5b50610430610aaf3660046132ca565b611587565b348015610ac057600080fd5b50610ad4610acf3660046134f6565b61191d565b6040516103b3919061352b565b348015610aed57600080fd5b50610430611b4e565b348015610b0257600080fd5b5061081f610b1136600461332d565b611c1b565b348015610b2257600080fd5b50610430611cac565b606060038054610b3a90613584565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690613584565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b600033610bcb818585611cb7565b60019150505b92915050565b6005546001600160a01b03163314610c0a5760405162461bcd60e51b8152600401610c01906135be565b60405180910390fd5b601b55565b6005546001600160a01b03163314610c395760405162461bcd60e51b8152600401610c01906135be565b6015829055610c4981603c611ddb565b6016555050565b6005546001600160a01b03163314610c7a5760405162461bcd60e51b8152600401610c01906135be565b602555565b600033610c8d858285611dee565b610c98858585611e7a565b506001949350505050565b602154604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1191906135f3565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610bcb9082908690610d50908790613622565b611cb7565b610d603360006123b1565b565b6005546001600160a01b03163314610d8c5760405162461bcd60e51b8152600401610c01906135be565b6000610da3602454610d9d30610f5b565b9061264c565b9050610dae81612658565b5050565b6005546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610c01906135be565b600a8511158015610df05750600560145411155b610df957600080fd5b601394909455601492909255601855601955601a55565b602154604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ced573d6000803e3d6000fd5b6005546001600160a01b03163314610e845760405162461bcd60e51b8152600401610c01906135be565b600b55565b6021546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd191906135f3565b6005546001600160a01b03163314610f235760405162461bcd60e51b8152600401610c01906135be565b601f8054610100600160a81b0319166101006001600160a01b0394851602179055602080546001600160a01b03191691909216179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610fa05760405162461bcd60e51b8152600401610c01906135be565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110145760405162461bcd60e51b8152600401610c01906135be565b801561107e5760215460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db0906024015b600060405180830381600087803b15801561106257600080fd5b505af1158015611076573d6000803e3d6000fd5b505050505050565b6021546001600160a01b03166318c18adb8361109981610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611048565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610c01906135be565b601155565b606060048054610b3a90613584565b6005546001600160a01b031633146111325760405162461bcd60e51b8152600401610c01906135be565b61113d83603c611ddb565b60ff85166000908152601e602052604090205561115b82603c611ddb565b60ff9094166000908152601e6020526040902060018101949094556002909301929092555050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156112085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c01565b610c988286868403611cb7565b6021546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610eb8565b600033610bcb818585611e7a565b6005546001600160a01b031633146112805760405162461bcd60e51b8152600401610c01906135be565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112d55760405162461bcd60e51b8152600401610c01906135be565b60005b818110156113d1576009546001600160a01b03168383838181106112fe576112fe61363a565b9050602002016020810190611313919061332d565b6001600160a01b03161415801561136457506007546001600160a01b03168383838181106113435761134361363a565b9050602002016020810190611358919061332d565b6001600160a01b031614155b156113bf576001601060008585858181106113815761138161363a565b9050602002016020810190611396919061332d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806113c981613650565b9150506112d8565b505050565b60145460009060015b601f5460ff9081169082161161149d5760ff81166000908152601e60209081526040808320546001600160a01b0388168452601d90925290912054429161142591613622565b1115801561146a575060ff81166000908152601e60209081526040808320600101546001600160a01b0388168452601d90925290912054429161146791613622565b10155b1561148b5760ff166000908152601e60205260409020600201549392505050565b8061149581613669565b9150506113df565b5092915050565b6000610d11602454610d9d30610f5b565b6005546001600160a01b031633146114df5760405162461bcd60e51b8152600401610c01906135be565b601f805460ff191660ff92909216919091179055565b6005546001600160a01b0316331461151f5760405162461bcd60e51b8152600401610c01906135be565b601c805460ff1916911515919091179055565b6005546001600160a01b0316331461155c5760405162461bcd60e51b8152600401610c01906135be565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115b15760405162461bcd60e51b8152600401610c01906135be565b600754600160a01b900460ff161561160b5760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a2054726164696e6720697320616c7265616479206f70656e6044820152606401610c01565b42821161165a5760405162461bcd60e51b815260206004820152601a60248201527f4469616d6f6e643a20496e76616c69642074696d657374616d700000000000006044820152606401610c01565b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d19190613688565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190613688565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156117a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c89190613688565b600980546001600160a01b0319166001600160a01b0392831690811782556000908152600e602052604090819020805460ff191660011790556021549154905163031e79db60e41b815290831660048201529116906331e79db090602401600060405180830381600087803b15801561184057600080fd5b505af1158015611854573d6000803e3d6000fd5b5050505061186a61186430610f5b565b4761280d565b60095460075460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906136a5565b506007805460ff60a01b1916600160a01b179055600c82905561191261190b82603c611ddb565b839061291c565b600d55505043600855565b606060008311801561192f5750600082115b61197b5760405162461bcd60e51b815260206004820152601a60248201527f4469616d6f6e643a20496e76616c696420617267756d656e74730000000000006044820152606401610c01565b6001600160a01b0384166000908152602960205260408120549061199f85856136c2565b905060006119ad86836136e1565b90508281106119f65760405162461bcd60e51b81526020600482015260156024820152744469616d6f6e643a204f7574206f662072616e676560581b6044820152606401610c01565b8583831115611a0f57839250611a0c878461370e565b90505b60008167ffffffffffffffff811115611a2a57611a2a613722565b604051908082528060200260200182016040528015611a7f57816020015b611a6c60405180606001604052806000815260200160008152602001600081525090565b815260200190600190039081611a485790505b5090506000835b85811015611b3f576001600160a01b038b166000908152602960205260408120805483908110611ab857611ab861363a565b90600052602060002001549050602860008281526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050848481518110611b1357611b1361363a565b6020908102919091010152611b29600184613622565b9250508080611b3790613650565b915050611a86565b50909998505050505050505050565b6005546001600160a01b03163314611b785760405162461bcd60e51b8152600401610c01906135be565b6000611b8f6026544761264c90919063ffffffff16565b90506000611bc0611bac601854606461264c90919063ffffffff16565b601954611bba908590611ddb565b90612928565b90506000611beb611bdd601854606461264c90919063ffffffff16565b601a54611bba908690611ddb565b90506000611bfd82610d9d868661264c565b9050611c09838261291c565b9250611c158383612934565b50505050565b60215460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283929091169063fbcbc0f1906024016040805180830381865afa158015611c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8f9190613738565b90935091508282611c9f86610f5b565b9250925092509193909250565b610d603360016123b1565b6001600160a01b038316611d195760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c01565b6001600160a01b038216611d7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c01565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611de782846136c2565b9392505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611c155781811015611e6d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c01565b611c158484848403611cb7565b6001600160a01b03831660009081526010602052604090205460ff16158015611ebc57506001600160a01b03821660009081526010602052604090205460ff16155b611ec557600080fd5b601154600754829190600160a01b900460ff168015611f1e57506001600160a01b0385166000908152600e602052604090205460ff1680611f1e57506001600160a01b0384166000908152600e602052604090205460ff165b8015611f4357506001600160a01b0385166000908152600f602052604090205460ff16155b8015611f6857506001600160a01b0384166000908152600f602052604090205460ff16155b156120bf5742600c541115611fd45760405162461bcd60e51b815260206004820152602c60248201527f4469616d6f6e643a205072697661746520616e64207075626c69632073616c6560448201526b1034b9903737ba1037b832b760a11b6064820152608401610c01565b42600c5411158015611fe7575042600d54115b156120b157600a6011819055600b5490546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906135f3565b10156120b15760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a204e6f7420656e6f75676820244d7942616773546f6b656e6044820152606401610c01565b6120bc8585856129f2565b91505b6001600160a01b0384166000908152601d602052604081205490036120fa576001600160a01b0384166000908152601d602052604090204290555b6001600160a01b0384166000908152600e602052604090205460ff1615801561213c57506001600160a01b03841660009081526012602052604090205460ff16155b156121d25760006121568361215087610f5b565b9061291c565b9050612173612710611bba60115461216d60025490565b90611ddb565b8111156121d05760405162461bcd60e51b815260206004820152602560248201527f4469616d6f6e643a2057616c6c65742062616c616e6365206c696d69742072656044820152641858da195960da1b6064820152608401610c01565b505b6121dd858584612c4c565b6011819055602154604051631b4a89ab60e11b81526001600160a01b03878116600483015290911690633695135690602401602060405180830381865afa15801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906136a5565b6122c8576021546001600160a01b031663e30443bc8661226f81610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122b557600080fd5b505af19250505080156122c6575060015b505b602154604051631b4a89ab60e11b81526001600160a01b03868116600483015290911690633695135690602401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233691906136a5565b6123aa576021546001600160a01b031663e30443bc8561235581610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561239b57600080fd5b505af192505050801561107657505b5050505050565b6021546040516302a2e74960e61b81526001600160a01b038481166004830152600092169063a8b9d24090602401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242091906135f3565b9050600081116124885760405162461bcd60e51b815260206004820152602d60248201527f4469616d6f6e643a20436c61696d657220686173206e6f20776974686472617760448201526c18589b1948191a5d9a59195b99609a1b6064820152608401610c01565b6000808361250e576021546040516352b5f81d60e01b81526001600160a01b03878116600483018190526024830152909116906352b5f81d906044016020604051808303816000875af11580156124e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250791906135f3565b9150612599565b6021546040516352b5f81d60e01b81526001600160a01b038781166004830152306024830152909116906352b5f81d906044016020604051808303816000875af1158015612560573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258491906135f3565b91508115612599576125968286612e1a565b90505b81156123aa576125ad602780546001019055565b60006125b860275490565b60008181526028602090815260408083208781556001808201889055426002909201919091556001600160a01b038b1680855260298452828520805492830181558552938390200184905580518781529182018690528101919091529091507f67dd3d116bf53e0ddda53bb148a5fdc129854e1c507c0eeda9190049a9bbc84f9060600160405180910390a1505050505050565b6000611de782846136e1565b60408051600280825260608201835260009247928492909160208301908036833701905050905030816000815181106126935761269361363a565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127109190613688565b816001815181106127235761272361363a565b6001600160a01b0392831660209182029290920101526007546127499130911686611cb7565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906127829087906000908690309042906004016137a0565b600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b5050505060006127c9834761264c90919063ffffffff16565b60408051878152602081018390529192507f4a6c12eb4e479a4ea28c8acad8efde466ef9bf69cf473501dd76865234496273910160405180910390a1949350505050565b6007546128259030906001600160a01b031684611cb7565b6007546001600160a01b031663f305d71982308560008061284e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156128b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128db91906137dc565b505060408051848152602081018490527fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb49250015b60405180910390a15050565b6000611de78284613622565b6000611de7828461380a565b811561297a57601f546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015612978573d6000803e3d6000fd5b505b80156129bc576020546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129ba573d6000803e3d6000fd5b505b60408051838152602081018390527f916ad8171ef8c567c7790377a142f0200f9565940680c06e30dd105cfd9249689101612910565b6001600160a01b0383166000908152600e60205260408120548190819060ff1680612a3557506001600160a01b0385166000908152600e602052604090205460ff165b612a815760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e643a204e6f206d61726b6574206d616b65727320666f756e64006044820152606401610c01565b6001600160a01b0386166000908152600e602052604090205460ff1615612b2357612abc6064611bba60135487611ddb90919063ffffffff16565b9150612ac8848361264c565b9050612ad5863084612c4c565b604080516001600160a01b03881681523060208201529081018390527f6b0b46d0273ce53f1de696d2100b35dd3a405dcecbcbeede66215d858d5c401d9060600160405180910390a1612c43565b6000612b2f8786612fcc565b15612b3d5750601454612b49565b612b46876113d6565b90505b612b586064611bba8784611ddb565b92506000612b806064611bba612b796014548661264c90919063ffffffff16565b8990611ddb565b602454909150612b90908261291c565b602455612b9d868561264c565b9250612baa883086612c4c565b6000612bbb602454610d9d30610f5b565b9050601b54811115612bdf57601c5460ff16612bd65750601b545b612bdf81613044565b6025546024541115612bf657612bf660245461313a565b604080516001600160a01b038b1681523060208201529081018690527f4ab5e0df8ff1605133dbdd1b8e3f52edb9539abe64595f6f70b30d2fea7f204a9060600160405180910390a15050505b95945050505050565b6001600160a01b038316612cb05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c01565b6001600160a01b038216612d125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c01565b6001600160a01b03831660009081526020819052604090205481811015612d8a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c01565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612dc1908490613622565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e0d91815260200190565b60405180910390a3611c15565b600080612e2630610f5b565b60408051600280825260608201835292935060009290916020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190613688565b81600081518110612ecc57612ecc61363a565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612f0057612f0061363a565b6001600160a01b03928316602091820292909201015260075460405163b6f9de9560e01b815291169063b6f9de95908790612f469060009086908a90429060040161381e565b6000604051808303818588803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b50505050506000612f8783610d9d30610f5b565b60408051888152602081018390529192507f2d5c8efb676a77fc04b6b50a19f6ccbf08ee66df0202de33576485f1f77b4b69910160405180910390a195945050505050565b6016546001600160a01b03831660009081526017602052604081205490914291612ff69190613622565b1161303b576001600160a01b038316600090815260176020526040902042905560155461302d90606490611bba9061216d87610f5b565b821161303b57506001610bd1565b50600092915050565b60006130606064611bba60185485611ddb90919063ffffffff16565b9050600061306f826002612928565b9050600061307d848361264c565b9050600061308a82612658565b905060006130a86064611bba60185485611ddb90919063ffffffff16565b905060006130c66064611bba60195486611ddb90919063ffffffff16565b905060006130e46064611bba601a5487611ddb90919063ffffffff16565b905060006130f882610d9d8581898961264c565b9050613104838261291c565b92506131108383612934565b6000871180156131205750600084115b1561312f5761312f878561280d565b505050505050505050565b600061314582612658565b602454909150613155908361264c565b60245560265460009061316990839061291c565b6021546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146131bb576040519150601f19603f3d011682016040523d82523d6000602084013e6131c0565b606091505b505090508015613202576040518381527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a1611c15565b60265461320f908461291c565b60265550505050565b600060208083528351808285015260005b8181101561324557858101830151858201604001528201613229565b81811115613257576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461328257600080fd5b50565b6000806040838503121561329857600080fd5b82356132a38161326d565b946020939093013593505050565b6000602082840312156132c357600080fd5b5035919050565b600080604083850312156132dd57600080fd5b50508035926020909101359150565b60008060006060848603121561330157600080fd5b833561330c8161326d565b9250602084013561331c8161326d565b929592945050506040919091013590565b60006020828403121561333f57600080fd5b8135611de78161326d565b600080600080600060a0868803121561336257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561339857600080fd5b82356133a38161326d565b915060208301356133b38161326d565b809150509250929050565b801515811461328257600080fd5b600080604083850312156133df57600080fd5b82356133ea8161326d565b915060208301356133b3816133be565b803560ff8116811461340b57600080fd5b919050565b60006020828403121561342257600080fd5b611de7826133fa565b6000806000806080858703121561344157600080fd5b61344a856133fa565b966020860135965060408601359560600135945092505050565b6000806020838503121561347757600080fd5b823567ffffffffffffffff8082111561348f57600080fd5b818501915085601f8301126134a357600080fd5b8135818111156134b257600080fd5b8660208260051b85010111156134c757600080fd5b60209290920196919550909350505050565b6000602082840312156134eb57600080fd5b8135611de7816133be565b60008060006060848603121561350b57600080fd5b83356135168161326d565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b828110156135775781518051855286810151878601528501518585015260609093019290850190600101613548565b5091979650505050505050565b600181811c9082168061359857607f821691505b6020821081036135b857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561360557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156136355761363561360c565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016136625761366261360c565b5060010190565b600060ff821660ff810361367f5761367f61360c565b60010192915050565b60006020828403121561369a57600080fd5b8151611de78161326d565b6000602082840312156136b757600080fd5b8151611de7816133be565b60008160001904831182151516156136dc576136dc61360c565b500290565b6000828210156136f3576136f361360c565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261371d5761371d6136f8565b500690565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561374b57600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b838110156137955781516001600160a01b031687529582019590820190600101613770565b509495945050505050565b85815284602082015260a0604082015260006137bf60a083018661375c565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156137f157600080fd5b8351925060208401519150604084015190509250925092565b600082613819576138196136f8565b500490565b848152608060208201526000613837608083018661375c565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212202e540b5a3e7dcb0f75c128cf2474288c27365e453f8194004876824ba30e81e864736f6c634300080d003360a06040523480156200001157600080fd5b5060408051808201825260188082527f4469616d6f6e645f4469766964656e645f547261636b65720000000000000000602080840182815285518087019096529285528401528151919291839183916200006e91600391620000df565b50805162000084906004906020840190620000df565b5050600980546001600160a01b03191633908117909155604051909350600092507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091508290a369021e19e0c9bab2400000608052620001c1565b828054620000ed9062000185565b90600052602060002090601f0160209004810192826200011157600085556200015c565b82601f106200012c57805160ff19168380011785556200015c565b828001600101855582156200015c579182015b828111156200015c5782518255916020019190600101906200013f565b506200016a9291506200016e565b5090565b5b808211156200016a57600081556001016200016f565b600181811c908216806200019a57607f821691505b602082108103620001bb57634e487b7160e01b600052602260045260246000fd5b50919050565b6080516117ce620001eb6000396000818161051c0152818161077d0152610cb101526117ce6000f3fe6080604052600436106101c65760003560e01c80636a474002116100f7578063a457c2d711610095578063be10b61411610064578063be10b6141461050a578063dd62ed3e1461053e578063e30443bc14610584578063fbcbc0f1146105a457600080fd5b8063a457c2d714610474578063a8b9d24014610494578063a9059cbb146104b4578063aafd847a146104d457600080fd5b806385a6b3ae116100d157806385a6b3ae146104015780638da5cb5b1461041757806391b89fba1461043f57806395d89b411461045f57600080fd5b80636a474002146103a157806370a08231146103b6578063715018a6146103ec57600080fd5b806327ce014711610164578063369513561161013e578063369513561461031157806339509351146103315780634e7b827f1461035157806352b5f81d1461038157600080fd5b806327ce0147146102b5578063313ce567146102d557806331e79db0146102f157600080fd5b806309bbedde116101a057806309bbedde1461023d57806318160ddd1461026057806318c18adb1461027557806323b872dd1461029557600080fd5b806303c83302146101da57806306fdde03146101e2578063095ea7b31461020d57600080fd5b366101d5576101d36105d9565b005b600080fd5b6101d36105d9565b3480156101ee57600080fd5b506101f761066c565b60405161020491906114f3565b60405180910390f35b34801561021957600080fd5b5061022d610228366004611560565b6106fe565b6040519015158152602001610204565b34801561024957600080fd5b50610252610718565b604051908152602001610204565b34801561026c57600080fd5b50600254610252565b34801561028157600080fd5b506101d3610290366004611560565b610728565b3480156102a157600080fd5b5061022d6102b036600461158c565b610839565b3480156102c157600080fd5b506102526102d03660046115cd565b61085d565b3480156102e157600080fd5b5060405160128152602001610204565b3480156102fd57600080fd5b506101d361030c3660046115cd565b6108b9565b34801561031d57600080fd5b5061022d61032c3660046115cd565b610997565b34801561033d57600080fd5b5061022d61034c366004611560565b6109e3565b34801561035d57600080fd5b5061022d61036c3660046115cd565b600d6020526000908152604090205460ff1681565b34801561038d57600080fd5b5061025261039c3660046115ea565b610a22565b3480156103ad57600080fd5b506101d3610a63565b3480156103c257600080fd5b506102526103d13660046115cd565b6001600160a01b031660009081526020819052604090205490565b3480156103f857600080fd5b506101d3610b0b565b34801561040d57600080fd5b5061025260085481565b34801561042357600080fd5b506009546040516001600160a01b039091168152602001610204565b34801561044b57600080fd5b5061025261045a3660046115cd565b610b7f565b34801561046b57600080fd5b506101f7610b8a565b34801561048057600080fd5b5061022d61048f366004611560565b610b99565b3480156104a057600080fd5b506102526104af3660046115cd565b610c2b565b3480156104c057600080fd5b5061022d6104cf366004611560565b610c57565b3480156104e057600080fd5b506102526104ef3660046115cd565b6001600160a01b031660009081526007602052604090205490565b34801561051657600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b34801561054a57600080fd5b506102526105593660046115ea565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561059057600080fd5b506101d361059f366004611560565b610c65565b3480156105b057600080fd5b506105c46105bf3660046115cd565b610d93565b60408051928352602083019190915201610204565b60006105e460025490565b116105ee57600080fd5b341561066a5761062161060060025490565b61060e34600160801b610dc0565b6106189190611639565b60055490610dd3565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26008546106669034610dd3565b6008555b565b60606003805461067b9061165b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a79061165b565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b60003361070c818585610ddf565b60019150505b92915050565b6000610723600b5490565b905090565b6009546001600160a01b0316331461075b5760405162461bcd60e51b815260040161075290611695565b60405180910390fd5b6001600160a01b0382166000908152600d60205260409020805460ff191690557f00000000000000000000000000000000000000000000000000000000000000008110610801576107ac8282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610801576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610801600b80546001019055565b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b600033610847858285610ea2565b610852858585610f2e565b506001949350505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b926108af926108aa926108a49161089f9190610dc0565b610f8d565b90610ffb565b611007565b6107129190611639565b6009546001600160a01b031633146108e35760405162461bcd60e51b815260040161075290611695565b6001600160a01b0381166000908152600d60205260408120805460ff19166001179055610911908290610e43565b6001600160a01b0381166000908152600c602052604090205460ff161515600103610960576001600160a01b0381166000908152600c60205260409020805460ff19169055610960600b611059565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546000906001600160a01b031633146109c45760405162461bcd60e51b815260040161075290611695565b506001600160a01b03166000908152600d602052604090205460ff1690565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061070c9082908690610a1d9087906116ca565b610ddf565b6009546000906001600160a01b03163314610a4f5760405162461bcd60e51b815260040161075290611695565b6000610a5b84846110b0565b949350505050565b60405162461bcd60e51b815260206004820152606b60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a2077697468647260448201527f61774469766964656e642064697361626c65642e20557365207468652027636c60648201527f61696d272066756e6374696f6e206f6e20746865206d61696e204469616d6f6e60848201526a321031b7b73a3930b1ba1760a91b60a482015260c401610752565b6009546001600160a01b03163314610b355760405162461bcd60e51b815260040161075290611695565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b600061071282610c2b565b60606004805461067b9061165b565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610752565b6108528286868403610ddf565b6001600160a01b03811660009081526007602052604081205461071290610c518461085d565b90611206565b60003361070c818585610f2e565b6009546001600160a01b03163314610c8f5760405162461bcd60e51b815260040161075290611695565b6001600160a01b0382166000908152600d602052604090205460ff16610d35577f00000000000000000000000000000000000000000000000000000000000000008110610d3957610ce08282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610d35576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610d35600b80546001019055565b5050565b610d44826000610e43565b6001600160a01b0382166000908152600c602052604090205460ff161515600103610d35576001600160a01b0382166000908152600c60205260409020805460ff19169055610d35600b611059565b600080610d9f83610c2b565b6001600160a01b039093166000908152600760205260409020549293915050565b6000610dcc82846116e2565b9392505050565b6000610dcc82846116ca565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2061707060448201526d1c9bdd985b1cc8185b1b1bddd95960921b6064820152608401610752565b505050565b6001600160a01b03821660009081526020819052604090205480821115610e82576000610e708383611206565b9050610e7c8482611212565b50505050565b80821015610e3e576000610e968284611206565b9050610e7c8482611276565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610e7c5781811015610f215760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610752565b610e7c8484848403610ddf565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2074726160448201526d1b9cd9995c9cc8185b1b1bddd95960921b6064820152608401610752565b60006001600160ff1b03821115610ff75760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610752565b5090565b6000610dcc8284611701565b600080821215610ff75760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610752565b8054806110a85760405162461bcd60e51b815260206004820152601b60248201527f436f756e7465723a2064656372656d656e74206f766572666c6f7700000000006044820152606401610752565b600019019055565b6000806110bc84610c2b565b905080156111fc576001600160a01b0384166000908152600760205260409020546110e79082610dd3565b6001600160a01b038516600081815260076020526040908190209290925590517feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69061114890849087909182526001600160a01b0316602082015260400190565b60405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461119d576040519150601f19603f3d011682016040523d82523d6000602084013e6111a2565b606091505b50509050806111f4576001600160a01b0385166000908152600760205260409020546111ce9083611206565b6001600160a01b0386166000908152600760205260408120919091559250610712915050565b509050610712565b5060009392505050565b6000610dcc8284611742565b61121c82826112ba565b61125661123761089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611399565b6001600160a01b0390921660009081526006602052604090209190915550565b61128082826113a5565b61125661129b61089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490610ffb565b6001600160a01b0382166113105760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610752565b806002600082825461132291906116ca565b90915550506001600160a01b0382166000908152602081905260408120805483929061134f9084906116ca565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000610dcc8284611759565b6001600160a01b0382166114055760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610752565b6001600160a01b038216600090815260208190526040902054818110156114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610752565b6001600160a01b03831660009081526020819052604081208383039055600280548492906114a8908490611742565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b8181101561152057858101830151858201604001528201611504565b81811115611532576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461155d57600080fd5b50565b6000806040838503121561157357600080fd5b823561157e81611548565b946020939093013593505050565b6000806000606084860312156115a157600080fd5b83356115ac81611548565b925060208401356115bc81611548565b929592945050506040919091013590565b6000602082840312156115df57600080fd5b8135610dcc81611548565b600080604083850312156115fd57600080fd5b823561160881611548565b9150602083013561161881611548565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008261165657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061166f57607f821691505b60208210810361168f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156116dd576116dd611623565b500190565b60008160001904831182151516156116fc576116fc611623565b500290565b600080821280156001600160ff1b038490038513161561172357611723611623565b600160ff1b839003841281161561173c5761173c611623565b50500190565b60008282101561175457611754611623565b500390565b60008083128015600160ff1b85018412161561177757611777611623565b6001600160ff1b038401831381161561179257611792611623565b5050039056fea2646970667358221220a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc64736f6c634300080d00330000000000000000000000004f7a3ed9c0f94058174ee767a95c3055453bdfa3000000000000000000000000840b69f38634860897f925cd9d85b860a59c088a000000000000000000000000e8f3ac3f57ae08d1c1f12233dee069e5b84cb7d8

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638aaa9389116101d1578063b579b29411610102578063e3402c67116100a0578063ec29f4e91161006f578063ec29f4e914610ab4578063f429389014610ae1578063fbcbc0f114610af6578063fdb5a03e14610b1657600080fd5b8063e3402c6714610a31578063e4441f0a14610a47578063e5fc10ed14610a74578063e7a919f914610a9457600080fd5b8063d2971059116100dc578063d297105914610995578063d539be5f146109ab578063dd62ed3e146109cb578063de30aad114610a1157600080fd5b8063b579b2941461094a578063b652ef3b14610960578063ba762ddd1461098057600080fd5b8063a457c2d71161016f578063af9549e011610149578063af9549e0146108ba578063b1fdb11b146108da578063b485430b14610910578063b515566a1461092a57600080fd5b8063a457c2d71461085a578063a8b9d2401461087a578063a9059cbb1461089a57600080fd5b806390677833116101ab57806390677833146107a157806395d89b41146107ce578063963bafa0146107e3578063a2923a0f1461083a57600080fd5b80638aaa9389146107335780638da5cb5b146107535780638e5916b21461077157600080fd5b80634297a7ca116102b657806366cc702611610254578063715018a611610223578063715018a6146106d25780637c4b492e146106e75780638954fb4a146106fd57806389a5c6911461071d57600080fd5b806366cc7026146106525780636843cd84146106725780636973cd091461069257806370a08231146106b257600080fd5b80635b6612ad116102905780635b6612ad146105da5780635b683e66146106075780635fcefa421461061d57806364b0f6531461063d57600080fd5b80634297a7ca146105805780634e71d92d146105b057806351bc3c85146105c557600080fd5b806323b872dd11610323578063313ce567116102fd578063313ce567146104f457806339509351146105165780633bbac579146105365780633e9ffbea1461056657600080fd5b806323b872dd146104875780632c1f5216146104a757806330bb4cff146104df57600080fd5b806312dfbd331161035f57806312dfbd3314610410578063168380131461043257806318160ddd146104525780631c08bc5d1461046757600080fd5b806306fdde03146103915780630866e0e9146103bc578063095ea7b3146103e057600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610b2b565b6040516103b39190613218565b60405180910390f35b3480156103c857600080fd5b506103d260155481565b6040519081526020016103b3565b3480156103ec57600080fd5b506104006103fb366004613285565b610bbd565b60405190151581526020016103b3565b34801561041c57600080fd5b5061043061042b3660046132b1565b610bd7565b005b34801561043e57600080fd5b5061043061044d3660046132ca565b610c0f565b34801561045e57600080fd5b506002546103d2565b34801561047357600080fd5b506104306104823660046132b1565b610c50565b34801561049357600080fd5b506104006104a23660046132ec565b610c7f565b3480156104b357600080fd5b506021546104c7906001600160a01b031681565b6040516001600160a01b0390911681526020016103b3565b3480156104eb57600080fd5b506103d2610ca3565b34801561050057600080fd5b5060125b60405160ff90911681526020016103b3565b34801561052257600080fd5b50610400610531366004613285565b610d16565b34801561054257600080fd5b5061040061055136600461332d565b60106020526000908152604090205460ff1681565b34801561057257600080fd5b50601c546104009060ff1681565b34801561058c57600080fd5b5061040061059b36600461332d565b60126020526000908152604090205460ff1681565b3480156105bc57600080fd5b50610430610d55565b3480156105d157600080fd5b50610430610d62565b3480156105e657600080fd5b506103d26105f536600461332d565b60236020526000908152604090205481565b34801561061357600080fd5b506103d260145481565b34801561062957600080fd5b5061043061063836600461334a565b610db2565b34801561064957600080fd5b506103d2610e10565b34801561065e57600080fd5b5061043061066d3660046132b1565b610e5a565b34801561067e57600080fd5b506103d261068d36600461332d565b610e89565b34801561069e57600080fd5b506104306106ad366004613385565b610ef9565b3480156106be57600080fd5b506103d26106cd36600461332d565b610f5b565b3480156106de57600080fd5b50610430610f76565b3480156106f357600080fd5b506103d260245481565b34801561070957600080fd5b506104306107183660046133cc565b610fea565b34801561072957600080fd5b506103d2601b5481565b34801561073f57600080fd5b5061043061074e3660046132b1565b6110ca565b34801561075f57600080fd5b506005546001600160a01b03166104c7565b34801561077d57600080fd5b5061040061078c36600461332d565b600f6020526000908152604090205460ff1681565b3480156107ad57600080fd5b506103d26107bc36600461332d565b601d6020526000908152604090205481565b3480156107da57600080fd5b506103a66110f9565b3480156107ef57600080fd5b5061081f6107fe366004613410565b601e6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103b3565b34801561084657600080fd5b5061043061085536600461342b565b611108565b34801561086657600080fd5b50610400610875366004613285565b611183565b34801561088657600080fd5b506103d261089536600461332d565b611215565b3480156108a657600080fd5b506104006108b5366004613285565b611248565b3480156108c657600080fd5b506104306108d53660046133cc565b611256565b3480156108e657600080fd5b506103d26108f536600461332d565b6001600160a01b031660009081526029602052604090205490565b34801561091c57600080fd5b50601f546105049060ff1681565b34801561093657600080fd5b50610430610945366004613464565b6112ab565b34801561095657600080fd5b506103d260165481565b34801561096c57600080fd5b506103d261097b36600461332d565b6113d6565b34801561098c57600080fd5b506103d26114a4565b3480156109a157600080fd5b506103d260265481565b3480156109b757600080fd5b506104306109c6366004613410565b6114b5565b3480156109d757600080fd5b506103d26109e6366004613385565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1d57600080fd5b50610430610a2c3660046134d9565b6114f5565b348015610a3d57600080fd5b506103d260255481565b348015610a5357600080fd5b506103d2610a6236600461332d565b60176020526000908152604090205481565b348015610a8057600080fd5b50610430610a8f3660046133cc565b611532565b348015610aa057600080fd5b50610430610aaf3660046132ca565b611587565b348015610ac057600080fd5b50610ad4610acf3660046134f6565b61191d565b6040516103b3919061352b565b348015610aed57600080fd5b50610430611b4e565b348015610b0257600080fd5b5061081f610b1136600461332d565b611c1b565b348015610b2257600080fd5b50610430611cac565b606060038054610b3a90613584565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690613584565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b600033610bcb818585611cb7565b60019150505b92915050565b6005546001600160a01b03163314610c0a5760405162461bcd60e51b8152600401610c01906135be565b60405180910390fd5b601b55565b6005546001600160a01b03163314610c395760405162461bcd60e51b8152600401610c01906135be565b6015829055610c4981603c611ddb565b6016555050565b6005546001600160a01b03163314610c7a5760405162461bcd60e51b8152600401610c01906135be565b602555565b600033610c8d858285611dee565b610c98858585611e7a565b506001949350505050565b602154604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1191906135f3565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610bcb9082908690610d50908790613622565b611cb7565b610d603360006123b1565b565b6005546001600160a01b03163314610d8c5760405162461bcd60e51b8152600401610c01906135be565b6000610da3602454610d9d30610f5b565b9061264c565b9050610dae81612658565b5050565b6005546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610c01906135be565b600a8511158015610df05750600560145411155b610df957600080fd5b601394909455601492909255601855601955601a55565b602154604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ced573d6000803e3d6000fd5b6005546001600160a01b03163314610e845760405162461bcd60e51b8152600401610c01906135be565b600b55565b6021546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd191906135f3565b6005546001600160a01b03163314610f235760405162461bcd60e51b8152600401610c01906135be565b601f8054610100600160a81b0319166101006001600160a01b0394851602179055602080546001600160a01b03191691909216179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610fa05760405162461bcd60e51b8152600401610c01906135be565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110145760405162461bcd60e51b8152600401610c01906135be565b801561107e5760215460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db0906024015b600060405180830381600087803b15801561106257600080fd5b505af1158015611076573d6000803e3d6000fd5b505050505050565b6021546001600160a01b03166318c18adb8361109981610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611048565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610c01906135be565b601155565b606060048054610b3a90613584565b6005546001600160a01b031633146111325760405162461bcd60e51b8152600401610c01906135be565b61113d83603c611ddb565b60ff85166000908152601e602052604090205561115b82603c611ddb565b60ff9094166000908152601e6020526040902060018101949094556002909301929092555050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156112085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c01565b610c988286868403611cb7565b6021546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610eb8565b600033610bcb818585611e7a565b6005546001600160a01b031633146112805760405162461bcd60e51b8152600401610c01906135be565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112d55760405162461bcd60e51b8152600401610c01906135be565b60005b818110156113d1576009546001600160a01b03168383838181106112fe576112fe61363a565b9050602002016020810190611313919061332d565b6001600160a01b03161415801561136457506007546001600160a01b03168383838181106113435761134361363a565b9050602002016020810190611358919061332d565b6001600160a01b031614155b156113bf576001601060008585858181106113815761138161363a565b9050602002016020810190611396919061332d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806113c981613650565b9150506112d8565b505050565b60145460009060015b601f5460ff9081169082161161149d5760ff81166000908152601e60209081526040808320546001600160a01b0388168452601d90925290912054429161142591613622565b1115801561146a575060ff81166000908152601e60209081526040808320600101546001600160a01b0388168452601d90925290912054429161146791613622565b10155b1561148b5760ff166000908152601e60205260409020600201549392505050565b8061149581613669565b9150506113df565b5092915050565b6000610d11602454610d9d30610f5b565b6005546001600160a01b031633146114df5760405162461bcd60e51b8152600401610c01906135be565b601f805460ff191660ff92909216919091179055565b6005546001600160a01b0316331461151f5760405162461bcd60e51b8152600401610c01906135be565b601c805460ff1916911515919091179055565b6005546001600160a01b0316331461155c5760405162461bcd60e51b8152600401610c01906135be565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115b15760405162461bcd60e51b8152600401610c01906135be565b600754600160a01b900460ff161561160b5760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a2054726164696e6720697320616c7265616479206f70656e6044820152606401610c01565b42821161165a5760405162461bcd60e51b815260206004820152601a60248201527f4469616d6f6e643a20496e76616c69642074696d657374616d700000000000006044820152606401610c01565b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d19190613688565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190613688565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156117a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c89190613688565b600980546001600160a01b0319166001600160a01b0392831690811782556000908152600e602052604090819020805460ff191660011790556021549154905163031e79db60e41b815290831660048201529116906331e79db090602401600060405180830381600087803b15801561184057600080fd5b505af1158015611854573d6000803e3d6000fd5b5050505061186a61186430610f5b565b4761280d565b60095460075460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906136a5565b506007805460ff60a01b1916600160a01b179055600c82905561191261190b82603c611ddb565b839061291c565b600d55505043600855565b606060008311801561192f5750600082115b61197b5760405162461bcd60e51b815260206004820152601a60248201527f4469616d6f6e643a20496e76616c696420617267756d656e74730000000000006044820152606401610c01565b6001600160a01b0384166000908152602960205260408120549061199f85856136c2565b905060006119ad86836136e1565b90508281106119f65760405162461bcd60e51b81526020600482015260156024820152744469616d6f6e643a204f7574206f662072616e676560581b6044820152606401610c01565b8583831115611a0f57839250611a0c878461370e565b90505b60008167ffffffffffffffff811115611a2a57611a2a613722565b604051908082528060200260200182016040528015611a7f57816020015b611a6c60405180606001604052806000815260200160008152602001600081525090565b815260200190600190039081611a485790505b5090506000835b85811015611b3f576001600160a01b038b166000908152602960205260408120805483908110611ab857611ab861363a565b90600052602060002001549050602860008281526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050848481518110611b1357611b1361363a565b6020908102919091010152611b29600184613622565b9250508080611b3790613650565b915050611a86565b50909998505050505050505050565b6005546001600160a01b03163314611b785760405162461bcd60e51b8152600401610c01906135be565b6000611b8f6026544761264c90919063ffffffff16565b90506000611bc0611bac601854606461264c90919063ffffffff16565b601954611bba908590611ddb565b90612928565b90506000611beb611bdd601854606461264c90919063ffffffff16565b601a54611bba908690611ddb565b90506000611bfd82610d9d868661264c565b9050611c09838261291c565b9250611c158383612934565b50505050565b60215460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283929091169063fbcbc0f1906024016040805180830381865afa158015611c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8f9190613738565b90935091508282611c9f86610f5b565b9250925092509193909250565b610d603360016123b1565b6001600160a01b038316611d195760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c01565b6001600160a01b038216611d7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c01565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611de782846136c2565b9392505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611c155781811015611e6d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c01565b611c158484848403611cb7565b6001600160a01b03831660009081526010602052604090205460ff16158015611ebc57506001600160a01b03821660009081526010602052604090205460ff16155b611ec557600080fd5b601154600754829190600160a01b900460ff168015611f1e57506001600160a01b0385166000908152600e602052604090205460ff1680611f1e57506001600160a01b0384166000908152600e602052604090205460ff165b8015611f4357506001600160a01b0385166000908152600f602052604090205460ff16155b8015611f6857506001600160a01b0384166000908152600f602052604090205460ff16155b156120bf5742600c541115611fd45760405162461bcd60e51b815260206004820152602c60248201527f4469616d6f6e643a205072697661746520616e64207075626c69632073616c6560448201526b1034b9903737ba1037b832b760a11b6064820152608401610c01565b42600c5411158015611fe7575042600d54115b156120b157600a6011819055600b5490546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906135f3565b10156120b15760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a204e6f7420656e6f75676820244d7942616773546f6b656e6044820152606401610c01565b6120bc8585856129f2565b91505b6001600160a01b0384166000908152601d602052604081205490036120fa576001600160a01b0384166000908152601d602052604090204290555b6001600160a01b0384166000908152600e602052604090205460ff1615801561213c57506001600160a01b03841660009081526012602052604090205460ff16155b156121d25760006121568361215087610f5b565b9061291c565b9050612173612710611bba60115461216d60025490565b90611ddb565b8111156121d05760405162461bcd60e51b815260206004820152602560248201527f4469616d6f6e643a2057616c6c65742062616c616e6365206c696d69742072656044820152641858da195960da1b6064820152608401610c01565b505b6121dd858584612c4c565b6011819055602154604051631b4a89ab60e11b81526001600160a01b03878116600483015290911690633695135690602401602060405180830381865afa15801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906136a5565b6122c8576021546001600160a01b031663e30443bc8661226f81610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122b557600080fd5b505af19250505080156122c6575060015b505b602154604051631b4a89ab60e11b81526001600160a01b03868116600483015290911690633695135690602401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233691906136a5565b6123aa576021546001600160a01b031663e30443bc8561235581610f5b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561239b57600080fd5b505af192505050801561107657505b5050505050565b6021546040516302a2e74960e61b81526001600160a01b038481166004830152600092169063a8b9d24090602401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242091906135f3565b9050600081116124885760405162461bcd60e51b815260206004820152602d60248201527f4469616d6f6e643a20436c61696d657220686173206e6f20776974686472617760448201526c18589b1948191a5d9a59195b99609a1b6064820152608401610c01565b6000808361250e576021546040516352b5f81d60e01b81526001600160a01b03878116600483018190526024830152909116906352b5f81d906044016020604051808303816000875af11580156124e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250791906135f3565b9150612599565b6021546040516352b5f81d60e01b81526001600160a01b038781166004830152306024830152909116906352b5f81d906044016020604051808303816000875af1158015612560573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258491906135f3565b91508115612599576125968286612e1a565b90505b81156123aa576125ad602780546001019055565b60006125b860275490565b60008181526028602090815260408083208781556001808201889055426002909201919091556001600160a01b038b1680855260298452828520805492830181558552938390200184905580518781529182018690528101919091529091507f67dd3d116bf53e0ddda53bb148a5fdc129854e1c507c0eeda9190049a9bbc84f9060600160405180910390a1505050505050565b6000611de782846136e1565b60408051600280825260608201835260009247928492909160208301908036833701905050905030816000815181106126935761269361363a565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127109190613688565b816001815181106127235761272361363a565b6001600160a01b0392831660209182029290920101526007546127499130911686611cb7565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906127829087906000908690309042906004016137a0565b600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b5050505060006127c9834761264c90919063ffffffff16565b60408051878152602081018390529192507f4a6c12eb4e479a4ea28c8acad8efde466ef9bf69cf473501dd76865234496273910160405180910390a1949350505050565b6007546128259030906001600160a01b031684611cb7565b6007546001600160a01b031663f305d71982308560008061284e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156128b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128db91906137dc565b505060408051848152602081018490527fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb49250015b60405180910390a15050565b6000611de78284613622565b6000611de7828461380a565b811561297a57601f546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015612978573d6000803e3d6000fd5b505b80156129bc576020546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129ba573d6000803e3d6000fd5b505b60408051838152602081018390527f916ad8171ef8c567c7790377a142f0200f9565940680c06e30dd105cfd9249689101612910565b6001600160a01b0383166000908152600e60205260408120548190819060ff1680612a3557506001600160a01b0385166000908152600e602052604090205460ff165b612a815760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e643a204e6f206d61726b6574206d616b65727320666f756e64006044820152606401610c01565b6001600160a01b0386166000908152600e602052604090205460ff1615612b2357612abc6064611bba60135487611ddb90919063ffffffff16565b9150612ac8848361264c565b9050612ad5863084612c4c565b604080516001600160a01b03881681523060208201529081018390527f6b0b46d0273ce53f1de696d2100b35dd3a405dcecbcbeede66215d858d5c401d9060600160405180910390a1612c43565b6000612b2f8786612fcc565b15612b3d5750601454612b49565b612b46876113d6565b90505b612b586064611bba8784611ddb565b92506000612b806064611bba612b796014548661264c90919063ffffffff16565b8990611ddb565b602454909150612b90908261291c565b602455612b9d868561264c565b9250612baa883086612c4c565b6000612bbb602454610d9d30610f5b565b9050601b54811115612bdf57601c5460ff16612bd65750601b545b612bdf81613044565b6025546024541115612bf657612bf660245461313a565b604080516001600160a01b038b1681523060208201529081018690527f4ab5e0df8ff1605133dbdd1b8e3f52edb9539abe64595f6f70b30d2fea7f204a9060600160405180910390a15050505b95945050505050565b6001600160a01b038316612cb05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c01565b6001600160a01b038216612d125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c01565b6001600160a01b03831660009081526020819052604090205481811015612d8a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c01565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612dc1908490613622565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e0d91815260200190565b60405180910390a3611c15565b600080612e2630610f5b565b60408051600280825260608201835292935060009290916020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190613688565b81600081518110612ecc57612ecc61363a565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612f0057612f0061363a565b6001600160a01b03928316602091820292909201015260075460405163b6f9de9560e01b815291169063b6f9de95908790612f469060009086908a90429060040161381e565b6000604051808303818588803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b50505050506000612f8783610d9d30610f5b565b60408051888152602081018390529192507f2d5c8efb676a77fc04b6b50a19f6ccbf08ee66df0202de33576485f1f77b4b69910160405180910390a195945050505050565b6016546001600160a01b03831660009081526017602052604081205490914291612ff69190613622565b1161303b576001600160a01b038316600090815260176020526040902042905560155461302d90606490611bba9061216d87610f5b565b821161303b57506001610bd1565b50600092915050565b60006130606064611bba60185485611ddb90919063ffffffff16565b9050600061306f826002612928565b9050600061307d848361264c565b9050600061308a82612658565b905060006130a86064611bba60185485611ddb90919063ffffffff16565b905060006130c66064611bba60195486611ddb90919063ffffffff16565b905060006130e46064611bba601a5487611ddb90919063ffffffff16565b905060006130f882610d9d8581898961264c565b9050613104838261291c565b92506131108383612934565b6000871180156131205750600084115b1561312f5761312f878561280d565b505050505050505050565b600061314582612658565b602454909150613155908361264c565b60245560265460009061316990839061291c565b6021546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146131bb576040519150601f19603f3d011682016040523d82523d6000602084013e6131c0565b606091505b505090508015613202576040518381527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a1611c15565b60265461320f908461291c565b60265550505050565b600060208083528351808285015260005b8181101561324557858101830151858201604001528201613229565b81811115613257576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461328257600080fd5b50565b6000806040838503121561329857600080fd5b82356132a38161326d565b946020939093013593505050565b6000602082840312156132c357600080fd5b5035919050565b600080604083850312156132dd57600080fd5b50508035926020909101359150565b60008060006060848603121561330157600080fd5b833561330c8161326d565b9250602084013561331c8161326d565b929592945050506040919091013590565b60006020828403121561333f57600080fd5b8135611de78161326d565b600080600080600060a0868803121561336257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561339857600080fd5b82356133a38161326d565b915060208301356133b38161326d565b809150509250929050565b801515811461328257600080fd5b600080604083850312156133df57600080fd5b82356133ea8161326d565b915060208301356133b3816133be565b803560ff8116811461340b57600080fd5b919050565b60006020828403121561342257600080fd5b611de7826133fa565b6000806000806080858703121561344157600080fd5b61344a856133fa565b966020860135965060408601359560600135945092505050565b6000806020838503121561347757600080fd5b823567ffffffffffffffff8082111561348f57600080fd5b818501915085601f8301126134a357600080fd5b8135818111156134b257600080fd5b8660208260051b85010111156134c757600080fd5b60209290920196919550909350505050565b6000602082840312156134eb57600080fd5b8135611de7816133be565b60008060006060848603121561350b57600080fd5b83356135168161326d565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b828110156135775781518051855286810151878601528501518585015260609093019290850190600101613548565b5091979650505050505050565b600181811c9082168061359857607f821691505b6020821081036135b857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561360557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156136355761363561360c565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016136625761366261360c565b5060010190565b600060ff821660ff810361367f5761367f61360c565b60010192915050565b60006020828403121561369a57600080fd5b8151611de78161326d565b6000602082840312156136b757600080fd5b8151611de7816133be565b60008160001904831182151516156136dc576136dc61360c565b500290565b6000828210156136f3576136f361360c565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261371d5761371d6136f8565b500690565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561374b57600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b838110156137955781516001600160a01b031687529582019590820190600101613770565b509495945050505050565b85815284602082015260a0604082015260006137bf60a083018661375c565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156137f157600080fd5b8351925060208401519150604084015190509250925092565b600082613819576138196136f8565b500490565b848152608060208201526000613837608083018661375c565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212202e540b5a3e7dcb0f75c128cf2474288c27365e453f8194004876824ba30e81e864736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000004F7a3ed9C0F94058174EE767A95c3055453BDfA3000000000000000000000000840b69F38634860897f925cd9d85b860a59C088A000000000000000000000000e8f3ac3f57ae08d1c1f12233dee069e5b84cb7d8

-----Decoded View---------------
Arg [0] : _devWalletAddress (address): 0x4F7a3ed9C0F94058174EE767A95c3055453BDfA3
Arg [1] : _marketingWalletAddress (address): 0x840b69F38634860897f925cd9d85b860a59C088A
Arg [2] : _myBagsTokenAddress (address): 0xe8F3ac3f57aE08D1C1f12233DEe069E5B84cb7d8

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004F7a3ed9C0F94058174EE767A95c3055453BDfA3
Arg [1] : 000000000000000000000000840b69F38634860897f925cd9d85b860a59C088A
Arg [2] : 000000000000000000000000e8f3ac3f57ae08d1c1f12233dee069e5b84cb7d8


Deployed Bytecode Sourcemap

24692:22607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1707:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25782:43;;;;;;;;;;;;;;;;;;;762:25:1;;;750:2;735:18;25782:43:0;616:177:1;2780:242:0;;;;;;;;;;-1:-1:-1;2780:242:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;2780:242:0;1254:187:1;38216:126:0;;;;;;;;;;-1:-1:-1;38216:126:0;;;;;:::i;:::-;;:::i;:::-;;39040:286;;;;;;;;;;-1:-1:-1;39040:286:0;;;;;:::i;:::-;;:::i;2028:108::-;;;;;;;;;;-1:-1:-1;2116:12:0;;2028:108;;38350:122;;;;;;;;;;-1:-1:-1;38350:122:0;;;;;:::i;:::-;;:::i;3030:295::-;;;;;;;;;;-1:-1:-1;3030:295:0;;;;;:::i;:::-;;:::i;26520:45::-;;;;;;;;;;-1:-1:-1;26520:45:0;;;;-1:-1:-1;;;;;26520:45:0;;;;;;-1:-1:-1;;;;;2548:32:1;;;2530:51;;2518:2;2503:18;26520:45:0;2345:242:1;31683:141:0;;;;;;;;;;;;;:::i;34109:100::-;;;;;;;;;;-1:-1:-1;24945:2:0;34109:100;;;2764:4:1;2752:17;;;2734:36;;2722:2;2707:18;34109:100:0;2592:184:1;3333:272:0;;;;;;;;;;-1:-1:-1;3333:272:0;;;;;:::i;:::-;;:::i;25548:37::-;;;;;;;;;;-1:-1:-1;25548:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26125:27;;;;;;;;;;-1:-1:-1;26125:27:0;;;;;;;;25643:55;;;;;;;;;;-1:-1:-1;25643:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32207:79;;;;;;;;;;;;;:::i;30303:200::-;;;;;;;;;;;;;:::i;26635:47::-;;;;;;;;;;-1:-1:-1;26635:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;25745:30;;;;;;;;;;;;;;;;37787:421;;;;;;;;;;-1:-1:-1;37787:421:0;;;;;:::i;:::-;;:::i;33537:142::-;;;;;;;;;;;;;:::i;36736:161::-;;;;;;;;;;-1:-1:-1;36736:161:0;;;;;:::i;:::-;;:::i;32026:173::-;;;;;;;;;;-1:-1:-1;32026:173:0;;;;;:::i;:::-;;:::i;39666:214::-;;;;;;;;;;-1:-1:-1;39666:214:0;;;;;:::i;:::-;;:::i;2144:177::-;;;;;;;;;;-1:-1:-1;2144:177:0;;;;;:::i;:::-;;:::i;10791:148::-;;;;;;;;;;;;;:::i;26691:37::-;;;;;;;;;;;;;;;;37087:342;;;;;;;;;;-1:-1:-1;37087:342:0;;;;;:::i;:::-;;:::i;26065:53::-;;;;;;;;;;;;;;;;37651:128;;;;;;;;;;-1:-1:-1;37651:128:0;;;;;:::i;:::-;;:::i;10579:79::-;;;;;;;;;;-1:-1:-1;10644:6:0;;-1:-1:-1;;;;;10644:6:0;10579:79;;25493:48;;;;;;;;;;-1:-1:-1;25493:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26266:54;;;;;;;;;;-1:-1:-1;26266:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;1815:104;;;;;;;;;;;;;:::i;26327:58::-;;;;;;;;;;-1:-1:-1;26327:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5153:25:1;;;5209:2;5194:18;;5187:34;;;;5237:18;;;5230:34;5141:2;5126:18;26327:58:0;4951:319:1;38579:325:0;;;;;;;;;;-1:-1:-1;38579:325:0;;;;;:::i;:::-;;:::i;3613:507::-;;;;;;;;;;-1:-1:-1;3613:507:0;;;;;:::i;:::-;;:::i;31832:186::-;;;;;;;;;;-1:-1:-1;31832:186:0;;;;;:::i;:::-;;:::i;2329:234::-;;;;;;;;;;-1:-1:-1;2329:234:0;;;;;:::i;:::-;;:::i;36905:174::-;;;;;;;;;;-1:-1:-1;36905:174:0;;;;;:::i;:::-;;:::i;47127:132::-;;;;;;;;;;-1:-1:-1;47127:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;47220:24:0;47193:7;47220:24;;;:14;:24;;;;;:31;;47127:132;26392:33;;;;;;;;;;-1:-1:-1;26392:33:0;;;;;;;;39334:324;;;;;;;;;;-1:-1:-1;39334:324:0;;;;;:::i;:::-;;:::i;25832:52::-;;;;;;;;;;;;;;;;31120:555;;;;;;;;;;-1:-1:-1;31120:555:0;;;;;:::i;:::-;;:::i;45986:149::-;;;;;;;;;;;;;:::i;26797:31::-;;;;;;;;;;;;;;;;38912:120;;;;;;;;;;-1:-1:-1;38912:120:0;;;;;:::i;:::-;;:::i;2571:201::-;;;;;;;;;;-1:-1:-1;2571:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;2737:18:0;;;2705:7;2737:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2571:201;38480:91;;;;;;;;;;-1:-1:-1;38480:91:0;;;;;:::i;:::-;;:::i;26735:53::-;;;;;;;;;;;;;;;;25891:55;;;;;;;;;;-1:-1:-1;25891:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;37437:206;;;;;;;;;;-1:-1:-1;37437:206:0;;;;;:::i;:::-;;:::i;29312:983::-;;;;;;;;;;-1:-1:-1;29312:983:0;;;;;:::i;:::-;;:::i;46143:976::-;;;;;;;;;;-1:-1:-1;46143:976:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;30511:601::-;;;;;;;;;;;;;:::i;33687:414::-;;;;;;;;;;-1:-1:-1;33687:414:0;;;;;:::i;:::-;;:::i;32294:81::-;;;;;;;;;;;;;:::i;1707:100::-;1761:13;1794:5;1787:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1707:100;:::o;2780:242::-;2899:4;1167:10;2960:32;1167:10;2976:7;2985:6;2960:8;:32::i;:::-;3010:4;3003:11;;;2780:242;;;;;:::o;38216:126::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;;;;;;;;;38299:23:::1;:35:::0;38216:126::o;39040:286::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;39194:23:::1;:50:::0;;;39280:38:::1;:23:::0;39308:9:::1;39280:27;:38::i;:::-;39255:22;:63:::0;-1:-1:-1;;39040:286:0:o;38350:122::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38431:21:::1;:33:::0;38350:122::o;3030:295::-;3161:4;1167:10;3219:38;3235:4;1167:10;3250:6;3219:15;:38::i;:::-;3268:27;3278:4;3284:2;3288:6;3268:9;:27::i;:::-;-1:-1:-1;3313:4:0;;3030:295;-1:-1:-1;;;;3030:295:0:o;31683:141::-;31773:15;;:43;;;-1:-1:-1;;;31773:43:0;;;;31746:7;;-1:-1:-1;;;;;31773:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31766:50;;31683:141;:::o;3333:272::-;1167:10;3448:4;3534:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3534:27:0;;;;;;;;;;3448:4;;1167:10;3509:66;;1167:10;;3534:27;;:40;;3564:10;;3534:40;:::i;:::-;3509:8;:66::i;32207:79::-;32244:34;32259:10;32272:5;32244:6;:34::i;:::-;32207:79::o;30303:200::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;30355:19:::1;30377:76;30420:22;;30377:24;30395:4;30377:9;:24::i;:::-;:28:::0;::::1;:76::i;:::-;30355:98;;30466:29;30483:11;30466:16;:29::i;:::-;;30344:159;30303:200::o:0;37787:421::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38010:2:::1;37995:11;:17;;:37;;;;;38031:1;38016:11;;:16;;37995:37;37987:46;;;::::0;::::1;;38046:10;:24:::0;;;;38081:11:::1;:26:::0;;;;38118:6:::1;:16:::0;38145:6:::1;:16:::0;38172:12:::1;:28:::0;37787:421::o;33537:142::-;33630:15;;:41;;;-1:-1:-1;;;33630:41:0;;;;33603:7;;-1:-1:-1;;;;;33630:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;36736:161;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;36849:18:::1;:40:::0;36736:161::o;32026:173::-;32156:15;;:35;;-1:-1:-1;;;32156:35:0;;-1:-1:-1;;;;;2548:32:1;;;32156:35:0;;;2530:51:1;32124:7:0;;32156:15;;:25;;2503:18:1;;32156:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39666:214::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;39791:16:::1;:29:::0;;-1:-1:-1;;;;;;39791:29:0::1;;-1:-1:-1::0;;;;;39791:29:0;;::::1;;;::::0;;39831:22:::1;:41:::0;;-1:-1:-1;;;;;;39831:41:0::1;::::0;;;::::1;;::::0;;39666:214::o;2144:177::-;-1:-1:-1;;;;;2295:18:0;2263:7;2295:18;;;;;;;;;;;;2144:177::o;10791:148::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;10882:6:::1;::::0;10861:40:::1;::::0;10898:1:::1;::::0;-1:-1:-1;;;;;10882:6:0::1;::::0;10861:40:::1;::::0;10898:1;;10861:40:::1;10912:6;:19:::0;;-1:-1:-1;;;;;;10912:19:0::1;::::0;;10791:148::o;37087:342::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;37225:22:::1;37221:201;;;37264:15;::::0;:46:::1;::::0;-1:-1:-1;;;37264:46:0;;-1:-1:-1;;;;;2548:32:1;;;37264:46:0::1;::::0;::::1;2530:51:1::0;37264:15:0;;::::1;::::0;:36:::1;::::0;2503:18:1;;37264:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30466:29;30344:159;30303:200::o:0;37221:201::-:1;37343:15;::::0;-1:-1:-1;;;;;37343:15:0::1;:36;37380:8:::0;37390:19:::1;37380:8:::0;37390:9:::1;:19::i;:::-;37343:67;::::0;-1:-1:-1;;;;;;37343:67:0::1;::::0;;;;;;-1:-1:-1;;;;;9167:32:1;;;37343:67:0::1;::::0;::::1;9149:51:1::0;9216:18;;;9209:34;9122:18;;37343:67:0::1;8975:274:1::0;37651:128:0;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;37736:21:::1;:35:::0;37651:128::o;1815:104::-;1871:13;1904:7;1897:14;;;;;:::i;38579:325::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38769:20:::1;:5:::0;38779:9:::1;38769;:20::i;:::-;38736:25;::::0;::::1;;::::0;;;:17:::1;:25;::::0;;;;:53;38831:18:::1;:3:::0;38839:9:::1;38831:7;:18::i;:::-;38800:25;::::0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;:28:::1;::::0;::::1;:49:::0;;;;38860:29:::1;::::0;;::::1;:36:::0;;;;-1:-1:-1;;38579:325:0:o;3613:507::-;1167:10;3733:4;3821:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3821:27:0;;;;;;;;;;3733:4;;1167:10;3881:35;;;;3859:122;;;;-1:-1:-1;;;3859:122:0;;9456:2:1;3859:122:0;;;9438:21:1;9495:2;9475:18;;;9468:30;9534:34;9514:18;;;9507:62;-1:-1:-1;;;9585:18:1;;;9578:35;9630:19;;3859:122:0;9254:401:1;3859:122:0;4017:60;4026:5;4033:7;4061:15;4042:16;:34;4017:8;:60::i;31832:186::-;31962:15;;:48;;-1:-1:-1;;;31962:48:0;;-1:-1:-1;;;;;2548:32:1;;;31962:48:0;;;2530:51:1;31930:7:0;;31962:15;;:38;;2503:18:1;;31962:48:0;2345:242:1;2329:234:0;2444:4;1167:10;2505:28;1167:10;2522:2;2526:6;2505:9;:28::i;36905:174::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37026:26:0;;;::::1;;::::0;;;:16:::1;:26;::::0;;;;:45;;-1:-1:-1;;37026:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36905:174::o;39334:324::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;39410:9:::1;39405:246;39425:16:::0;;::::1;39405:246;;;39497:13;::::0;-1:-1:-1;;;;;39497:13:0::1;39485:5:::0;;39491:1;39485:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39485:25:0::1;;;:82;;;;-1:-1:-1::0;39551:15:0::1;::::0;-1:-1:-1;;;;;39551:15:0::1;39531:5:::0;;39537:1;39531:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39531:36:0::1;;;39485:82;39463:177;;;39620:4;39602:5;:15;39608:5;;39614:1;39608:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39602:15:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39602:15:0;:22;;-1:-1:-1;;39602:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39463:177:::1;39443:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39405:246;;;;39334:324:::0;;:::o;31120:555::-;31204:11;;31170:7;;31243:1;31228:417;31251:20;;;;;;31246:25;;;;31228:417;;31343:20;;;;;;;:17;:20;;;;;;;;:25;-1:-1:-1;;;;;31316:24:0;;;;:19;:24;;;;;;;31393:15;;31316:52;;;:::i;:::-;:92;;:207;;;;-1:-1:-1;31460:20:0;;;;;;;:17;:20;;;;;;;;:23;;;-1:-1:-1;;;;;31433:24:0;;;;:19;:24;;;;;;;31508:15;;31433:50;;;:::i;:::-;:90;;31316:207;31293:341;;;31565:20;;;;;;:17;:20;;;;;:24;;;;31120:555;-1:-1:-1;;;31120:555:0:o;31293:341::-;31273:3;;;;:::i;:::-;;;;31228:417;;;-1:-1:-1;31664:3:0;31120:555;-1:-1:-1;;31120:555:0:o;45986:149::-;46048:7;46075:52;46104:22;;46075:24;46093:4;46075:9;:24::i;38912:120::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38992:20:::1;:32:::0;;-1:-1:-1;;38992:32:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;38912:120::o;38480:91::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;38544:7:::1;:19:::0;;-1:-1:-1;;38544:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38480:91::o;37437:206::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37575:33:0;;;::::1;;::::0;;;:23:::1;:33;::::0;;;;:60;;-1:-1:-1;;37575:60:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37437:206::o;29312:983::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;29448:11:::1;::::0;-1:-1:-1;;;29448:11:0;::::1;;;29447:12;29439:57;;;::::0;-1:-1:-1;;;29439:57:0;;10314:2:1;29439:57:0::1;::::0;::::1;10296:21:1::0;;;10333:18;;;10326:30;10392:34;10372:18;;;10365:62;10444:18;;29439:57:0::1;10112:356:1::0;29439:57:0::1;29529:15;29515:11;:29;29507:68;;;::::0;-1:-1:-1;;;29507:68:0;;10675:2:1;29507:68:0::1;::::0;::::1;10657:21:1::0;10714:2;10694:18;;;10687:30;10753:28;10733:18;;;10726:56;10799:18;;29507:68:0::1;10473:350:1::0;29507:68:0::1;29620:15;;;;;;;;;-1:-1:-1::0;;;;;29620:15:0::1;-1:-1:-1::0;;;;;29620:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29602:55:0::1;;29684:4;29708:15;;;;;;;;;-1:-1:-1::0;;;;;29708:15:0::1;-1:-1:-1::0;;;;;29708:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29602:143;::::0;-1:-1:-1;;;;;;29602:143:0::1;::::0;;;;;;-1:-1:-1;;;;;11314:15:1;;;29602:143:0::1;::::0;::::1;11296:34:1::0;11366:15;;11346:18;;;11339:43;11231:18;;29602:143:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29586:13;:159:::0;;-1:-1:-1;;;;;;29586:159:0::1;-1:-1:-1::0;;;;;29586:159:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;29758:40:0;;;:25:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;29758:47:0::1;-1:-1:-1::0;29758:47:0::1;::::0;;29816:15:::1;::::0;29853:13;;29816:51;;-1:-1:-1;;;29816:51:0;;29853:13;;::::1;29816:51;::::0;::::1;2530::1::0;29816:15:0;::::1;::::0;:36:::1;::::0;2503:18:1;;29816:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29880:61;29893:24;29911:4;29893:9;:24::i;:::-;29919:21;29880:12;:61::i;:::-;29959:13;::::0;30004:15:::1;::::0;29952:111:::1;::::0;-1:-1:-1;;;29952:111:0;;-1:-1:-1;;;;;30004:15:0;;::::1;29952:111;::::0;::::1;9149:51:1::0;-1:-1:-1;;9216:18:1;;;9209:34;29959:13:0;::::1;::::0;29952:29:::1;::::0;9122:18:1;;29952:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;30076:11:0::1;:18:::0;;-1:-1:-1;;;;30076:18:0::1;-1:-1:-1::0;;;30076:18:0::1;::::0;;30105:20:::1;:34:::0;;;30172:78:::1;30202:37;:22:::0;30229:9:::1;30202:26;:37::i;:::-;30172:11:::0;;:15:::1;:78::i;:::-;30150:19;:100:::0;-1:-1:-1;;30275:12:0::1;30261:11;:26:::0;29312:983::o;46143:976::-;46275:19;46324:1;46315:6;:10;:29;;;;;46343:1;46329:11;:15;46315:29;46307:68;;;;-1:-1:-1;;;46307:68:0;;11845:2:1;46307:68:0;;;11827:21:1;11884:2;11864:18;;;11857:30;11923:28;11903:18;;;11896:56;11969:18;;46307:68:0;11643:350:1;46307:68:0;-1:-1:-1;;;;;46413:24:0;;46386;46413;;;:14;:24;;;;;:31;;46469:20;46483:6;46469:11;:20;:::i;:::-;46455:34;-1:-1:-1;46500:13:0;46516:12;46522:6;46455:34;46516:12;:::i;:::-;46500:28;;46555:16;46547:5;:24;46539:58;;;;-1:-1:-1;;;46539:58:0;;12503:2:1;46539:58:0;;;12485:21:1;12542:2;12522:18;;;12515:30;-1:-1:-1;;;12561:18:1;;;12554:51;12622:18;;46539:58:0;12301:345:1;46539:58:0;46624:6;46645:22;;;46641:125;;;46690:16;;-1:-1:-1;46729:25:0;46748:6;46690:16;46729:25;:::i;:::-;46721:33;;46641:125;46778:32;46830:5;46813:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;46813:23:0;;;;;;;;;;;;;;;;-1:-1:-1;46778:58:0;-1:-1:-1;46847:20:0;46899:5;46882:200;46910:3;46906:1;:7;46882:200;;;-1:-1:-1;;;;;46949:24:0;;46935:11;46949:24;;;:14;:24;;;;;:27;;46974:1;;46949:27;;;;;;:::i;:::-;;;;;;;;;46935:41;;47020:13;:18;47034:3;47020:18;;;;;;;;;;;46991:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;47004;46991:26;;;;;;;;:::i;:::-;;;;;;;;;;:47;47053:17;47069:1;47053:17;;:::i;:::-;;;46920:162;46915:3;;;;;:::i;:::-;;;;46882:200;;;-1:-1:-1;47099:12:0;;46143:976;-1:-1:-1;;;;;;;;;46143:976:0:o;30511:601::-;10706:6;;-1:-1:-1;;;;;10706:6:0;10716:10;10706:20;10698:65;;;;-1:-1:-1;;;10698:65:0;;;;;;;:::i;:::-;30563:16:::1;30582:43;30608:16;;30582:21;:25;;:43;;;;:::i;:::-;30563:62;;30638:21;30662:74;30701:24;30718:6;;30709:3;30701:16;;:24;;;;:::i;:::-;30675:6;::::0;30662:20:::1;::::0;:8;;:12:::1;:20::i;:::-;:24:::0;::::1;:74::i;:::-;30638:98;;30747:27;30777:80;30822:24;30839:6;;30830:3;30822:16;;:24;;;;:::i;:::-;30790:12;::::0;30777:26:::1;::::0;:8;;:12:::1;:26::i;:80::-;30747:110:::0;-1:-1:-1;30868:27:0::1;30898:76;30747:110:::0;30898:27:::1;:8:::0;30911:13;30898:12:::1;:27::i;:76::-;30868:106:::0;-1:-1:-1;31001:38:0::1;:13:::0;30868:106;31001:17:::1;:38::i;:::-;30985:54;;31052:52;31069:13;31084:19;31052:16;:52::i;:::-;30552:560;;;;30511:601::o:0;33687:414::-;33961:15;;:50;;-1:-1:-1;;;33961:50:0;;-1:-1:-1;;;;;2548:32:1;;;33961:50:0;;;2530:51:1;33787:29:0;;;;;;33961:15;;;;:40;;2503:18:1;;33961:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33915:96;;-1:-1:-1;33915:96:0;-1:-1:-1;33915:96:0;;34073:19;34083:8;34073:9;:19::i;:::-;34022:71;;;;;;33687:414;;;;;:::o;32294:81::-;32334:33;32349:10;32362:4;32334:6;:33::i;5850:380::-;-1:-1:-1;;;;;5986:19:0;;5978:68;;;;-1:-1:-1;;;5978:68:0;;13484:2:1;5978:68:0;;;13466:21:1;13523:2;13503:18;;;13496:30;13562:34;13542:18;;;13535:62;-1:-1:-1;;;13613:18:1;;;13606:34;13657:19;;5978:68:0;13282:400:1;5978:68:0;-1:-1:-1;;;;;6065:21:0;;6057:68;;;;-1:-1:-1;;;6057:68:0;;13889:2:1;6057:68:0;;;13871:21:1;13928:2;13908:18;;;13901:30;13967:34;13947:18;;;13940:62;-1:-1:-1;;;14018:18:1;;;14011:32;14060:19;;6057:68:0;13687:398:1;6057:68:0;-1:-1:-1;;;;;6138:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6190:32;;762:25:1;;;6190:32:0;;735:18:1;6190:32:0;;;;;;;5850:380;;;:::o;8524:98::-;8582:7;8609:5;8613:1;8609;:5;:::i;:::-;8602:12;8524:98;-1:-1:-1;;;8524:98:0:o;6238:502::-;-1:-1:-1;;;;;2737:18:0;;;6373:24;2737:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;6440:37:0;;6436:297;;6540:6;6520:16;:26;;6494:117;;;;-1:-1:-1;;;6494:117:0;;14292:2:1;6494:117:0;;;14274:21:1;14331:2;14311:18;;;14304:30;14370:31;14350:18;;;14343:59;14419:18;;6494:117:0;14090:353:1;6494:117:0;6655:51;6664:5;6671:7;6699:6;6680:16;:25;6655:8;:51::i;34217:2107::-;-1:-1:-1;;;;;34361:12:0;;;;;;:5;:12;;;;;;;;34360:13;:28;;;;-1:-1:-1;;;;;;34378:10:0;;;;;;:5;:10;;;;;;;;34377:11;34360:28;34352:37;;;;;;34471:21;;34521:11;;34427:7;;34471:21;-1:-1:-1;;;34521:11:0;;;;:113;;;;-1:-1:-1;;;;;;34550:32:0;;;;;;:25;:32;;;;;;;;;:83;;-1:-1:-1;;;;;;34603:30:0;;;;;;:25;:30;;;;;;;;34550:83;34521:154;;;;-1:-1:-1;;;;;;34652:23:0;;;;;;:16;:23;;;;;;;;34651:24;34521:154;:193;;;;-1:-1:-1;;;;;;34693:21:0;;;;;;:16;:21;;;;;;;;34692:22;34521:193;34503:842;;;34791:15;34767:20;;:39;;34741:145;;;;-1:-1:-1;;;34741:145:0;;14650:2:1;34741:145:0;;;14632:21:1;14689:2;14669:18;;;14662:30;14728:34;14708:18;;;14701:62;-1:-1:-1;;;14779:18:1;;;14772:42;14831:19;;34741:145:0;14448:408:1;34741:145:0;34947:15;34923:20;;:39;;:97;;;;;35005:15;34983:19;;:37;34923:97;34901:372;;;35079:2;35055:21;:26;;;35163:18;;35130:14;;:29;;-1:-1:-1;;;35130:29:0;;-1:-1:-1;;;;;2548:32:1;;;35130:29:0;;;2530:51:1;35130:14:0;;;;:24;;2503:18:1;;35130:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;35100:157;;;;-1:-1:-1;;;35100:157:0;;15063:2:1;35100:157:0;;;15045:21:1;;;15082:18;;;15075:30;15141:34;15121:18;;;15114:62;15193:18;;35100:157:0;14861:356:1;35100:157:0;35304:29;35313:5;35320:3;35325:7;35304:8;:29::i;:::-;35287:46;;34503:842;-1:-1:-1;;;;;35359:24:0;;;;;;:19;:24;;;;;;:29;;35355:104;;-1:-1:-1;;;;;35405:24:0;;;;;;:19;:24;;;;;35432:15;35405:42;;35355:104;-1:-1:-1;;;;;35474:30:0;;;;;;:25;:30;;;;;;;;35473:31;:64;;;;-1:-1:-1;;;;;;35509:28:0;;;;;;:23;:28;;;;;;;;35508:29;35473:64;35469:360;;;35554:22;35579:34;35598:14;35579;35589:3;35579:9;:14::i;:::-;:18;;:34::i;:::-;35554:59;;35693:51;35738:5;35693:40;35711:21;;35693:13;2116:12;;;2028:108;35693:13;:17;;:40::i;:51::-;35654:14;:90;;35628:189;;;;-1:-1:-1;;;35628:189:0;;15424:2:1;35628:189:0;;;15406:21:1;15463:2;15443:18;;;15436:30;15502:34;15482:18;;;15475:62;-1:-1:-1;;;15553:18:1;;;15546:35;15598:19;;35628:189:0;15222:401:1;35628:189:0;35539:290;35469:360;35841:43;35857:5;35864:3;35869:14;35841:15;:43::i;:::-;35895:21;:39;;;35950:15;;:45;;-1:-1:-1;;;35950:45:0;;-1:-1:-1;;;;;2548:32:1;;;35950:45:0;;;2530:51:1;35950:15:0;;;;:38;;2503:18:1;;35950:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35945:184;;36033:15;;-1:-1:-1;;;;;36033:15:0;:26;36068:5;36076:16;36068:5;36076:9;:16::i;:::-;36033:60;;-1:-1:-1;;;;;;36033:60:0;;;;;;;-1:-1:-1;;;;;9167:32:1;;;36033:60:0;;;9149:51:1;9216:18;;;9209:34;9122:18;;36033:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36012:106;;36144:15;;:43;;-1:-1:-1;;;36144:43:0;;-1:-1:-1;;;;;2548:32:1;;;36144:43:0;;;2530:51:1;36144:15:0;;;;:38;;2503:18:1;;36144:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36139:178;;36225:15;;-1:-1:-1;;;;;36225:15:0;:26;36260:3;36266:14;36260:3;36266:9;:14::i;:::-;36225:56;;-1:-1:-1;;;;;;36225:56:0;;;;;;;-1:-1:-1;;;;;9167:32:1;;;36225:56:0;;;9149:51:1;9216:18;;;9209:34;9122:18;;36225:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36204:102;34341:1983;;34217:2107;;;:::o;32383:1146::-;32489:15;;:72;;-1:-1:-1;;;32489:72:0;;-1:-1:-1;;;;;2548:32:1;;;32489:72:0;;;2530:51:1;32460:26:0;;32489:15;;:38;;2503:18:1;;32489:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32460:101;;32615:1;32594:18;:22;32572:117;;;;-1:-1:-1;;;32572:117:0;;16341:2:1;32572:117:0;;;16323:21:1;16380:2;16360:18;;;16353:30;16419:34;16399:18;;;16392:62;-1:-1:-1;;;16470:18:1;;;16463:43;16523:19;;32572:117:0;16139:409:1;32572:117:0;32700:17;32728:19;32765:9;32760:324;;32803:15;;:50;;-1:-1:-1;;;32803:50:0;;-1:-1:-1;;;;;11314:15:1;;;32803:50:0;;;11296:34:1;;;11346:18;;;11339:43;32803:15:0;;;;:30;;11231:18:1;;32803:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32791:62;;32760:324;;;32898:15;;:55;;-1:-1:-1;;;32898:55:0;;-1:-1:-1;;;;;11314:15:1;;;32898:55:0;;;11296:34:1;32947:4:0;11346:18:1;;;11339:43;32898:15:0;;;;:30;;11231:18:1;;32898:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32886:67;-1:-1:-1;32972:13:0;;32968:105;;33020:37;33037:9;33048:8;33020:16;:37::i;:::-;33006:51;;32968:105;33098:13;;33094:428;;33128:29;:17;9874:19;;9892:1;9874:19;;;9785:127;33128:29;33172:11;33186:27;:17;9755:14;;9663:114;33186:27;33228:18;;;;:13;:18;;;;;;;;:40;;;33283:30;;;;:44;;;33373:15;33342:28;;;;:46;;;;-1:-1:-1;;;;;33405:24:0;;;;;:14;:24;;;;;:34;;;;;;;;;;;;;;;;;33461:49;;17405:25:1;;;17446:18;;;17439:34;;;17489:18;;17482:60;;;;33228:18:0;;-1:-1:-1;33461:49:0;;17393:2:1;17378:18;33461:49:0;;;;;;;33113:409;32449:1080;;;32383:1146;;:::o;8418:98::-;8476:7;8503:5;8507:1;8503;:5;:::i;43068:721::-;43237:16;;;43251:1;43237:16;;;;;;;;43133:7;;43181:21;;43133:7;;43237:16;;;;;;;;;;;;-1:-1:-1;43237:16:0;43213:40;;43282:4;43264;43269:1;43264:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43264:23:0;;;:7;;;;;;;;;;:23;;;;43308:15;;:22;;;-1:-1:-1;;;43308:22:0;;;;:15;;;;;:20;;:22;;;;;43264:7;;43308:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43298:4;43303:1;43298:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43298:32:0;;;:7;;;;;;;;;:32;43373:15;;43341:63;;43358:4;;43373:15;43391:12;43341:8;:63::i;:::-;43415:15;;:197;;-1:-1:-1;;;43415:197:0;;-1:-1:-1;;;;;43415:15:0;;;;:66;;:197;;43496:12;;43415:15;;43539:4;;43566;;43586:15;;43415:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43625:19;43647:44;43673:17;43647:21;:25;;:44;;;;:::i;:::-;43709:43;;;18780:25:1;;;18836:2;18821:18;;18814:34;;;43625:66:0;;-1:-1:-1;43709:43:0;;18753:18:1;43709:43:0;;;;;;;43770:11;43068:721;-1:-1:-1;;;;43068:721:0:o;44472:419::-;44587:15;;44555:63;;44572:4;;-1:-1:-1;;;;;44587:15:0;44605:12;44555:8;:63::i;:::-;44629:15;;-1:-1:-1;;;;;44629:15:0;:31;44668:10;44702:4;44722:12;44629:15;;44781:7;10644:6;;-1:-1:-1;;;;;10644:6:0;;10579:79;44781:7;44629:200;;;;;;-1:-1:-1;;;;;;44629:200:0;;;-1:-1:-1;;;;;19218:15:1;;;44629:200:0;;;19200:34:1;19250:18;;;19243:34;;;;19293:18;;;19286:34;;;;19336:18;;;19329:34;19400:15;;;19379:19;;;19372:44;44803:15:0;19432:19:1;;;19425:35;19134:19;;44629:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;44845:38:0;;;18780:25:1;;;18836:2;18821:18;;18814:34;;;44845:38:0;;-1:-1:-1;18753:18:1;44845:38:0;;;;;;;;44472:419;;:::o;8312:98::-;8370:7;8397:5;8401:1;8397;:5;:::i;8630:98::-;8688:7;8715:5;8719:1;8715;:5;:::i;42690:370::-;42795:12;;42791:89;;42832:16;;42824:44;;42832:16;;;;-1:-1:-1;;;;;42832:16:0;;42824:44;;;;;;;;;;;;42832:16;42824:44;;;;;;;;;;;;;;;;;;;;;42791:89;42894:18;;42890:107;;42937:22;;42929:56;;-1:-1:-1;;;;;42937:22:0;;;;42929:56;;;;;42970:14;;42937:22;42929:56;42937:22;42929:56;42970:14;42937:22;42929:56;;;;;;;;;;;;;;;;;;;;;42890:107;43012:40;;;18780:25:1;;;18836:2;18821:18;;18814:34;;;43012:40:0;;18753:18:1;43012:40:0;18606:248:1;39888:1848:0;-1:-1:-1;;;;;40101:32:0;;40002:7;40101:32;;;:25;:32;;;;;;40002:7;;;;40101:32;;;:66;;-1:-1:-1;;;;;;40137:30:0;;;;;;:25;:30;;;;;;;;40101:66;40079:147;;;;-1:-1:-1;;;40079:147:0;;20109:2:1;40079:147:0;;;20091:21:1;20148:2;20128:18;;;20121:30;20187:33;20167:18;;;20160:61;20238:18;;40079:147:0;19907:355:1;40079:147:0;-1:-1:-1;;;;;40243:32:0;;;;;;:25;:32;;;;;;;;40239:1455;;;40299:32;40327:3;40299:23;40311:10;;40299:7;:11;;:23;;;;:::i;:32::-;40292:39;-1:-1:-1;40364:17:0;:7;40292:39;40364:11;:17::i;:::-;40346:35;;40398:43;40414:5;40429:4;40436;40398:15;:43::i;:::-;40463:35;;;-1:-1:-1;;;;;20525:15:1;;20507:34;;40486:4:0;20572:2:1;20557:18;;20550:43;20609:18;;;20602:34;;;40463:35:0;;20457:2:1;20442:18;40463:35:0;;;;;;;40239:1455;;;40531:20;40570:38;40593:5;40600:7;40570:22;:38::i;:::-;40566:174;;;-1:-1:-1;40644:11:0;;40566:174;;;40711:13;40718:5;40711:6;:13::i;:::-;40696:28;;40566:174;40763:34;40793:3;40763:25;:7;40775:12;40763:11;:25::i;:34::-;40756:41;;40812:20;40835:87;40918:3;40835:60;40865:29;40882:11;;40865:12;:16;;:29;;;;:::i;:::-;40835:7;;:29;:60::i;:87::-;40962:22;;40812:110;;-1:-1:-1;40962:40:0;;40812:110;40962:26;:40::i;:::-;40937:22;:65;41037:17;:7;41049:4;41037:11;:17::i;:::-;41019:35;;41071:43;41087:5;41102:4;41109;41071:15;:43::i;:::-;41129:20;41152:84;41199:22;;41152:24;41170:4;41152:9;:24::i;:84::-;41129:107;;41272:23;;41257:12;:38;41253:227;;;41321:7;;;;41316:95;;-1:-1:-1;41368:23:0;;41316:95;41431:33;41451:12;41431:19;:33::i;:::-;41523:21;;41498:22;;:46;41494:131;;;41565:44;41586:22;;41565:20;:44::i;:::-;41646:36;;;-1:-1:-1;;;;;20525:15:1;;20507:34;;41670:4:0;20572:2:1;20557:18;;20550:43;20609:18;;;20602:34;;;41646:36:0;;20457:2:1;20442:18;41646:36:0;;;;;;;40516:1178;;;40239:1455;41713:15;39888:1848;-1:-1:-1;;;;;39888:1848:0:o;4128:708::-;-1:-1:-1;;;;;4259:18:0;;4251:68;;;;-1:-1:-1;;;4251:68:0;;20849:2:1;4251:68:0;;;20831:21:1;20888:2;20868:18;;;20861:30;20927:34;20907:18;;;20900:62;-1:-1:-1;;;20978:18:1;;;20971:35;21023:19;;4251:68:0;20647:401:1;4251:68:0;-1:-1:-1;;;;;4338:16:0;;4330:64;;;;-1:-1:-1;;;4330:64:0;;21255:2:1;4330:64:0;;;21237:21:1;21294:2;21274:18;;;21267:30;21333:34;21313:18;;;21306:62;-1:-1:-1;;;21384:18:1;;;21377:33;21427:19;;4330:64:0;21053:399:1;4330:64:0;-1:-1:-1;;;;;4480:15:0;;4458:19;4480:15;;;;;;;;;;;4528:21;;;;4506:109;;;;-1:-1:-1;;;4506:109:0;;21659:2:1;4506:109:0;;;21641:21:1;21698:2;21678:18;;;21671:30;21737:34;21717:18;;;21710:62;-1:-1:-1;;;21788:18:1;;;21781:36;21834:19;;4506:109:0;21457:402:1;4506:109:0;-1:-1:-1;;;;;4651:15:0;;;:9;:15;;;;;;;;;;;4669:20;;;4651:38;;4711:13;;;;;;;;:23;;4683:6;;4651:9;4711:23;;4683:6;;4711:23;:::i;:::-;;;;;;;;4767:2;-1:-1:-1;;;;;4752:26:0;4761:4;-1:-1:-1;;;;;4752:26:0;;4771:6;4752:26;;;;762:25:1;;750:2;735:18;;616:177;4752:26:0;;;;;;;;4791:37;39334:324;43797:667;43891:7;43916:27;43946:24;43964:4;43946:9;:24::i;:::-;44005:16;;;44019:1;44005:16;;;;;;;;43916:54;;-1:-1:-1;43981:21:0;;44005:16;;;;;;;;;;-1:-1:-1;;44042:15:0;;:22;;;-1:-1:-1;;;44042:22:0;;;;43981:40;;-1:-1:-1;;;;;;44042:15:0;;;;:20;;-1:-1:-1;44042:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44032:4;44037:1;44032:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44032:32:0;;;-1:-1:-1;;;;;44032:32:0;;;;;44093:4;44075;44080:1;44075:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44075:23:0;;;:7;;;;;;;;;:23;44111:15;;:140;;-1:-1:-1;;;44111:140:0;;:15;;;:66;;44199:10;;44111:140;;:15;;44224:4;;44230:3;;44235:15;;44111:140;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44264:22;44289:73;44332:19;44289:24;44307:4;44289:9;:24::i;:73::-;44380:44;;;18780:25:1;;;18836:2;18821:18;;18814:34;;;44264:98:0;;-1:-1:-1;44380:44:0;;18753:18:1;44380:44:0;;;;;;;44442:14;43797:667;-1:-1:-1;;;;;43797:667:0:o;45457:521::-;45627:22;;-1:-1:-1;;;;;45599:25:0;;45559:4;45599:25;;;:20;:25;;;;;;45559:4;;45666:15;;45599:50;;45627:22;45599:50;:::i;:::-;:82;45581:365;;-1:-1:-1;;;;;45708:25:0;;;;;;:20;:25;;;;;45736:15;45708:43;;45840:23;;45821:52;;45869:3;;45821:43;;:14;45729:3;45821:9;:14::i;:52::-;45788:12;:85;45766:169;;-1:-1:-1;45915:4:0;45908:11;;45766:169;-1:-1:-1;45965:5:0;45457:521;;;;:::o;41744:938::-;41814:26;41843:33;41872:3;41843:24;41860:6;;41843:12;:16;;:24;;;;:::i;:33::-;41814:62;-1:-1:-1;41889:21:0;41913:25;41814:62;41936:1;41913:22;:25::i;:::-;41889:49;-1:-1:-1;41949:21:0;41973:31;:12;41889:49;41973:16;:31::i;:::-;41949:55;;42017:16;42036:31;42053:13;42036:16;:31::i;:::-;42017:50;;42080:19;42102:29;42127:3;42102:20;42115:6;;42102:8;:12;;:20;;;;:::i;:29::-;42080:51;;42142:21;42166:29;42191:3;42166:20;42179:6;;42166:8;:12;;:20;;;;:::i;:29::-;42142:53;;42206:27;42236:35;42267:3;42236:26;42249:12;;42236:8;:12;;:26;;;;:::i;:35::-;42206:65;-1:-1:-1;42282:27:0;42312:111;42206:65;42312:72;42370:13;42312:72;:8;42339:11;42312:26;:39::i;:111::-;42282:141;-1:-1:-1;42450:38:0;:13;42282:141;42450:17;:38::i;:::-;42434:54;;42501:52;42518:13;42533:19;42501:16;:52::i;:::-;42586:1;42570:13;:17;:36;;;;;42605:1;42591:11;:15;42570:36;42566:109;;;42623:40;42636:13;42651:11;42623:12;:40::i;:::-;41803:879;;;;;;;;41744:938;:::o;44899:550::-;44970:17;44990:30;45007:12;44990:16;:30::i;:::-;45058:22;;44970:50;;-1:-1:-1;45058:40:0;;45085:12;45058:26;:40::i;:::-;45033:22;:65;45148:16;;45109:22;;45134:31;;:9;;:13;:31::i;:::-;45205:15;;45197:80;;45109:56;;-1:-1:-1;45179:12:0;;-1:-1:-1;;;;;45205:15:0;;;;45109:56;;45179:12;45197:80;45179:12;45197:80;45109:56;45205:15;45197:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45178:99;;;45294:7;45290:152;;;45323:24;;762:25:1;;;45323:24:0;;750:2:1;735:18;45323:24:0;;;;;;;45290:152;;;45399:16;;:31;;45420:9;45399:20;:31::i;:::-;45380:16;:50;44959:490;;;44899:550;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:315::-;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:180::-;1505:6;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;-1:-1:-1;1597:23:1;;1446:180;-1:-1:-1;1446:180:1:o;1631:248::-;1699:6;1707;1760:2;1748:9;1739:7;1735:23;1731:32;1728:52;;;1776:1;1773;1766:12;1728:52;-1:-1:-1;;1799:23:1;;;1869:2;1854:18;;;1841:32;;-1:-1:-1;1631:248:1:o;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2781:247::-;2840:6;2893:2;2881:9;2872:7;2868:23;2864:32;2861:52;;;2909:1;2906;2899:12;2861:52;2948:9;2935:23;2967:31;2992:5;2967:31;:::i;3033:454::-;3128:6;3136;3144;3152;3160;3213:3;3201:9;3192:7;3188:23;3184:33;3181:53;;;3230:1;3227;3220:12;3181:53;-1:-1:-1;;3253:23:1;;;3323:2;3308:18;;3295:32;;-1:-1:-1;3374:2:1;3359:18;;3346:32;;3425:2;3410:18;;3397:32;;-1:-1:-1;3476:3:1;3461:19;3448:33;;-1:-1:-1;3033:454:1;-1:-1:-1;3033:454:1:o;3492:388::-;3560:6;3568;3621:2;3609:9;3600:7;3596:23;3592:32;3589:52;;;3637:1;3634;3627:12;3589:52;3676:9;3663:23;3695:31;3720:5;3695:31;:::i;:::-;3745:5;-1:-1:-1;3802:2:1;3787:18;;3774:32;3815:33;3774:32;3815:33;:::i;:::-;3867:7;3857:17;;;3492:388;;;;;:::o;3885:118::-;3971:5;3964:13;3957:21;3950:5;3947:32;3937:60;;3993:1;3990;3983:12;4008:382;4073:6;4081;4134:2;4122:9;4113:7;4109:23;4105:32;4102:52;;;4150:1;4147;4140:12;4102:52;4189:9;4176:23;4208:31;4233:5;4208:31;:::i;:::-;4258:5;-1:-1:-1;4315:2:1;4300:18;;4287:32;4328:30;4287:32;4328:30;:::i;4603:156::-;4669:20;;4729:4;4718:16;;4708:27;;4698:55;;4749:1;4746;4739:12;4698:55;4603:156;;;:::o;4764:182::-;4821:6;4874:2;4862:9;4853:7;4849:23;4845:32;4842:52;;;4890:1;4887;4880:12;4842:52;4913:27;4930:9;4913:27;:::i;5275:387::-;5359:6;5367;5375;5383;5436:3;5424:9;5415:7;5411:23;5407:33;5404:53;;;5453:1;5450;5443:12;5404:53;5476:27;5493:9;5476:27;:::i;:::-;5466:37;5550:2;5535:18;;5522:32;;-1:-1:-1;5601:2:1;5586:18;;5573:32;;5652:2;5637:18;5624:32;;-1:-1:-1;5275:387:1;-1:-1:-1;;;5275:387:1:o;5667:615::-;5753:6;5761;5814:2;5802:9;5793:7;5789:23;5785:32;5782:52;;;5830:1;5827;5820:12;5782:52;5870:9;5857:23;5899:18;5940:2;5932:6;5929:14;5926:34;;;5956:1;5953;5946:12;5926:34;5994:6;5983:9;5979:22;5969:32;;6039:7;6032:4;6028:2;6024:13;6020:27;6010:55;;6061:1;6058;6051:12;6010:55;6101:2;6088:16;6127:2;6119:6;6116:14;6113:34;;;6143:1;6140;6133:12;6113:34;6196:7;6191:2;6181:6;6178:1;6174:14;6170:2;6166:23;6162:32;6159:45;6156:65;;;6217:1;6214;6207:12;6156:65;6248:2;6240:11;;;;;6270:6;;-1:-1:-1;5667:615:1;;-1:-1:-1;;;;5667:615:1:o;6287:241::-;6343:6;6396:2;6384:9;6375:7;6371:23;6367:32;6364:52;;;6412:1;6409;6402:12;6364:52;6451:9;6438:23;6470:28;6492:5;6470:28;:::i;6533:383::-;6610:6;6618;6626;6679:2;6667:9;6658:7;6654:23;6650:32;6647:52;;;6695:1;6692;6685:12;6647:52;6734:9;6721:23;6753:31;6778:5;6753:31;:::i;:::-;6803:5;6855:2;6840:18;;6827:32;;-1:-1:-1;6906:2:1;6891:18;;;6878:32;;6533:383;-1:-1:-1;;;6533:383:1:o;6921:849::-;7148:2;7200:21;;;7270:13;;7173:18;;;7292:22;;;7119:4;;7148:2;7333;;7351:18;;;;7392:15;;;7119:4;7435:309;7449:6;7446:1;7443:13;7435:309;;;7508:13;;7546:9;;7534:22;;7596:11;;;7590:18;7576:12;;;7569:40;7649:11;;7643:18;7629:12;;;7622:40;7691:4;7682:14;;;;7719:15;;;;7471:1;7464:9;7435:309;;;-1:-1:-1;7761:3:1;;6921:849;-1:-1:-1;;;;;;;6921:849:1:o;7775:380::-;7854:1;7850:12;;;;7897;;;7918:61;;7972:4;7964:6;7960:17;7950:27;;7918:61;8025:2;8017:6;8014:14;7994:18;7991:38;7988:161;;8071:10;8066:3;8062:20;8059:1;8052:31;8106:4;8103:1;8096:15;8134:4;8131:1;8124:15;7988:161;;7775:380;;;:::o;8160:356::-;8362:2;8344:21;;;8381:18;;;8374:30;8440:34;8435:2;8420:18;;8413:62;8507:2;8492:18;;8160:356::o;8521:184::-;8591:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:52;;;8660:1;8657;8650:12;8612:52;-1:-1:-1;8683:16:1;;8521:184;-1:-1:-1;8521:184:1:o;8710:127::-;8771:10;8766:3;8762:20;8759:1;8752:31;8802:4;8799:1;8792:15;8826:4;8823:1;8816:15;8842:128;8882:3;8913:1;8909:6;8906:1;8903:13;8900:39;;;8919:18;;:::i;:::-;-1:-1:-1;8955:9:1;;8842:128::o;9660:127::-;9721:10;9716:3;9712:20;9709:1;9702:31;9752:4;9749:1;9742:15;9776:4;9773:1;9766:15;9792:135;9831:3;9852:17;;;9849:43;;9872:18;;:::i;:::-;-1:-1:-1;9919:1:1;9908:13;;9792:135::o;9932:175::-;9969:3;10013:4;10006:5;10002:16;10042:4;10033:7;10030:17;10027:43;;10050:18;;:::i;:::-;10099:1;10086:15;;9932:175;-1:-1:-1;;9932:175:1:o;10828:251::-;10898:6;10951:2;10939:9;10930:7;10926:23;10922:32;10919:52;;;10967:1;10964;10957:12;10919:52;10999:9;10993:16;11018:31;11043:5;11018:31;:::i;11393:245::-;11460:6;11513:2;11501:9;11492:7;11488:23;11484:32;11481:52;;;11529:1;11526;11519:12;11481:52;11561:9;11555:16;11580:28;11602:5;11580:28;:::i;11998:168::-;12038:7;12104:1;12100;12096:6;12092:14;12089:1;12086:21;12081:1;12074:9;12067:17;12063:45;12060:71;;;12111:18;;:::i;:::-;-1:-1:-1;12151:9:1;;11998:168::o;12171:125::-;12211:4;12239:1;12236;12233:8;12230:34;;;12244:18;;:::i;:::-;-1:-1:-1;12281:9:1;;12171:125::o;12651:127::-;12712:10;12707:3;12703:20;12700:1;12693:31;12743:4;12740:1;12733:15;12767:4;12764:1;12757:15;12783:112;12815:1;12841;12831:35;;12846:18;;:::i;:::-;-1:-1:-1;12880:9:1;;12783:112::o;12900:127::-;12961:10;12956:3;12952:20;12949:1;12942:31;12992:4;12989:1;12982:15;13016:4;13013:1;13006:15;13032:245;13111:6;13119;13172:2;13160:9;13151:7;13147:23;13143:32;13140:52;;;13188:1;13185;13178:12;13140:52;-1:-1:-1;;13211:16:1;;13267:2;13252:18;;;13246:25;13211:16;;13246:25;;-1:-1:-1;13032:245:1:o;17553:461::-;17606:3;17644:5;17638:12;17671:6;17666:3;17659:19;17697:4;17726:2;17721:3;17717:12;17710:19;;17763:2;17756:5;17752:14;17784:1;17794:195;17808:6;17805:1;17802:13;17794:195;;;17873:13;;-1:-1:-1;;;;;17869:39:1;17857:52;;17929:12;;;;17964:15;;;;17905:1;17823:9;17794:195;;;-1:-1:-1;18005:3:1;;17553:461;-1:-1:-1;;;;;17553:461:1:o;18019:582::-;18318:6;18307:9;18300:25;18361:6;18356:2;18345:9;18341:18;18334:34;18404:3;18399:2;18388:9;18384:18;18377:31;18281:4;18425:57;18477:3;18466:9;18462:19;18454:6;18425:57;:::i;:::-;-1:-1:-1;;;;;18518:32:1;;;;18513:2;18498:18;;18491:60;-1:-1:-1;18582:3:1;18567:19;18560:35;18417:65;18019:582;-1:-1:-1;;;18019:582:1:o;19471:306::-;19559:6;19567;19575;19628:2;19616:9;19607:7;19603:23;19599:32;19596:52;;;19644:1;19641;19634:12;19596:52;19673:9;19667:16;19657:26;;19723:2;19712:9;19708:18;19702:25;19692:35;;19767:2;19756:9;19752:18;19746:25;19736:35;;19471:306;;;;;:::o;19782:120::-;19822:1;19848;19838:35;;19853:18;;:::i;:::-;-1:-1:-1;19887:9:1;;19782:120::o;21864:510::-;22135:6;22124:9;22117:25;22178:3;22173:2;22162:9;22158:18;22151:31;22098:4;22199:57;22251:3;22240:9;22236:19;22228:6;22199:57;:::i;:::-;-1:-1:-1;;;;;22292:32:1;;;;22287:2;22272:18;;22265:60;-1:-1:-1;22356:2:1;22341:18;22334:34;22191:65;21864:510;-1:-1:-1;;21864:510:1:o

Swarm Source

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