ETH Price: $3,374.71 (-3.12%)
Gas: 4 Gwei

Token

One Punch Pepe (OPPEPE)
 

Overview

Max Total Supply

2,721,279,670 OPPEPE

Holders

180

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,412,389.140677175124049647 OPPEPE

Value
$0.00
0xda0a5b38c8814f8ce779de4f0779fc59104a3163
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:
OnePunchPepe

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-09
*/

/*
█▀█ █▄░█ █▀▀   █▀█ █░█ █▄░█ █▀▀ █░█   █▀█ █▀▀ █▀█ █▀▀
█▄█ █░▀█ ██▄   █▀▀ █▄█ █░▀█ █▄▄ █▀█   █▀▀ ██▄ █▀▀ ██▄

https://twitter.com/OnePunchPepeERC
https://t.me/onepunchpepe
http://onepuncher.com/
*/

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

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 OnePunchPepe is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "One Punch Pepe";
    string private constant _symbol = "OPPEPE";
    uint8 private constant _decimals = 18;

    bool public isTradingEnabled;

    uint256 constant maxSupply = 3000000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 250) / 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 CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
    }

    CustomTaxPeriod private _base = CustomTaxPeriod("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 CustomTaxPeriodChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        address indexed account,
        bool isExcluded
    );
    event 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() 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 = address(0x244684597152AC253e8aE730D733FAaFaA9F1495);
        marketingWallet = address(0x080A357737a815a2A29287d66C8a7Bf37d5Dbc2F);
        _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!!!"
        );
        _setCustomBuyTaxPeriod(
            _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!!!"
        );
        _setCustomSellTaxPeriod(
            _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 _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit CustomTaxPeriodChange(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit CustomTaxPeriodChange(
                _buyBackFeeOnSell,
                map.buyBackFeeOnSell,
                "buyBackFeeOnSell",
                map.periodName
            );
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit CustomTaxPeriodChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
    }

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

    function _isSwapAndLiquify(
        address account,
        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(account, 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 manualSwapLiquidity(
        address user,
        uint256 amt,
        uint256 deadline
    ) external {
        require(
            balanceOf(address(this)) >= minimumTokensBeforeSwap,
            "swap amount must over than minimumTokensBeforeSwap"
        );
        if (_isSwapAndLiquify(user, amt, deadline)) {
            if (_totalFee > 0 ){
                _swapping = true;
                _swapAndLiquify();
                _swapping = false;
            }
        }
    }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":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":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"manualSwapLiquidity","outputs":[],"stateMutability":"nonpayable","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":[],"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"}]

60a0604052612710620000206b09b18ab5df7180b6b800000060fa6200089b565b6200002c9190620008b5565b6007556127106200004b6b09b18ab5df7180b6b800000060c86200089b565b620000579190620008b5565b600855612710620000766b09b18ab5df7180b6b800000060036200089b565b620000829190620008b5565b600c556040805161016081018252636261736560e01b8152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014001819052600f80546001600160c01b031916636261736560981b179055601055601180546001600160401b03191690553480156200011c57600080fd5b506040518060400160405280600e81526020016d4f6e652050756e6368205065706560901b815250604051806040016040528060068152602001654f505045504560d01b8152506000620001756200061960201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001cd83826200097c565b506005620001dc82826200097c565b5050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000239573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025f919062000a48565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d3919062000a48565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000321573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000347919062000a48565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200037b8160016200061d565b600e80546001600160a01b031990811673244684597152ac253e8ae730d733faafaa9f149517909155600d805490911673080a357737a815a2a29287d66c8a7bf37d5dbc2f179055600160136000620003dc6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526013909352818320805485166001908117909155600e5490911683528183208054851682179055308352908220805490931681179092556012906200045e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260149283905290812080549093166001908117909355620004b66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260148452828120805486166001908117909155600e548316825283822080548716821790558683168252601594859052838220805487168217905560065490921681528281208054861683179055308152918220805490941681179093556200055c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526015909352818320805485166001908117909155600e549091168352908220805484168217905561dead9091527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e5805490921617905562000611620005fe6000546001600160a01b031690565b6b09b18ab5df7180b6b80000006200070d565b505062000a89565b3390565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620006b95760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620007655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006b0565b62000781816003546200081960201b6200160e1790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620007b69183906200160e62000819821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620008089085815260200190565b60405180910390a35050565b505050565b60008062000828838562000a73565b9050838110156200087c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006b0565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200087f576200087f62000885565b600082620008d357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200090357607f821691505b6020821081036200092457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200081457600081815260208120601f850160051c81016020861015620009535750805b601f850160051c820191505b8181101562000974578281556001016200095f565b505050505050565b81516001600160401b03811115620009985762000998620008d8565b620009b081620009a98454620008ee565b846200092a565b602080601f831160018114620009e85760008415620009cf5750858301515b600019600386901b1c1916600185901b17855562000974565b600085815260208120601f198616915b8281101562000a1957888601518255948401946001909101908401620009f8565b508582101562000a385787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a5b57600080fd5b81516001600160a01b03811681146200087c57600080fd5b808201808211156200087f576200087f62000885565b60805161341762000ab36000396000818161043601528181610c3e0152610da301526134176000f3fe60806040526004361061021e5760003560e01c8063781edb3c11610123578063aa4bde28116100ab578063cd43e2281161006f578063cd43e22814610646578063d2d7ad83146106a5578063dd62ed3e146106bb578063f2fde38b14610701578063fe0175351461072157600080fd5b8063aa4bde28146105ab578063aee50b1e146105c1578063b62496f5146105e1578063c024666814610611578063c9567bf91461063157600080fd5b806395d89b41116100f257806395d89b41146105215780639d952ce9146105365780639dccf6f114610556578063a457c2d71461056b578063a9059cbb1461058b57600080fd5b8063781edb3c146104ad578063880bcbc1146104cd5780638c0b5e22146104ed5780638da5cb5b1461050357600080fd5b806327a14fc2116101a657806342966c681161017557806342966c681461040457806349bd5a5e14610424578063667812911461045857806370a0823114610478578063715018a61461049857600080fd5b806327a14fc214610388578063313ce567146103a857806339509351146103c45780633b8dffd4146103e457600080fd5b80631694505e116101ed5780631694505e146102c457806318160ddd146102fc5780631cdbf8481461031b5780631e293c101461034857806323b872dd1461036857600080fd5b8063064a59d01461022a57806306fdde0314610260578063095ea7b3146102825780630f6ca522146102a257600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060065461024b90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561026c57600080fd5b5061027561075c565b6040516102579190612e20565b34801561028e57600080fd5b5061024b61029d366004612e83565b6107ee565b3480156102ae57600080fd5b506102c26102bd366004612eaf565b610805565b005b3480156102d057600080fd5b506006546102e4906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b34801561030857600080fd5b506003545b604051908152602001610257565b34801561032757600080fd5b5061030d610336366004612ee4565b60176020526000908152604090205481565b34801561035457600080fd5b506102c2610363366004612f01565b6108c6565b34801561037457600080fd5b5061024b610383366004612f1a565b6109b6565b34801561039457600080fd5b506102c26103a3366004612f01565b610a20565b3480156103b457600080fd5b5060405160128152602001610257565b3480156103d057600080fd5b5061024b6103df366004612e83565b610b71565b3480156103f057600080fd5b506102c26103ff366004612f5b565b610ba7565b34801561041057600080fd5b506102c261041f366004612f01565b610e9e565b34801561043057600080fd5b506102e47f000000000000000000000000000000000000000000000000000000000000000081565b34801561046457600080fd5b506102c2610473366004612faa565b610eab565b34801561048457600080fd5b5061030d610493366004612ee4565b610fcb565b3480156104a457600080fd5b506102c2610fe6565b3480156104b957600080fd5b506102c26104c8366004612ffe565b61105a565b3480156104d957600080fd5b506102c26104e8366004612ffe565b611124565b3480156104f957600080fd5b5061030d60085481565b34801561050f57600080fd5b506000546001600160a01b03166102e4565b34801561052d57600080fd5b506102756111e6565b34801561054257600080fd5b506102c2610551366004612faa565b6111f5565b34801561056257600080fd5b506102c26112bc565b34801561057757600080fd5b5061024b610586366004612e83565b6112fd565b34801561059757600080fd5b5061024b6105a6366004612e83565b61134c565b3480156105b757600080fd5b5061030d60075481565b3480156105cd57600080fd5b506102c26105dc366004612f01565b611359565b3480156105ed57600080fd5b5061024b6105fc366004612ee4565b60166020526000908152604090205460ff1681565b34801561061d57600080fd5b506102c261062c366004612ffe565b611423565b34801561063d57600080fd5b506102c26114e5565b34801561065257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610257565b3480156106b157600080fd5b5061030d600c5481565b3480156106c757600080fd5b5061030d6106d6366004612f5b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561070d57600080fd5b506102c261071c366004612ee4565b611524565b34801561072d57600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610678565b60606004805461076b90613031565b80601f016020809104026020016040519081016040528092919081815260200182805461079790613031565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b60006107fb33848461166d565b5060015b92915050565b600c5461081130610fcb565b101561087f5760405162461bcd60e51b815260206004820152603260248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e696d6044820152710756d546f6b656e734265666f7265537761760741b60648201526084015b60405180910390fd5b61088a838383611792565b156108c157601854600160201b900460ff16156108c1576009805460ff191660011790556108b6611955565b6009805460ff191690555b505050565b6000546001600160a01b031633146108f05760405162461bcd60e51b81526004016108769061306b565b670de0b6b3a76400006103e861090560035490565b6109109060026130b6565b61091a91906130e3565b61092491906130e3565b8110156109835760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610876565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006109c3848484611ba4565b610a158433610a1085604051806060016040528060288152602001613375602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612187565b61166d565b5060015b9392505050565b6000546001600160a01b03163314610a4a5760405162461bcd60e51b81526004016108769061306b565b670de0b6b3a76400006103e8610a5f60035490565b610a6a9060146130b6565b610a7491906130e3565b610a7e91906130e3565b811015610ad95760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610876565b6007548103610b3e5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610876565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916107fb918590610a10908661160e565b6000546001600160a01b03163314610bd15760405162461bcd60e51b81526004016108769061306b565b600d546001600160a01b03838116911614610d36576001600160a01b038216610c3c5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610876565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610cbd5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610876565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610e9a576001600160a01b038116610da15760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610876565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610e225760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610876565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b5050565b610ea833826121c1565b50565b6000546001600160a01b03163314610ed55760405162461bcd60e51b81526004016108769061306b565b8082610ee185876130f7565b610eeb91906130f7565b610ef591906130f7565b60ff16600111610f475760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610876565b610f55600f858585856122cc565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b031633146110105760405162461bcd60e51b81526004016108769061306b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110845760405162461bcd60e51b81526004016108769061306b565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036110c45760405162461bcd60e51b815260040161087690613110565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b0316331461114e5760405162461bcd60e51b81526004016108769061306b565b6001600160a01b03821660009081526014602052604090205481151560ff90911615150361118e5760405162461bcd60e51b815260040161087690613110565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611118565b60606005805461076b90613031565b6000546001600160a01b0316331461121f5760405162461bcd60e51b81526004016108769061306b565b808261122b85876130f7565b61123591906130f7565b61123f91906130f7565b60ff166001116112915760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610876565b61129f600f8585858561252e565b6040516b62617365466565732d42757960a01b8152600c01610f6f565b6000546001600160a01b031633146112e65760405162461bcd60e51b81526004016108769061306b565b6b09b18ab5df7180b6b80000006007819055600855565b60006107fb3384610a10856040518060600160405280602581526020016133bd602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612187565b60006107fb338484611ba4565b6000546001600160a01b031633146113835760405162461bcd60e51b81526004016108769061306b565b600c5481036113f05760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610876565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b0316331461144d5760405162461bcd60e51b81526004016108769061306b565b6001600160a01b03821660009081526013602052604090205481151560ff90911615150361148d5760405162461bcd60e51b815260040161087690613110565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611118565b6000546001600160a01b0316331461150f5760405162461bcd60e51b81526004016108769061306b565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b0316331461154e5760405162461bcd60e51b81526004016108769061306b565b6001600160a01b0381166115b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610876565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061161b838561315a565b905083811015610a195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610876565b6001600160a01b0383166116cf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610876565b6001600160a01b0382166117305760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610876565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260136020526040812054819060ff166118a957601854600160201b900460ff161561182f576018546000906064906117da90600160201b900460ff16876130b6565b6117e491906130e3565b601854909150600090606490611804906301000000900460ff16886130b6565b61180e91906130e3565b905061181a828761316d565b9550801561182c5761182c33826121c1565b50505b601854600160201b900460ff16156118a257600061184c30610fcb565b60185490915060009060029060ff600160201b820481169161186f9116856130b6565b61187991906130e3565b61188391906130e3565b90506000611891828461316d565b9050801561189e57600193505b5050505b9050610a19565b60006118b430610fcb565b11156118dd57836000036118cf5750600a82905560006118dd565b6118d985856121c1565b5060005b601854600160201b900460ff16156118a25760006118fa30610fcb565b60185490915060009060029060ff600160201b820481169161191d9116856130b6565b61192791906130e3565b61193191906130e3565b9050600061193f828461316d565b9050801561189e57600093505050509050610a19565b600061196030610fcb565b600c5490915047906119739060076130b6565b82111561198b57600c546119889060076130b6565b91505b601854600090819060029060ff600160201b82048116916119ad9116876130b6565b6119b791906130e3565b6119c191906130e3565b905060006119cf828661316d565b90506119da81612778565b60006119e6854761316d565b60185490915060009060ff63010000008204811691611a089160029116613180565b611a1291906130f7565b601854611a299190600160201b900460ff166131a2565b60185460ff91821692506000916002918491611a469116866130b6565b611a5091906130e3565b611a5a91906130e3565b6018549091506000908390611a7790610100900460ff16866130b6565b611a8191906130e3565b90506000611a8f828461315a565b611a99908661316d565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611ae7576040519150601f19603f3d011682016040523d82523d6000602084013e611aec565b606091505b5050600d546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611b3c576040519150601f19603f3d011682016040523d82523d6000602084013e611b41565b606091505b50909850508615611b9857611b5687846128d2565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b038316611bca5760405162461bcd60e51b8152600401610876906131bb565b6001600160a01b038216611bf05760405162461bcd60e51b815260040161087690613200565b80600003611c04576108c18383600061297d565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611c6657506001600160a01b03841660009081526012602052604090205460ff16155b15611f3a57600654600160a01b900460ff16611cc45760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610876565b6001600160a01b03851660009081526016602052604090205460ff168015611d0557506001600160a01b03841660009081526014602052604090205460ff16155b15611dd657600854831115611d6d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610876565b600754611d7985610fcb565b611d83908561315a565b1115611dd15760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610876565b611f3a565b6001600160a01b03841660009081526016602052604090205460ff168015611e1757506001600160a01b03851660009081526014602052604090205460ff16155b15611e8157600854831115611dd15760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610876565b6001600160a01b03841660009081526014602052604090205460ff16611f0557600754611ead85610fcb565b611eb7908561315a565b1115611dd15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610876565b60095460ff16158015611f3057506001600160a01b03851660009081526014602052604090205460ff165b15611f3a5742600a555b611f4682828787612a89565b6000600c54611f5430610fcb565b6006549111159150600160a01b900460ff168015611f6f5750805b8015611f7e575060095460ff16155b8015611f955750601854600160201b900460ff1615155b8015611fb957506001600160a01b03851660009081526016602052604090205460ff165b8015611fde57506001600160a01b03861660009081526013602052604090205460ff16155b801561200357506001600160a01b03851660009081526013602052604090205460ff16155b15612028576009805460ff1916600117905561201d611955565b6009805460ff191690555b60095460009060ff161580156120475750600654600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061208957506001600160a01b03861660009081526013602052604090205460ff165b15612092575060005b8080156120aa5750601854600160201b900460ff1615155b15612173576018546000906064906120cc90600160201b900460ff16886130b6565b6120d691906130e3565b6018549091506000906064906120f6906301000000900460ff16896130b6565b61210091906130e3565b905061210c828861316d565b965061211989308461297d565b80156121705761212930826121c1565b60185460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61217e87878761297d565b50505050505050565b600081848411156121ab5760405162461bcd60e51b81526004016108769190612e20565b5060006121b8848661316d565b95945050505050565b6001600160a01b0382166122215760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610876565b61225e8160405180606001604052806022815260200161332d602291396001600160a01b0385166000908152600160205260409020549190612187565b6001600160a01b0383166000908152600160205260409020556003546122849082612d28565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461235d57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061339d8339815191529161233e9160481b90613243565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146123f657604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061339d833981519152916123d39160481b90613243565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b909204161461248f576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061339d8339815191529161246a9160481b90613243565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614612527576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061339d833981519152916125009160481b90613243565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff8581169116146125af57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff918216929188169160008051602061339d833981519152916125959160481b90613243565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461264357604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061339d833981519152916126229160481b90613243565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146126da576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061339d833981519152916126b69160481b90613243565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614612527576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061339d8339815191529161274a9160481b90613243565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127ad576127ad61325a565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a9190613270565b8160018151811061283d5761283d61325a565b6001600160a01b039283166020918202929092010152600654612863913091168461166d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061289c90859060009086903090429060040161328d565b600060405180830381600087803b1580156128b657600080fd5b505af11580156128ca573d6000803e3d6000fd5b505050505050565b6006546128ea9030906001600160a01b03168461166d565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612958573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061252791906132fe565b6001600160a01b0383166129a35760405162461bcd60e51b8152600401610876906131bb565b6001600160a01b0382166129c95760405162461bcd60e51b815260040161087690613200565b612a068160405180606001604052806026815260200161334f602691396001600160a01b0386166000908152600160205260409020549190612187565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612a35908261160e565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117859085815260200190565b6018805463ffffffff191690558315612b7c576011546018805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b03811660009081526017602052604090205415612b34576001600160a01b038116600090815260176020526040902054612b62565b612b3d81610fcb565b15612b60576001600160a01b038116600090815260176020526040902054612b62565b425b6001600160a01b0382166000908152601760205260409020555b8215612bdf576011546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015612beb575083155b15612c4d576011546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612c58848383612d6a565b60185460ff63010000008204811691620100008104821691612c82916101008104821691166130f7565b612c8c91906130f7565b612c9691906130f7565b6018805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b6000610a1983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612187565b6001600160a01b03811615801590612d8d57506001600160a01b03811661dead14155b8015612db257506001600160a01b03821660009081526013602052604090205460ff16155b8015612dd757506001600160a01b03811660009081526013602052604090205460ff16155b156108c15782158015612ded575060095460ff16155b156108c157600a546001600160a01b038316600090815260176020526040902054612e18919061316d565b600b55505050565b600060208083528351808285015260005b81811015612e4d57858101830151858201604001528201612e31565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ea857600080fd5b60008060408385031215612e9657600080fd5b8235612ea181612e6e565b946020939093013593505050565b600080600060608486031215612ec457600080fd5b8335612ecf81612e6e565b95602085013595506040909401359392505050565b600060208284031215612ef657600080fd5b8135610a1981612e6e565b600060208284031215612f1357600080fd5b5035919050565b600080600060608486031215612f2f57600080fd5b8335612f3a81612e6e565b92506020840135612f4a81612e6e565b929592945050506040919091013590565b60008060408385031215612f6e57600080fd5b8235612f7981612e6e565b91506020830135612f8981612e6e565b809150509250929050565b803560ff81168114612fa557600080fd5b919050565b60008060008060808587031215612fc057600080fd5b612fc985612f94565b9350612fd760208601612f94565b9250612fe560408601612f94565b9150612ff360608601612f94565b905092959194509250565b6000806040838503121561301157600080fd5b823561301c81612e6e565b915060208301358015158114612f8957600080fd5b600181811c9082168061304557607f821691505b60208210810361306557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107ff576107ff6130a0565b634e487b7160e01b600052601260045260246000fd5b6000826130f2576130f26130cd565b500490565b60ff81811683821601908111156107ff576107ff6130a0565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b808201808211156107ff576107ff6130a0565b818103818111156107ff576107ff6130a0565b600060ff831680613193576131936130cd565b8060ff84160491505092915050565b60ff82811682821603908111156107ff576107ff6130a0565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b68ffffffffffffffffff1991909116815260200190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561328257600080fd5b8151610a1981612e6e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132dd5784516001600160a01b0316835293830193918301916001016132b8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561331357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220091c6aea6d3b8c9357023f1002c7b696a13f5369bae8c27f50776b9513f0917b64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063781edb3c11610123578063aa4bde28116100ab578063cd43e2281161006f578063cd43e22814610646578063d2d7ad83146106a5578063dd62ed3e146106bb578063f2fde38b14610701578063fe0175351461072157600080fd5b8063aa4bde28146105ab578063aee50b1e146105c1578063b62496f5146105e1578063c024666814610611578063c9567bf91461063157600080fd5b806395d89b41116100f257806395d89b41146105215780639d952ce9146105365780639dccf6f114610556578063a457c2d71461056b578063a9059cbb1461058b57600080fd5b8063781edb3c146104ad578063880bcbc1146104cd5780638c0b5e22146104ed5780638da5cb5b1461050357600080fd5b806327a14fc2116101a657806342966c681161017557806342966c681461040457806349bd5a5e14610424578063667812911461045857806370a0823114610478578063715018a61461049857600080fd5b806327a14fc214610388578063313ce567146103a857806339509351146103c45780633b8dffd4146103e457600080fd5b80631694505e116101ed5780631694505e146102c457806318160ddd146102fc5780631cdbf8481461031b5780631e293c101461034857806323b872dd1461036857600080fd5b8063064a59d01461022a57806306fdde0314610260578063095ea7b3146102825780630f6ca522146102a257600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060065461024b90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561026c57600080fd5b5061027561075c565b6040516102579190612e20565b34801561028e57600080fd5b5061024b61029d366004612e83565b6107ee565b3480156102ae57600080fd5b506102c26102bd366004612eaf565b610805565b005b3480156102d057600080fd5b506006546102e4906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b34801561030857600080fd5b506003545b604051908152602001610257565b34801561032757600080fd5b5061030d610336366004612ee4565b60176020526000908152604090205481565b34801561035457600080fd5b506102c2610363366004612f01565b6108c6565b34801561037457600080fd5b5061024b610383366004612f1a565b6109b6565b34801561039457600080fd5b506102c26103a3366004612f01565b610a20565b3480156103b457600080fd5b5060405160128152602001610257565b3480156103d057600080fd5b5061024b6103df366004612e83565b610b71565b3480156103f057600080fd5b506102c26103ff366004612f5b565b610ba7565b34801561041057600080fd5b506102c261041f366004612f01565b610e9e565b34801561043057600080fd5b506102e47f000000000000000000000000a89e508ec306246776819c4d93b4bc638e1fbc4b81565b34801561046457600080fd5b506102c2610473366004612faa565b610eab565b34801561048457600080fd5b5061030d610493366004612ee4565b610fcb565b3480156104a457600080fd5b506102c2610fe6565b3480156104b957600080fd5b506102c26104c8366004612ffe565b61105a565b3480156104d957600080fd5b506102c26104e8366004612ffe565b611124565b3480156104f957600080fd5b5061030d60085481565b34801561050f57600080fd5b506000546001600160a01b03166102e4565b34801561052d57600080fd5b506102756111e6565b34801561054257600080fd5b506102c2610551366004612faa565b6111f5565b34801561056257600080fd5b506102c26112bc565b34801561057757600080fd5b5061024b610586366004612e83565b6112fd565b34801561059757600080fd5b5061024b6105a6366004612e83565b61134c565b3480156105b757600080fd5b5061030d60075481565b3480156105cd57600080fd5b506102c26105dc366004612f01565b611359565b3480156105ed57600080fd5b5061024b6105fc366004612ee4565b60166020526000908152604090205460ff1681565b34801561061d57600080fd5b506102c261062c366004612ffe565b611423565b34801561063d57600080fd5b506102c26114e5565b34801561065257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610257565b3480156106b157600080fd5b5061030d600c5481565b3480156106c757600080fd5b5061030d6106d6366004612f5b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561070d57600080fd5b506102c261071c366004612ee4565b611524565b34801561072d57600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610678565b60606004805461076b90613031565b80601f016020809104026020016040519081016040528092919081815260200182805461079790613031565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b60006107fb33848461166d565b5060015b92915050565b600c5461081130610fcb565b101561087f5760405162461bcd60e51b815260206004820152603260248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e696d6044820152710756d546f6b656e734265666f7265537761760741b60648201526084015b60405180910390fd5b61088a838383611792565b156108c157601854600160201b900460ff16156108c1576009805460ff191660011790556108b6611955565b6009805460ff191690555b505050565b6000546001600160a01b031633146108f05760405162461bcd60e51b81526004016108769061306b565b670de0b6b3a76400006103e861090560035490565b6109109060026130b6565b61091a91906130e3565b61092491906130e3565b8110156109835760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610876565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006109c3848484611ba4565b610a158433610a1085604051806060016040528060288152602001613375602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612187565b61166d565b5060015b9392505050565b6000546001600160a01b03163314610a4a5760405162461bcd60e51b81526004016108769061306b565b670de0b6b3a76400006103e8610a5f60035490565b610a6a9060146130b6565b610a7491906130e3565b610a7e91906130e3565b811015610ad95760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610876565b6007548103610b3e5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610876565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916107fb918590610a10908661160e565b6000546001600160a01b03163314610bd15760405162461bcd60e51b81526004016108769061306b565b600d546001600160a01b03838116911614610d36576001600160a01b038216610c3c5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610876565b7f000000000000000000000000a89e508ec306246776819c4d93b4bc638e1fbc4b6001600160a01b0316826001600160a01b031603610cbd5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610876565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610e9a576001600160a01b038116610da15760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610876565b7f000000000000000000000000a89e508ec306246776819c4d93b4bc638e1fbc4b6001600160a01b0316816001600160a01b031603610e225760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610876565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b5050565b610ea833826121c1565b50565b6000546001600160a01b03163314610ed55760405162461bcd60e51b81526004016108769061306b565b8082610ee185876130f7565b610eeb91906130f7565b610ef591906130f7565b60ff16600111610f475760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610876565b610f55600f858585856122cc565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b031633146110105760405162461bcd60e51b81526004016108769061306b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110845760405162461bcd60e51b81526004016108769061306b565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036110c45760405162461bcd60e51b815260040161087690613110565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b0316331461114e5760405162461bcd60e51b81526004016108769061306b565b6001600160a01b03821660009081526014602052604090205481151560ff90911615150361118e5760405162461bcd60e51b815260040161087690613110565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611118565b60606005805461076b90613031565b6000546001600160a01b0316331461121f5760405162461bcd60e51b81526004016108769061306b565b808261122b85876130f7565b61123591906130f7565b61123f91906130f7565b60ff166001116112915760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610876565b61129f600f8585858561252e565b6040516b62617365466565732d42757960a01b8152600c01610f6f565b6000546001600160a01b031633146112e65760405162461bcd60e51b81526004016108769061306b565b6b09b18ab5df7180b6b80000006007819055600855565b60006107fb3384610a10856040518060600160405280602581526020016133bd602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612187565b60006107fb338484611ba4565b6000546001600160a01b031633146113835760405162461bcd60e51b81526004016108769061306b565b600c5481036113f05760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610876565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b0316331461144d5760405162461bcd60e51b81526004016108769061306b565b6001600160a01b03821660009081526013602052604090205481151560ff90911615150361148d5760405162461bcd60e51b815260040161087690613110565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611118565b6000546001600160a01b0316331461150f5760405162461bcd60e51b81526004016108769061306b565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b0316331461154e5760405162461bcd60e51b81526004016108769061306b565b6001600160a01b0381166115b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610876565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061161b838561315a565b905083811015610a195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610876565b6001600160a01b0383166116cf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610876565b6001600160a01b0382166117305760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610876565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260136020526040812054819060ff166118a957601854600160201b900460ff161561182f576018546000906064906117da90600160201b900460ff16876130b6565b6117e491906130e3565b601854909150600090606490611804906301000000900460ff16886130b6565b61180e91906130e3565b905061181a828761316d565b9550801561182c5761182c33826121c1565b50505b601854600160201b900460ff16156118a257600061184c30610fcb565b60185490915060009060029060ff600160201b820481169161186f9116856130b6565b61187991906130e3565b61188391906130e3565b90506000611891828461316d565b9050801561189e57600193505b5050505b9050610a19565b60006118b430610fcb565b11156118dd57836000036118cf5750600a82905560006118dd565b6118d985856121c1565b5060005b601854600160201b900460ff16156118a25760006118fa30610fcb565b60185490915060009060029060ff600160201b820481169161191d9116856130b6565b61192791906130e3565b61193191906130e3565b9050600061193f828461316d565b9050801561189e57600093505050509050610a19565b600061196030610fcb565b600c5490915047906119739060076130b6565b82111561198b57600c546119889060076130b6565b91505b601854600090819060029060ff600160201b82048116916119ad9116876130b6565b6119b791906130e3565b6119c191906130e3565b905060006119cf828661316d565b90506119da81612778565b60006119e6854761316d565b60185490915060009060ff63010000008204811691611a089160029116613180565b611a1291906130f7565b601854611a299190600160201b900460ff166131a2565b60185460ff91821692506000916002918491611a469116866130b6565b611a5091906130e3565b611a5a91906130e3565b6018549091506000908390611a7790610100900460ff16866130b6565b611a8191906130e3565b90506000611a8f828461315a565b611a99908661316d565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611ae7576040519150601f19603f3d011682016040523d82523d6000602084013e611aec565b606091505b5050600d546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611b3c576040519150601f19603f3d011682016040523d82523d6000602084013e611b41565b606091505b50909850508615611b9857611b5687846128d2565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b038316611bca5760405162461bcd60e51b8152600401610876906131bb565b6001600160a01b038216611bf05760405162461bcd60e51b815260040161087690613200565b80600003611c04576108c18383600061297d565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611c6657506001600160a01b03841660009081526012602052604090205460ff16155b15611f3a57600654600160a01b900460ff16611cc45760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610876565b6001600160a01b03851660009081526016602052604090205460ff168015611d0557506001600160a01b03841660009081526014602052604090205460ff16155b15611dd657600854831115611d6d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610876565b600754611d7985610fcb565b611d83908561315a565b1115611dd15760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610876565b611f3a565b6001600160a01b03841660009081526016602052604090205460ff168015611e1757506001600160a01b03851660009081526014602052604090205460ff16155b15611e8157600854831115611dd15760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610876565b6001600160a01b03841660009081526014602052604090205460ff16611f0557600754611ead85610fcb565b611eb7908561315a565b1115611dd15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610876565b60095460ff16158015611f3057506001600160a01b03851660009081526014602052604090205460ff165b15611f3a5742600a555b611f4682828787612a89565b6000600c54611f5430610fcb565b6006549111159150600160a01b900460ff168015611f6f5750805b8015611f7e575060095460ff16155b8015611f955750601854600160201b900460ff1615155b8015611fb957506001600160a01b03851660009081526016602052604090205460ff165b8015611fde57506001600160a01b03861660009081526013602052604090205460ff16155b801561200357506001600160a01b03851660009081526013602052604090205460ff16155b15612028576009805460ff1916600117905561201d611955565b6009805460ff191690555b60095460009060ff161580156120475750600654600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061208957506001600160a01b03861660009081526013602052604090205460ff165b15612092575060005b8080156120aa5750601854600160201b900460ff1615155b15612173576018546000906064906120cc90600160201b900460ff16886130b6565b6120d691906130e3565b6018549091506000906064906120f6906301000000900460ff16896130b6565b61210091906130e3565b905061210c828861316d565b965061211989308461297d565b80156121705761212930826121c1565b60185460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61217e87878761297d565b50505050505050565b600081848411156121ab5760405162461bcd60e51b81526004016108769190612e20565b5060006121b8848661316d565b95945050505050565b6001600160a01b0382166122215760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610876565b61225e8160405180606001604052806022815260200161332d602291396001600160a01b0385166000908152600160205260409020549190612187565b6001600160a01b0383166000908152600160205260409020556003546122849082612d28565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461235d57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061339d8339815191529161233e9160481b90613243565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146123f657604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061339d833981519152916123d39160481b90613243565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b909204161461248f576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061339d8339815191529161246a9160481b90613243565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614612527576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061339d833981519152916125009160481b90613243565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff8581169116146125af57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff918216929188169160008051602061339d833981519152916125959160481b90613243565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461264357604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061339d833981519152916126229160481b90613243565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146126da576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061339d833981519152916126b69160481b90613243565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614612527576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061339d8339815191529161274a9160481b90613243565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127ad576127ad61325a565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a9190613270565b8160018151811061283d5761283d61325a565b6001600160a01b039283166020918202929092010152600654612863913091168461166d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061289c90859060009086903090429060040161328d565b600060405180830381600087803b1580156128b657600080fd5b505af11580156128ca573d6000803e3d6000fd5b505050505050565b6006546128ea9030906001600160a01b03168461166d565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612958573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061252791906132fe565b6001600160a01b0383166129a35760405162461bcd60e51b8152600401610876906131bb565b6001600160a01b0382166129c95760405162461bcd60e51b815260040161087690613200565b612a068160405180606001604052806026815260200161334f602691396001600160a01b0386166000908152600160205260409020549190612187565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612a35908261160e565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117859085815260200190565b6018805463ffffffff191690558315612b7c576011546018805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b03811660009081526017602052604090205415612b34576001600160a01b038116600090815260176020526040902054612b62565b612b3d81610fcb565b15612b60576001600160a01b038116600090815260176020526040902054612b62565b425b6001600160a01b0382166000908152601760205260409020555b8215612bdf576011546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015612beb575083155b15612c4d576011546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612c58848383612d6a565b60185460ff63010000008204811691620100008104821691612c82916101008104821691166130f7565b612c8c91906130f7565b612c9691906130f7565b6018805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b6000610a1983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612187565b6001600160a01b03811615801590612d8d57506001600160a01b03811661dead14155b8015612db257506001600160a01b03821660009081526013602052604090205460ff16155b8015612dd757506001600160a01b03811660009081526013602052604090205460ff16155b156108c15782158015612ded575060095460ff16155b156108c157600a546001600160a01b038316600090815260176020526040902054612e18919061316d565b600b55505050565b600060208083528351808285015260005b81811015612e4d57858101830151858201604001528201612e31565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ea857600080fd5b60008060408385031215612e9657600080fd5b8235612ea181612e6e565b946020939093013593505050565b600080600060608486031215612ec457600080fd5b8335612ecf81612e6e565b95602085013595506040909401359392505050565b600060208284031215612ef657600080fd5b8135610a1981612e6e565b600060208284031215612f1357600080fd5b5035919050565b600080600060608486031215612f2f57600080fd5b8335612f3a81612e6e565b92506020840135612f4a81612e6e565b929592945050506040919091013590565b60008060408385031215612f6e57600080fd5b8235612f7981612e6e565b91506020830135612f8981612e6e565b809150509250929050565b803560ff81168114612fa557600080fd5b919050565b60008060008060808587031215612fc057600080fd5b612fc985612f94565b9350612fd760208601612f94565b9250612fe560408601612f94565b9150612ff360608601612f94565b905092959194509250565b6000806040838503121561301157600080fd5b823561301c81612e6e565b915060208301358015158114612f8957600080fd5b600181811c9082168061304557607f821691505b60208210810361306557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107ff576107ff6130a0565b634e487b7160e01b600052601260045260246000fd5b6000826130f2576130f26130cd565b500490565b60ff81811683821601908111156107ff576107ff6130a0565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b808201808211156107ff576107ff6130a0565b818103818111156107ff576107ff6130a0565b600060ff831680613193576131936130cd565b8060ff84160491505092915050565b60ff82811682821603908111156107ff576107ff6130a0565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b68ffffffffffffffffff1991909116815260200190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561328257600080fd5b8151610a1981612e6e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132dd5784516001600160a01b0316835293830193918301916001016132b8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561331357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220091c6aea6d3b8c9357023f1002c7b696a13f5369bae8c27f50776b9513f0917b64736f6c63430008110033

Deployed Bytecode Sourcemap

13864:24163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14145:28;;;;;;;;;;-1:-1:-1;14145:28:0;;;;-1:-1:-1;;;14145:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;14145:28:0;;;;;;;;9545:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10525:194::-;;;;;;;;;;-1:-1:-1;10525:194:0;;;;;:::i;:::-;;:::i;36444:509::-;;;;;;;;;;-1:-1:-1;36444:509:0;;;;;:::i;:::-;;:::i;:::-;;13911:30;;;;;;;;;;-1:-1:-1;13911:30:0;;;;-1:-1:-1;;;;;13911:30:0;;;;;;-1:-1:-1;;;;;1782:32:1;;;1764:51;;1752:2;1737:18;13911:30:0;1603:218:1;9866:108:0;;;;;;;;;;-1:-1:-1;9954:12:0;;9866:108;;;1972:25:1;;;1960:2;1945:18;9866:108:0;1826:177:1;15424:46:0;;;;;;;;;;-1:-1:-1;15424:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;23358:323;;;;;;;;;;-1:-1:-1;23358:323:0;;;;;:::i;:::-;;:::i;10727:454::-;;;;;;;;;;-1:-1:-1;10727:454:0;;;;;:::i;:::-;;:::i;23689:450::-;;;;;;;;;;-1:-1:-1;23689:450:0;;;;;:::i;:::-;;:::i;9765:93::-;;;;;;;;;;-1:-1:-1;9765:93:0;;9848:2;3048:36:1;;3036:2;3021:18;9765:93:0;2906:184:1;11189:293:0;;;;;;;;;;-1:-1:-1;11189:293:0;;;;;:::i;:::-;;:::i;20571:1115::-;;;;;;;;;;-1:-1:-1;20571:1115:0;;;;;:::i;:::-;;:::i;24509:81::-;;;;;;;;;;-1:-1:-1;24509:81:0;;;;;:::i;:::-;;:::i;13948:38::-;;;;;;;;;;;;;;;22516:834;;;;;;;;;;-1:-1:-1;22516:834:0;;;;;:::i;:::-;;:::i;9982:143::-;;;;;;;;;;-1:-1:-1;9982:143:0;;;;;:::i;:::-;;:::i;8664:148::-;;;;;;;;;;;;;:::i;20169:394::-;;;;;;;;;;-1:-1:-1;20169:394:0;;;;;:::i;:::-;;:::i;19775:386::-;;;;;;;;;;-1:-1:-1;19775:386:0;;;;;:::i;:::-;;:::i;14306:54::-;;;;;;;;;;;;;;;;8450:79;;;;;;;;;;-1:-1:-1;8488:7:0;8515:6;-1:-1:-1;;;;;8515:6:0;8450:79;;9653:104;;;;;;;;;;;;;:::i;21694:814::-;;;;;;;;;;-1:-1:-1;21694:814:0;;;;;:::i;:::-;;:::i;37469:124::-;;;;;;;;;;;;;:::i;11490:393::-;;;;;;;;;;-1:-1:-1;11490:393:0;;;;;:::i;:::-;;:::i;10133:200::-;;;;;;;;;;-1:-1:-1;10133:200:0;;;;;:::i;:::-;;:::i;14241:58::-;;;;;;;;;;;;;;;;24147:354;;;;;;;;;;-1:-1:-1;24147:354:0;;;;;:::i;:::-;;:::i;15360:57::-;;;;;;;;;;-1:-1:-1;15360:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19411:356;;;;;;;;;;-1:-1:-1;19411:356:0;;;;;:::i;:::-;;:::i;18965:84::-;;;;;;;;;;;;;:::i;24598:291::-;;;;;;;;;;-1:-1:-1;24740:23:0;;;;;;;24778;;;;;;-1:-1:-1;;;24816:21:0;;;;;-1:-1:-1;;;24852:18:0;;;24598: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;24598:291:0;4676:419:1;14469:64:0;;;;;;;;;;;;;;;;10341:176;;;;;;;;;;-1:-1:-1;10341:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10482:18:0;;;10455:7;10482:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10341:176;8820:281;;;;;;;;;;-1:-1:-1;8820:281:0;;;;;:::i;:::-;;:::i;24897:296::-;;;;;;;;;;-1:-1:-1;25040:24:0;;;;;;;;;25079;;;;;;-1:-1:-1;;;25118:22:0;;;;;-1:-1:-1;;;25155:19:0;;;24897:296;;9545:100;9599:13;9632:5;9625:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9545:100;:::o;10525:194::-;10633:4;10650:39;7838:10;10673:7;10682:6;10650:8;:39::i;:::-;-1:-1:-1;10707:4:0;10525:194;;;;;:::o;36444:509::-;36622:23;;36594:24;36612:4;36594:9;:24::i;:::-;:51;;36572:151;;;;-1:-1:-1;;;36572:151:0;;5687:2:1;36572:151:0;;;5669:21:1;5726:2;5706:18;;;5699:30;5765:34;5745:18;;;5738:62;-1:-1:-1;;;5816:18:1;;;5809:48;5874:19;;36572:151:0;;;;;;;;;36738:38;36756:4;36762:3;36767:8;36738:17;:38::i;:::-;36734:212;;;36797:9;;-1:-1:-1;;;36797:9:0;;;;:13;36793:142;;36831:9;:16;;-1:-1:-1;;36831:16:0;36843:4;36831:16;;;36866:17;:15;:17::i;:::-;36902:9;:17;;-1:-1:-1;;36902:17:0;;;36793:142;36444:509;;;:::o;23358:323::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;23504:4:::1;23496;23475:13;9954:12:::0;;;9866:108;23475:13:::1;:17;::::0;23491:1:::1;23475:17;:::i;:::-;23474:26;;;;:::i;:::-;23473:35;;;;:::i;:::-;23461:8;:47;;23439:136;;;::::0;-1:-1:-1;;;23439:136:0;;7029:2:1;23439:136:0::1;::::0;::::1;7011:21:1::0;7068:2;7048:18;;;7041:30;7107:34;7087:18;;;7080:62;-1:-1:-1;;;7158:18:1;;;7151:37;7205:19;;23439:136:0::1;6827:403:1::0;23439:136:0::1;23628:11;::::0;23591:49:::1;::::0;23618:8;;23591:49:::1;::::0;;;::::1;23651:11;:22:::0;23358:323::o;10727:454::-;10867:4;10884:36;10894:6;10902:9;10913:6;10884:9;:36::i;:::-;10931:220;10954:6;7838:10;11002:138;11058:6;11002:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11002:19:0;;;;;;:11;:19;;;;;;;;7838:10;11002:33;;;;;;;;;;:37;:138::i;:::-;10931:8;:220::i;:::-;-1:-1:-1;11169:4:0;10727:454;;;;;;:::o;23689:450::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;23831:4:::1;23823;23801:13;9954:12:::0;;;9866:108;23801:13:::1;:18;::::0;23817:2:::1;23801:18;:::i;:::-;23800:27;;;;:::i;:::-;23799:36;;;;:::i;:::-;23787:8;:48;;23765:134;;;::::0;-1:-1:-1;;;23765:134:0;;7437:2:1;23765:134:0::1;::::0;::::1;7419:21:1::0;7476:2;7456:18;;;7449:30;7515:34;7495:18;;;7488:62;-1:-1:-1;;;7566:18:1;;;7559:34;7610:19;;23765:134:0::1;7235:400:1::0;23765:134:0::1;23944:15;;23932:8;:27:::0;23910:120:::1;;;::::0;-1:-1:-1;;;23910:120:0;;7842:2:1;23910:120:0::1;::::0;::::1;7824:21:1::0;7881:2;7861:18;;;7854:30;7920:34;7900:18;;;7893:62;-1:-1:-1;;;7971:18:1;;;7964:41;8022:19;;23910:120:0::1;7640:407:1::0;23910:120:0::1;24078:15;::::0;24046:48:::1;::::0;24068:8;;24046:48:::1;::::0;;;::::1;24105:15;:26:::0;23689:450::o;11189:293::-;7838:10;11302:4;11391:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11391:34:0;;;;;;;;;;11302:4;;11319:133;;11369:7;;11391:50;;11430:10;11391:38;:50::i;20571:1115::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;20707:15:::1;::::0;-1:-1:-1;;;;;20707:37:0;;::::1;:15:::0;::::1;:37;20703:546;;-1:-1:-1::0;;;;;20787:32:0;::::1;20761:125;;;::::0;-1:-1:-1;;;20761:125:0;;8254:2:1;20761:125:0::1;::::0;::::1;8236:21:1::0;8293:2;8273:18;;;8266:30;8332:33;8312:18;;;8305:61;8383:18;;20761:125:0::1;8052:355:1::0;20761:125:0::1;20949:13;-1:-1:-1::0;;;;;20927:35:0::1;:18;-1:-1:-1::0;;;;;20927:35:0::1;::::0;20901:128:::1;;;::::0;-1:-1:-1;;;20901:128:0;;8254:2:1;20901:128:0::1;::::0;::::1;8236:21:1::0;8293:2;8273:18;;;8266:30;8332:33;8312:18;;;8305:61;8383:18;;20901:128:0::1;8052:355:1::0;20901:128:0::1;21156:15;::::0;21049:137:::1;::::0;-1:-1:-1;;;8614:30:1;;-1:-1:-1;;;;;21156:15:0;;::::1;::::0;21049:137;::::1;::::0;8669:2:1;8660:12;21049:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21201:15;:36:::0;;-1:-1:-1;;;;;;21201:36:0::1;-1:-1:-1::0;;;;;21201:36:0;::::1;;::::0;;20703:546:::1;21263:14;::::0;-1:-1:-1;;;;;21263:35:0;;::::1;:14:::0;::::1;:35;21259:420;;-1:-1:-1::0;;;;;21323:31:0;::::1;21315:74;;;::::0;-1:-1:-1;;;21315:74:0;;8885:2:1;21315:74:0::1;::::0;::::1;8867:21:1::0;8924:2;8904:18;;;8897:30;8963:32;8943:18;;;8936:60;9013:18;;21315:74:0::1;8683:354:1::0;21315:74:0::1;21451:13;-1:-1:-1::0;;;;;21430:34:0::1;:17;-1:-1:-1::0;;;;;21430:34:0::1;::::0;21404:126:::1;;;::::0;-1:-1:-1;;;21404:126:0;;8885:2:1;21404:126:0::1;::::0;::::1;8867:21:1::0;8924:2;8904:18;;;8897:30;8963:32;8943:18;;;8936:60;9013:18;;21404:126:0::1;8683:354:1::0;21404:126:0::1;21603:14;::::0;;21550:68:::1;::::0;-1:-1:-1;;;9244:29:1;;-1:-1:-1;;;;;21603:14:0;;::::1;::::0;21550:68;;::::1;::::0;9289:12:1;21550:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21633:14;:34:::0;;-1:-1:-1;;;;;;21633:34:0::1;-1:-1:-1::0;;;;;21633:34:0;::::1;;::::0;;21259:420:::1;20571:1115:::0;;:::o;24509:81::-;24558:24;24564:10;24576:5;24558;:24::i;:::-;24509:81;:::o;22516:834::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;22887:14;22846:17;22760:62:::1;22803:19:::0;22760;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;22739:162;;:1;:162;22717:236;;;::::0;-1:-1:-1;;;22717:236:0;;9667:2:1;22717:236:0::1;::::0;::::1;9649:21:1::0;9706:2;9686:18;;;9679:30;9745:26;9725:18;;;9718:54;9789:18;;22717:236:0::1;9465:348:1::0;22717:236:0::1;22964:183;23002:5;23022:19;23056;23090:17;23122:14;22964:23;:183::i;:::-;23163:179;::::0;-1:-1:-1;;;10020:28:1;;10073:2;10064:12;23163: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;23163:179:0;;;;::::1;::::0;;;;;4878:3:1;23163:179:0;;::::1;22516:834:::0;;;;:::o;9982:143::-;-1:-1:-1;;;;;10099:18:0;10072:7;10099:18;;;:9;:18;;;;;;;9982:143::o;8664:148::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;8771:1:::1;8755:6:::0;;8734:40:::1;::::0;-1:-1:-1;;;;;8755:6:0;;::::1;::::0;8734:40:::1;::::0;8771:1;;8734:40:::1;8802:1;8785:19:::0;;-1:-1:-1;;;;;;8785:19:0::1;::::0;;8664:148::o;20169:394::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20313:37:0;::::1;;::::0;;;:28:::1;:37;::::0;;;;;:49;::::1;;:37;::::0;;::::1;:49;;::::0;20291:141:::1;;;;-1:-1:-1::0;;;20291:141:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20443:37:0;::::1;;::::0;;;:28:::1;:37;::::0;;;;;;;;:48;;-1:-1:-1;;20443:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20507;;154:41:1;;;20507:48:0::1;::::0;127:18:1;20507:48:0::1;;;;;;;;20169:394:::0;;:::o;19775:386::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19924:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;:43;::::1;;:31;::::0;;::::1;:43;;::::0;19902:135:::1;;;;-1:-1:-1::0;;;19902:135:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20048:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;;;;:42;;-1:-1:-1;;20048:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20106:47;;154:41:1;;;20106:47:0::1;::::0;127:18:1;20106:47:0::1;14:187:1::0;9653:104:0;9709:13;9742:7;9735:14;;;;;:::i;21694:814::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;22057:13;22017:16;21933:60:::1;21975:18:::0;21933;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;21912:158;;:1;:158;21890:231;;;::::0;-1:-1:-1;;;21890:231:0;;10700:2:1;21890:231:0::1;::::0;::::1;10682:21:1::0;10739:2;10719:18;;;10712:30;10778:25;10758:18;;;10751:53;10821:18;;21890:231:0::1;10498:347:1::0;21890:231:0::1;22132:178;22169:5;22189:18;22222;22255:16;22286:13;22132:22;:178::i;:::-;22326:174;::::0;-1:-1:-1;;;11052:27:1;;11104:2;11095:12;22326:174:0::1;10850:263:1::0;37469:124:0;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;14211:23:::1;37524:15;:27:::0;;;37562:11:::1;:23:::0;37469:124::o;11490:393::-;11608:4;11625:228;7838:10;11675:7;11697:145;11754:15;11697:145;;;;;;;;;;;;;;;;;7838:10;11697:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11697:34:0;;;;;;;;;;;;:38;:145::i;10133:200::-;10244:4;10261:42;7838:10;10285:9;10296:6;10261:9;:42::i;24147:354::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;24265:23:::1;;24253:8;:35:::0;24231:136:::1;;;::::0;-1:-1:-1;;;24231:136:0;;11320:2:1;24231:136:0::1;::::0;::::1;11302:21:1::0;11359:2;11339:18;;;11332:30;11398:34;11378:18;;;11371:62;-1:-1:-1;;;11449:18:1;;;11442:49;11508:19;;24231:136:0::1;11118:415:1::0;24231:136:0::1;24424:23;::::0;24383:65:::1;::::0;24414:8;;24383:65:::1;::::0;;;::::1;24459:23;:34:::0;24147:354::o;19411:356::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19545:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19523:131:::1;;;;-1:-1:-1::0;;;19523:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19665:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19665:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19719:40;;154:41:1;;;19719:40:0::1;::::0;127:18:1;19719:40:0::1;14:187:1::0;18965:84:0;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;19018:16:::1;:23:::0;;-1:-1:-1;;;;19018:23:0::1;-1:-1:-1::0;;;19018:23:0::1;::::0;;18965:84::o;8820:281::-;8577:6;;-1:-1:-1;;;;;8577:6:0;7838:10;8577:22;8569:67;;;;-1:-1:-1;;;8569:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8923:22:0;::::1;8901:110;;;::::0;-1:-1:-1;;;8901:110:0;;11740:2:1;8901:110:0::1;::::0;::::1;11722:21:1::0;11779:2;11759:18;;;11752:30;11818:34;11798:18;;;11791:62;-1:-1:-1;;;11869:18:1;;;11862:36;11915:19;;8901:110:0::1;11538:402:1::0;8901:110:0::1;9048:6;::::0;;9027:38:::1;::::0;-1:-1:-1;;;;;9027:38:0;;::::1;::::0;9048:6;::::1;::::0;9027:38:::1;::::0;::::1;9076:6;:17:::0;;-1:-1:-1;;;;;;9076:17:0::1;-1:-1:-1::0;;;;;9076:17:0;;;::::1;::::0;;;::::1;::::0;;8820:281::o;2687:181::-;2745:7;;2777:5;2781:1;2777;:5;:::i;:::-;2765:17;;2806:1;2801;:6;;2793:46;;;;-1:-1:-1;;;2793:46:0;;12277:2:1;2793:46:0;;;12259:21:1;12316:2;12296:18;;;12289:30;12355:29;12335:18;;;12328:57;12402:18;;2793:46:0;12075:351:1;13346:378:0;-1:-1:-1;;;;;13482:19:0;;13474:68;;;;-1:-1:-1;;;13474:68:0;;12633:2:1;13474:68:0;;;12615:21:1;12672:2;12652:18;;;12645:30;12711:34;12691:18;;;12684:62;-1:-1:-1;;;12762:18:1;;;12755:34;12806:19;;13474:68:0;12431:400:1;13474:68:0;-1:-1:-1;;;;;13561:21:0;;13553:68;;;;-1:-1:-1;;;13553:68:0;;13038:2:1;13553:68:0;;;13020:21:1;13077:2;13057:18;;;13050:30;13116:34;13096:18;;;13089:62;-1:-1:-1;;;13167:18:1;;;13160:32;13209:19;;13553:68:0;12836:398:1;13553:68:0;-1:-1:-1;;;;;13632:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13684:32;;1972:25:1;;;13684:32:0;;1945:18:1;13684:32:0;;;;;;;;13346:378;;;:::o;33129:1793::-;33323:10;33259:4;33304:30;;;:18;:30;;;;;;33259:4;;33304:30;;33299:1616;;33355:9;;-1:-1:-1;;;33355:9:0;;;;:13;33351:309;;33413:9;;33389:11;;33426:3;;33404:18;;-1:-1:-1;;;33413:9:0;;;;33404:6;:18;:::i;:::-;33403:26;;;;:::i;:::-;33479:8;;33389:40;;-1:-1:-1;33448:18:0;;33491:3;;33470:17;;33479:8;;;;;33470:6;:17;:::i;:::-;33469:25;;;;:::i;:::-;33448:46;-1:-1:-1;33522:12:0;33531:3;33522:6;:12;:::i;:::-;33513:21;-1:-1:-1;33557:14:0;;33553:92;;33596:29;33602:10;33614;33596:5;:29::i;:::-;33370:290;;33351:309;33678:9;;-1:-1:-1;;;33678:9:0;;;;:13;33674:414;;33712:23;33738:24;33756:4;33738:9;:24::i;:::-;33864:9;;33712:50;;-1:-1:-1;33781:23:0;;33897:1;;33864:9;-1:-1:-1;;;33864:9:0;;;;;33808:31;;33826:13;33712:50;33808:31;:::i;:::-;33807:66;;;;:::i;:::-;:91;;;;:::i;:::-;33781:117;-1:-1:-1;33917:20:0;33940:35;33781:117;33940:15;:35;:::i;:::-;33917:58;-1:-1:-1;33998:16:0;;33994:79;;34049:4;34039:14;;33994:79;33693:395;;;33674:414;34109:7;-1:-1:-1;34102:14:0;;33299:1616;34180:1;34153:24;34171:4;34153:9;:24::i;:::-;:28;34149:297;;;34206:6;34216:1;34206:11;34202:229;;-1:-1:-1;34242:11:0;:22;;;34297:5;34202:229;;;34351:22;34357:7;34366:6;34351:5;:22::i;:::-;-1:-1:-1;34406:5:0;34202:229;34464:9;;-1:-1:-1;;;34464:9:0;;;;:13;34460:415;;34498:23;34524:24;34542:4;34524:9;:24::i;:::-;34650:9;;34498:50;;-1:-1:-1;34567:23:0;;34683:1;;34650:9;-1:-1:-1;;;34650:9:0;;;;;34594:31;;34612:13;34498:50;34594:31;:::i;:::-;34593:66;;;;:::i;:::-;:91;;;;:::i;:::-;34567:117;-1:-1:-1;34703:20:0;34726:35;34567:117;34726:15;:35;:::i;:::-;34703:58;-1:-1:-1;34784:16:0;;34780:80;;34835:5;34825:15;;34479:396;;;34896:7;-1:-1:-1;34889:14:0;;34930:1506;34976:23;35002:24;35020:4;35002:9;:24::i;:::-;35119:23;;34976:50;;-1:-1:-1;35065:21:0;;35119:27;;35145:1;35119:27;:::i;:::-;35101:15;:45;35097:123;;;35181:23;;:27;;35207:1;35181:27;:::i;:::-;35163:45;;35097:123;35328:9;;35230:12;;;;35353:1;;35328:9;-1:-1:-1;;;35328:9:0;;;;;35280:31;;35298:13;35280:15;:31;:::i;:::-;35279:58;;;;:::i;:::-;:75;;;;:::i;:::-;35253:101;-1:-1:-1;35365:20:0;35388:35;35253:101;35388:15;:35;:::i;:::-;35365:58;;35436:31;35454:12;35436:17;:31::i;:::-;35480:27;35510:41;35534:17;35510:21;:41;:::i;:::-;35619:8;;35480:71;;-1:-1:-1;35562:19:0;;35619:8;;;;;;;35598:17;;35614:1;;35598:13;:17;:::i;:::-;35597:30;;;;:::i;:::-;35584:9;;:44;;;-1:-1:-1;;;35584:9:0;;;;:44;:::i;:::-;35691:13;;35562:66;;;;;-1:-1:-1;35639:26:0;;35748:1;;35562:66;;35669:35;;35691:13;35669:19;:35;:::i;:::-;35668:64;;;;:::i;:::-;:81;;;;:::i;:::-;35812:13;;35639:110;;-1:-1:-1;35760:26:0;;35842:11;;35790:35;;35812:13;;;;;35790:19;:35;:::i;:::-;35789:64;;;;:::i;:::-;35760:93;-1:-1:-1;35864:24:0;35927:39;35760:93;35927:18;:39;:::i;:::-;35891:76;;:19;:76;:::i;:::-;36002:14;;35994:57;;35864:103;;-1:-1:-1;;;;;;36002:14:0;;35864:103;;35994:57;;;;35864:103;36002:14;35994:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36084:15:0;;36076:87;;35980:71;;-1:-1:-1;;;;;;36084:15:0;;36127:21;;36076:87;;;;36127:21;36084:15;36076:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36062:101:0;;-1:-1:-1;;36180:19:0;;36176:253;;36216:50;36230:15;36247:18;36216:13;:50::i;:::-;36286:131;;;14110:25:1;;;14166:2;14151:18;;14144:34;;;14194:18;;;14187:34;;;36286:131:0;;14098:2:1;14083:18;36286:131:0;;;;;;;36176:253;34965:1471;;;;;;;;;;34930:1506::o;25214:2945::-;-1:-1:-1;;;;;25346:18:0;;25338:68;;;;-1:-1:-1;;;25338:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25425:16:0;;25417:64;;;;-1:-1:-1;;;25417:64:0;;;;;;;:::i;:::-;25498:6;25508:1;25498:11;25494:93;;25526:28;25542:4;25548:2;25552:1;25526:15;:28::i;25494:93::-;-1:-1:-1;;;;;25618:31:0;;;25599:16;25618:31;;;:25;:31;;;;;;;;;25678:29;;;;;;;;;25739:35;;;:29;:35;;;;;;25618:31;;;;;25678:29;;;;25739:35;25738:36;:87;;;;-1:-1:-1;;;;;;25792:33:0;;;;;;:29;:33;;;;;;;;25791:34;25738:87;25720:1287;;;25860:16;;-1:-1:-1;;;25860:16:0;;;;25852:59;;;;-1:-1:-1;;;25852:59:0;;15244:2:1;25852:59:0;;;15226:21:1;15283:2;15263:18;;;15256:30;15322:32;15302:18;;;15295:60;15372:18;;25852:59:0;15042:354:1;25852:59:0;-1:-1:-1;;;;;25948:31:0;;;;;;:25;:31;;;;;;;;:79;;;;-1:-1:-1;;;;;;26001:26:0;;;;;;:22;:26;;;;;;;;26000:27;25948:79;25926:1070;;;26102:11;;26092:6;:21;;26062:135;;;;-1:-1:-1;;;26062:135:0;;15603:2:1;26062:135:0;;;15585:21:1;15642:2;15622:18;;;15615:30;15681:34;15661:18;;;15654:62;-1:-1:-1;;;15732:18:1;;;15725:38;15780:19;;26062:135:0;15401:404:1;26062:135:0;26272:15;;26255:13;26265:2;26255:9;:13::i;:::-;26246:22;;:6;:22;:::i;:::-;:41;;26216:139;;;;-1:-1:-1;;;26216:139:0;;16012:2:1;26216:139:0;;;15994:21:1;16051:2;16031:18;;;16024:30;16090:26;16070:18;;;16063:54;16134:18;;26216:139:0;15810:348:1;26216:139:0;25926:1070;;;-1:-1:-1;;;;;26399:29:0;;;;;;:25;:29;;;;;;;;:79;;;;-1:-1:-1;;;;;;26450:28:0;;;;;;:22;:28;;;;;;;;26449:29;26399:79;26377:619;;;26553:11;;26543:6;:21;;26513:137;;;;-1:-1:-1;;;26513:137:0;;16365:2:1;26513:137:0;;;16347:21:1;16404:2;16384:18;;;16377:30;16443:34;16423:18;;;16416:62;-1:-1:-1;;;16494:18:1;;;16487:40;16544:19;;26513:137:0;16163:406:1;26377:619:0;-1:-1:-1;;;;;26677:26:0;;;;;;:22;:26;;;;;;;;26672:324;;26780:15;;26763:13;26773:2;26763:9;:13::i;:::-;26754:22;;:6;:22;:::i;:::-;:41;;26724:138;;;;-1:-1:-1;;;26724:138:0;;16776:2:1;26724:138:0;;;16758:21:1;16815:2;16795:18;;;16788:30;16854:25;16834:18;;;16827:53;16897:18;;26724:138:0;16574:347:1;26672:324:0;26889:9;;;;26888:10;:42;;;;-1:-1:-1;;;;;;26902:28:0;;;;;;:22;:28;;;;;;;;26888:42;26884:112;;;26965:15;26951:11;:29;26884:112;27017:47;27030:11;27043:10;27055:4;27061:2;27017:12;:47::i;:::-;27075:12;27118:23;;27090:24;27108:4;27090:9;:24::i;:::-;27172:16;;-1:-1:-1;;27090:51:0;;-1:-1:-1;;;;27172:16:0;;;;:40;;;;;27205:7;27172:40;:67;;;;-1:-1:-1;27230:9:0;;;;27229:10;27172:67;:97;;;;-1:-1:-1;27256:9:0;;-1:-1:-1;;;27256:9:0;;;;:13;;27172:97;:143;;;;-1:-1:-1;;;;;;27286:29:0;;;;;;:25;:29;;;;;;;;27172:143;:185;;;;-1:-1:-1;;;;;;27333:24:0;;;;;;:18;:24;;;;;;;;27332:25;27172:185;:225;;;;-1:-1:-1;;;;;;27375:22:0;;;;;;:18;:22;;;;;;;;27374:23;27172:225;27154:362;;;27424:9;:16;;-1:-1:-1;;27424:16:0;27436:4;27424:16;;;27455:17;:15;:17::i;:::-;27487:9;:17;;-1:-1:-1;;27487:17:0;;;27154:362;27544:9;;27528:12;;27544:9;;27543:10;:30;;;;-1:-1:-1;27557:16:0;;-1:-1:-1;;;27557:16:0;;;;27543:30;-1:-1:-1;;;;;27590:24:0;;;;;;:18;:24;;;;;;27528:45;;-1:-1:-1;27590:24:0;;;:50;;-1:-1:-1;;;;;;27618:22:0;;;;;;:18;:22;;;;;;;;27590:50;27586:98;;;-1:-1:-1;27667:5:0;27586:98;27698:7;:24;;;;-1:-1:-1;27709:9:0;;-1:-1:-1;;;27709:9:0;;;;:13;;27698:24;27694:414;;;27763:9;;27739:11;;27776:3;;27754:18;;-1:-1:-1;;;27763:9:0;;;;27754:6;:18;:::i;:::-;27753:26;;;;:::i;:::-;27825:8;;27739:40;;-1:-1:-1;27794:18:0;;27837:3;;27816:17;;27825:8;;;;;27816:6;:17;:::i;:::-;27815:25;;;;:::i;:::-;27794:46;-1:-1:-1;27864:12:0;27873:3;27864:6;:12;:::i;:::-;27855:21;;27891:41;27907:4;27921;27928:3;27891:15;:41::i;:::-;27953:14;;27949:148;;27988:38;28008:4;28015:10;27988:11;:38::i;:::-;28060:8;;28050:31;;;28060:8;;;;;;17096:36:1;;17163:2;17148:18;;17141:34;;;28050:31:0;;17069:18:1;28050:31:0;;;;;;;27949:148;27724:384;;27694:414;28118:33;28134:4;28140:2;28144:6;28118:15;:33::i;:::-;25327:2832;;;;25214:2945;;;:::o;3020:226::-;3140:7;3176:12;3168:6;;;;3160:29;;;;-1:-1:-1;;;3160:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3200:9:0;3212:5;3216:1;3212;:5;:::i;:::-;3200:17;3020:226;-1:-1:-1;;;;;3020:226:0:o;12887:451::-;-1:-1:-1;;;;;12971:21:0;;12963:67;;;;-1:-1:-1;;;12963:67:0;;17388:2:1;12963:67:0;;;17370:21:1;17427:2;17407:18;;;17400:30;17466:34;17446:18;;;17439:62;-1:-1:-1;;;17517:18:1;;;17510:31;17558:19;;12963:67:0;17186:397:1;12963:67:0;13122:105;13159:6;13122:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13122:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13101:18:0;;;;;;:9;:18;;;;;:126;13253:12;;:24;;13270:6;13253:16;:24::i;:::-;13238:12;:39;13293:37;;1972:25:1;;;13319:1:0;;-1:-1:-1;;;;;13293:37:0;;;;;1960:2:1;1945:18;13293:37:0;;;;;;;12887:451;;:::o;30070:1538::-;30308:22;;;;:45;;;;:22;;;;;:45;30304:329;;30375:187;;-1:-1:-1;;;17790:33:1;;17848:2;17839:12;30375:187:0;;;;;;;;30453:22;;;;30533:14;;30375:187;;30453:22;;;;;;;;30375:187;;;;-1:-1:-1;;;;;;;;;;;30375:187:0;;;30533:14;;;30375:187;:::i;:::-;;;;;;;;30577:22;;;:44;;-1:-1:-1;;30577:44:0;;;;;;;;;30304:329;30647:22;;;;:45;;;;:22;;;;;:45;30643:329;;30714:187;;-1:-1:-1;;;18278:33:1;;18336:2;18327:12;30714:187:0;;;;;;;;30792:22;;;;30872:14;;30714:187;;30792:22;;;;;;;;30714:187;;;;-1:-1:-1;;;;;;;;;;;30714:187:0;;;30872:14;;;30714:187;:::i;:::-;;;;;;;;30916:22;;;:44;;-1:-1:-1;;30916:44:0;;;;;;;;;30643:329;30986:20;;;;:41;;;;-1:-1:-1;;;30986:20:0;;;;:41;30982:315;;31049:181;;-1:-1:-1;;;18552:31:1;;18608:2;18599:12;31049:181:0;;;;;;;;31125:20;;;;31201:14;;31049:181;;31125:20;-1:-1:-1;;;31125:20:0;;;;;;31049:181;;;;-1:-1:-1;;;;;;;;;;;31049:181:0;;;31201:14;;;31049:181;:::i;:::-;;;;;;;;31245:20;;;:40;;-1:-1:-1;;31245:40:0;-1:-1:-1;;;31245:40:0;;;;;;;30982:315;31311:17;;;;:35;;;;-1:-1:-1;;;31311:17:0;;;;:35;31307:294;;31368:172;;-1:-1:-1;;;18824:28:1;;18877:2;18868:12;31368:172:0;;;;;;;;31441:17;;;;31511:14;;31368:172;;31441:17;-1:-1:-1;;;31441:17:0;;;;;;31368:172;;;;-1:-1:-1;;;;;;;;;;;31368:172:0;;;31511:14;;;31368:172;:::i;:::-;;;;;;;;31555:17;;;:34;;-1:-1:-1;;31555:34:0;-1:-1:-1;;;31555:34:0;;;;;;;31307:294;30070:1538;;;;;:::o;31616:1505::-;31849:21;;;;:43;;;;:21;;:43;31845:322;;31914:184;;-1:-1:-1;;;19093:32:1;;19150:2;19141:12;31914:184:0;;;;;;;;31991:21;;;;32069:14;;31914:184;;31991:21;;;;;31914:184;;;;-1:-1:-1;;;;;;;;;;;31914:184:0;;;32069:14;;;31914:184;:::i;:::-;;;;;;;;32113:21;;;:42;;-1:-1:-1;;32113:42:0;;;;;;;31845:322;32181:21;;;;:43;;;;:21;;;;;:43;32177:322;;32246:184;;-1:-1:-1;;;19366:32:1;;19423:2;19414:12;32246:184:0;;;;;;;;32323:21;;;;32401:14;;32246:184;;32323:21;;;;;;;;32246:184;;;;-1:-1:-1;;;;;;;;;;;32246:184:0;;;32401:14;;;32246:184;:::i;:::-;;;;;;;;32445:21;;;:42;;-1:-1:-1;;32445:42:0;;;;;;;;;32177:322;32513:19;;;;:39;;;;-1:-1:-1;;;32513:19:0;;;;:39;32509:308;;32574:178;;-1:-1:-1;;;19639:30:1;;19694:2;19685:12;32574:178:0;;;;;;;;32649:19;;;;32723:14;;32574:178;;32649:19;-1:-1:-1;;;32649:19:0;;;;;;32574:178;;;;-1:-1:-1;;;;;;;;;;;32574:178:0;;;32723:14;;;32574:178;:::i;:::-;;;;;;;;32767:19;;;:38;;-1:-1:-1;;32767:38:0;-1:-1:-1;;;32767:38:0;;;;;;;32509:308;32831:16;;;;:33;;;;-1:-1:-1;;;32831:16:0;;;;:33;32827:287;;32886:169;;-1:-1:-1;;;19910:27:1;;19962:2;19953:12;32886:169:0;;;;;;;;32958:16;;;;33026:14;;32886:169;;32958:16;-1:-1:-1;;;32958:16:0;;;;;;32886:169;;;;-1:-1:-1;;;;;;;;;;;32886:169:0;;;33026:14;;;32886:169;:::i;:::-;;;;;;;;33070:16;;;:32;;;;;-1:-1:-1;;;33070:32:0;-1:-1:-1;;33070:32:0;;;;;;31616:1505;;;;;:::o;36961:500::-;37052:16;;;37066:1;37052:16;;;;;;;;37028:21;;37052:16;;;;;;;;;;-1:-1:-1;37052:16:0;37028:40;;37097:4;37079;37084:1;37079:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37079:23:0;;;:7;;;;;;;;;;:23;;;;37123:15;;:22;;;-1:-1:-1;;;37123:22:0;;;;:15;;;;;:20;;:22;;;;;37079:7;;37123:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37113:4;37118:1;37113:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37113:32:0;;;:7;;;;;;;;;:32;37188:15;;37156:62;;37173:4;;37188:15;37206:11;37156:8;:62::i;:::-;37229:15;;:224;;-1:-1:-1;;;37229:224:0;;-1:-1:-1;;;;;37229:15:0;;;;:66;;:224;;37310:11;;37229:15;;37380:4;;37407;;37427:15;;37229:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37017:444;36961:500;:::o;37601:423::-;37715:15;;37683:62;;37700:4;;-1:-1:-1;;;;;37715:15:0;37733:11;37683:8;:62::i;:::-;37756:15;;:260;;-1:-1:-1;;;37756:260:0;;37828:4;37756:260;;;21822:34:1;21872:18;;;21865:34;;;37756:15:0;21915:18:1;;;21908:34;;;21958:18;;;21951:34;37968:6:0;22001:19:1;;;21994:44;37990:15:0;22054:19:1;;;22047:35;-1:-1:-1;;;;;37756:15:0;;;;:31;;37795:9;;21756:19:1;;37756:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11891:606::-;-1:-1:-1;;;;;12031:20:0;;12023:70;;;;-1:-1:-1;;;12023:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12112:23:0;;12104:71;;;;-1:-1:-1;;;12104:71:0;;;;;;;:::i;:::-;12264:108;12300:6;12264:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12264:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12244:17:0;;;;;;;:9;:17;;;;;;:128;;;;12406:20;;;;;;;:32;;12431:6;12406:24;:32::i;:::-;-1:-1:-1;;;;;12383:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12454:35;;;;;;;;;;12482:6;1972:25:1;;1960:2;1945:18;;1826:177;28167:1489:0;28312:13;:17;;-1:-1:-1;;28394:12:0;;;28419:436;;;;28467:23;;28451:13;:39;;28467:23;;;;-1:-1:-1;;28505:39:0;;;;;;;28467:23;28521;;;;;;28505:39;;;;;;;;-1:-1:-1;;28609:29:0;-1:-1:-1;;;28573:21:0;;;;28559:35;;;;-1:-1:-1;;28609:29:0;;-1:-1:-1;;;28620:18:0;;;;28609:29;;;;;;;;-1:-1:-1;;;;;28671:15:0;;-1:-1:-1;28671:15:0;;;:11;:15;;;;;;:20;:172;;-1:-1:-1;;;;;28828:15:0;;;;;;:11;:15;;;;;;28671:172;;;28711:22;28729:2;28711:9;:22::i;:::-;:27;:97;;-1:-1:-1;;;;;28793:15:0;;;;;;:11;:15;;;;;;28711:97;;;28758:15;28711:97;-1:-1:-1;;;;;28653:15:0;;;;;;:11;:15;;;;;:190;28419:436;28869:10;28865:234;;;28912:24;;28896:13;:40;;28912:24;;;;;;;;-1:-1:-1;;28951:40:0;;;;;;;28967:24;;;;;;28951:40;;;;;-1:-1:-1;;29057:30:0;-1:-1:-1;;;29020:22:0;;;;29006:36;;-1:-1:-1;;29057:30:0;;-1:-1:-1;;;29068:19:0;;;;;;;29057:30;;;;;;;28865:234;29114:10;29113:11;:27;;;;;29129:11;29128:12;29113:27;29109:251;;;29173:24;;29157:13;:40;;29173:24;;;;;;;;-1:-1:-1;;29212:40:0;;;;;;;29228:24;;;;;;29212:40;;;;;-1:-1:-1;;29318:30:0;-1:-1:-1;;;29281:22:0;;;;29267:36;;-1:-1:-1;;29318:30:0;;-1:-1:-1;;;29329:19:0;;;;;;;29318:30;;;;;;;29109:251;29370:34;29382:11;29395:4;29401:2;29370:11;:34::i;:::-;29473:8;;;;;;;;;29459:11;;;;;;29427:29;;29473:8;29443:13;;;;;29427;:29;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;29415:9;:66;;;;;;-1:-1:-1;;;29415:66:0;;;-1:-1:-1;;29415:66:0;;;;;;;;29497:151;;;29523:13;;;;;;;;;;22643:36:1;;29415:66:0;29551:13;;;;22710:2:1;22695:18;;22688:45;29579:11:0;;;;;22749:18:1;;;22742:45;29605:8:0;;;;;22818:2:1;22803:18;;22796:45;29628:9:0;;;;;22872:3:1;22857:19;;22850:46;29497:151:0;;;;;;;22630:3:1;29497:151:0;;;28167:1489;;;;:::o;2876:136::-;2934:7;2961:43;2965:1;2968;2961:43;;;;;;;;;;;;;;;;;:3;:43::i;29664:398::-;-1:-1:-1;;;;;29766:16:0;;;;;;:54;;-1:-1:-1;;;;;;29799:21:0;;29813:6;29799:21;;29766:54;:96;;;;-1:-1:-1;;;;;;29838:24:0;;;;;;:18;:24;;;;;;;;29837:25;29766:96;:136;;;;-1:-1:-1;;;;;;29880:22:0;;;;;;:18;:22;;;;;;;;29879:23;29766:136;29748:307;;;29934:11;29933:12;:26;;;;-1:-1:-1;29950:9:0;;;;29949:10;29933:26;29929:115;;;30017:11;;-1:-1:-1;;;;;29997:17:0;;;;;;:11;:17;;;;;;:31;;30017:11;29997:31;:::i;:::-;29980:14;:48;29664: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;1215:383::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:52;;;1377:1;1374;1367:12;1329:52;1416:9;1403:23;1435:31;1460:5;1435:31;:::i;:::-;1485:5;1537:2;1522:18;;1509:32;;-1:-1:-1;1588:2:1;1573:18;;;1560:32;;1215:383;-1:-1:-1;;;1215:383:1:o;2008:247::-;2067:6;2120:2;2108:9;2099:7;2095:23;2091:32;2088:52;;;2136:1;2133;2126:12;2088:52;2175:9;2162:23;2194:31;2219:5;2194:31;:::i;2260:180::-;2319:6;2372:2;2360:9;2351:7;2347:23;2343:32;2340:52;;;2388:1;2385;2378:12;2340:52;-1:-1:-1;2411:23:1;;2260:180;-1:-1:-1;2260:180:1:o;2445:456::-;2522:6;2530;2538;2591:2;2579:9;2570:7;2566:23;2562:32;2559:52;;;2607:1;2604;2597:12;2559:52;2646:9;2633:23;2665:31;2690:5;2665:31;:::i;:::-;2715:5;-1:-1:-1;2772:2:1;2757:18;;2744:32;2785:33;2744:32;2785:33;:::i;:::-;2445:456;;2837:7;;-1:-1:-1;;;2891:2:1;2876:18;;;;2863:32;;2445:456::o;3095:388::-;3163:6;3171;3224:2;3212:9;3203:7;3199:23;3195:32;3192:52;;;3240:1;3237;3230:12;3192:52;3279:9;3266:23;3298:31;3323:5;3298:31;:::i;:::-;3348:5;-1:-1:-1;3405:2:1;3390:18;;3377:32;3418:33;3377:32;3418:33;:::i;:::-;3470:7;3460:17;;;3095:388;;;;;:::o;3696:156::-;3762:20;;3822:4;3811:16;;3801:27;;3791:55;;3842:1;3839;3832:12;3791:55;3696:156;;;:::o;3857:393::-;3935:6;3943;3951;3959;4012:3;4000:9;3991:7;3987:23;3983:33;3980:53;;;4029:1;4026;4019:12;3980:53;4052:27;4069:9;4052:27;:::i;:::-;4042:37;;4098:36;4130:2;4119:9;4115:18;4098:36;:::i;:::-;4088:46;;4153:36;4185:2;4174:9;4170:18;4153:36;:::i;:::-;4143:46;;4208:36;4240:2;4229:9;4225:18;4208:36;:::i;:::-;4198:46;;3857:393;;;;;;;:::o;4255:416::-;4320:6;4328;4381:2;4369:9;4360:7;4356:23;4352:32;4349:52;;;4397:1;4394;4387:12;4349:52;4436:9;4423:23;4455:31;4480:5;4455:31;:::i;:::-;4505:5;-1:-1:-1;4562:2:1;4547:18;;4534:32;4604:15;;4597:23;4585:36;;4575:64;;4635:1;4632;4625:12;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;5904:356::-;6106:2;6088:21;;;6125:18;;;6118:30;6184:34;6179:2;6164:18;;6157:62;6251:2;6236:18;;5904:356::o;6265:127::-;6326:10;6321:3;6317:20;6314:1;6307:31;6357:4;6354:1;6347:15;6381:4;6378:1;6371:15;6397:168;6470:9;;;6501;;6518:15;;;6512:22;;6498:37;6488:71;;6539:18;;:::i;6570:127::-;6631:10;6626:3;6622:20;6619:1;6612:31;6662:4;6659:1;6652:15;6686:4;6683:1;6676:15;6702:120;6742:1;6768;6758:35;;6773:18;;:::i;:::-;-1:-1:-1;6807:9:1;;6702:120::o;9312:148::-;9400:4;9379:12;;;9393;;;9375:31;;9418:13;;9415:39;;;9434:18;;:::i;10087:406::-;10289:2;10271:21;;;10328:2;10308:18;;;10301:30;10367:34;10362:2;10347:18;;10340:62;-1:-1:-1;;;10433:2:1;10418:18;;10411:40;10483:3;10468:19;;10087:406::o;11945:125::-;12010:9;;;12031:10;;;12028:36;;;12044:18;;:::i;13239:128::-;13306:9;;;13327:11;;;13324:37;;;13341:18;;:::i;13372:165::-;13410:1;13444:4;13441:1;13437:12;13468:3;13458:37;;13475:18;;:::i;:::-;13527:3;13520:4;13517:1;13513:12;13509:22;13504:27;;;13372:165;;;;:::o;13542:151::-;13632:4;13625:12;;;13611;;;13607:31;;13650:14;;13647:40;;;13667:18;;:::i;14232:401::-;14434:2;14416:21;;;14473:2;14453:18;;;14446:30;14512:34;14507:2;14492:18;;14485:62;-1:-1:-1;;;14578:2:1;14563:18;;14556:35;14623:3;14608:19;;14232:401::o;14638:399::-;14840:2;14822:21;;;14879:2;14859:18;;;14852:30;14918:34;14913:2;14898:18;;14891:62;-1:-1:-1;;;14984:2:1;14969:18;;14962:33;15027:3;15012:19;;14638:399::o;17862:209::-;-1:-1:-1;;18026:38:1;;;;18008:57;;17996:2;17981:18;;17862:209::o;20108:127::-;20169:10;20164:3;20160:20;20157:1;20150:31;20200:4;20197:1;20190:15;20224:4;20221:1;20214:15;20240:251;20310:6;20363:2;20351:9;20342:7;20338:23;20334:32;20331:52;;;20379:1;20376;20369:12;20331:52;20411:9;20405:16;20430:31;20455:5;20430:31;:::i;20496:980::-;20758:4;20806:3;20795:9;20791:19;20837:6;20826:9;20819:25;20863:2;20901:6;20896:2;20885:9;20881:18;20874:34;20944:3;20939:2;20928:9;20924:18;20917:31;20968:6;21003;20997:13;21034:6;21026;21019:22;21072:3;21061:9;21057:19;21050:26;;21111:2;21103:6;21099:15;21085:29;;21132:1;21142:195;21156:6;21153:1;21150:13;21142:195;;;21221:13;;-1:-1:-1;;;;;21217:39:1;21205:52;;21312:15;;;;21277:12;;;;21253:1;21171:9;21142:195;;;-1:-1:-1;;;;;;;21393:32:1;;;;21388:2;21373:18;;21366:60;-1:-1:-1;;;21457:3:1;21442:19;21435:35;21354:3;20496:980;-1:-1:-1;;;20496:980:1:o;22093:306::-;22181:6;22189;22197;22250:2;22238:9;22229:7;22225:23;22221:32;22218:52;;;22266:1;22263;22256:12;22218:52;22295:9;22289:16;22279:26;;22345:2;22334:9;22330:18;22324:25;22314:35;;22389:2;22378:9;22374:18;22368:25;22358:35;;22093:306;;;;;:::o

Swarm Source

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