ETH Price: $3,419.54 (-1.63%)
Gas: 7 Gwei

Token

UNLIMITED (ULED)
 

Overview

Max Total Supply

999,000,000,000 ULED

Holders

62

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,863,793,641.452294241205477134 ULED

Value
$0.00
0x1cca146Ae9f4569b1695b1B4Cf5212e1711FAf24
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:
UNLIMITED

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-22
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

// Web:        https://www.unlimitedproject.org
// Litepaper:  https://docs.unlimitedproject.org/
// Twitter:    https://twitter.com/ULED_PROJECT
// Git:        https://github.com/unlimited-project

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address 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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
    unchecked {
        _approve(sender, _msgSender(), currentAllowance - amount);
    }

        return true;
    }

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

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

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
    unchecked {
        _balances[sender] = senderBalance - amount;
    }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

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() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

contract UNLIMITED is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public ProtocolAddress;
    address public RewardsAddress;

    uint256 public tradingActiveBlock = 0; 
    uint256 public deadBlocks = 0;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyProtocolFee;
    uint256 public buyLiquidityFee;
    uint256 public buyRewardsFee;

    uint256 public sellTotalFees;
    uint256 public sellProtocolFee;
    uint256 public sellLiquidityFee;
    uint256 public sellRewardsFee;

    uint256 public tokensForProtocol;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRewards;


    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading(bool tradingActive, uint256 deadBlocks);
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedProtocolAddress(address indexed newWallet);

    event UpdatedRewardsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("UNLIMITED", "ULED") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 999000000000 * 1e18;

        maxBuyAmount = totalSupply *  9 / 1000;
        maxSellAmount = totalSupply *  9 / 1000;
        maxWalletAmount = totalSupply * 18 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyProtocolFee = 0;
        buyRewardsFee = 20;
        buyLiquidityFee = 0;
        buyTotalFees = buyProtocolFee + buyLiquidityFee + buyRewardsFee;

        sellProtocolFee = 0;
        sellLiquidityFee = 0;
        sellRewardsFee = 20;
        sellTotalFees = sellProtocolFee + sellLiquidityFee + sellRewardsFee;

        ProtocolAddress = address(0x84C3c1b4199f22Ec104466BE57a0E60C4C7116C7);
        RewardsAddress = address(0x84C3c1b4199f22Ec104466BE57a0E60C4C7116C7);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading(bool _status, uint256 _deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot re enable trading");
        tradingActive = _status;
        swapEnabled = true;
        emit EnabledTrading(tradingActive, _deadBlocks);

        if (tradingActive && tradingActiveBlock == 0) {
            tradingActiveBlock = block.number;
            deadBlocks = _deadBlocks;
        }
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }


    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e18, "Cannot set max wallet amount lower than 0.3%");
        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != uniswapV2Pair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _protocolFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        buyProtocolFee = _protocolFee;
        buyLiquidityFee = _liquidityFee;
        buyRewardsFee = _rewardsFee;
        buyTotalFees = buyProtocolFee + buyLiquidityFee + buyRewardsFee;
        require(buyTotalFees <= 70, "Must keep fees at 70% or less");
    }

    function updateSellFees(uint256 _protocolFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        sellProtocolFee = _protocolFee;
        sellLiquidityFee = _liquidityFee;
        sellRewardsFee = _rewardsFee;
        sellTotalFees = sellProtocolFee + sellLiquidityFee + sellRewardsFee;
        require(sellTotalFees <= 70, "Must keep fees at 70% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }


    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");
        require(amount > 0, "amount must be greater than 0");

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
                    require(from == owner(), "Trading is enabled");
                }

                if (tradingActiveBlock > 0 && block.number < (tradingActiveBlock + deadBlocks) ) {
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on Trades, not on wallet transfers

        if(takeFee){
            if(tradingActiveBlock>0 && (tradingActiveBlock + 0) > block.number){
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForProtocol += fees * sellProtocolFee / sellTotalFees;
                tokensForRewards += fees * sellRewardsFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForProtocol += fees * buyProtocolFee / buyTotalFees;
                tokensForRewards += fees * buyRewardsFee / buyTotalFees;
            }

            if(fees > 0){
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

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

    function multiTransferCall(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + (tokens[i] * 10**decimals());
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens[i] * 10**decimals()));
        
        }
    }

    function multiTransferConstant(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {
        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow
        uint256 SCCC = tokens* 10**decimals() * addresses.length;
        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens* 10**decimals()));
            }
    }   

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForProtocol + tokensForRewards;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForProtocol = ethBalance * tokensForProtocol / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForRewards = ethBalance * tokensForRewards / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForProtocol + ethForRewards;

        tokensForLiquidity = 0;
        tokensForProtocol = 0;
        tokensForRewards = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(RewardsAddress).call{value: ethForRewards}("");

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

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setProtocolAddress(address _ProtocolAddress) external onlyOwner {
        require(_ProtocolAddress != address(0), "_ProtocolAddress address cannot be 0");
        ProtocolAddress = payable(_ProtocolAddress);
        emit UpdatedProtocolAddress(_ProtocolAddress);
    }

    function setRewardsAddress(address _RewardsAddress) external onlyOwner {
        require(_RewardsAddress != address(0), "_RewardsAddress address cannot be 0");
        RewardsAddress = payable(_RewardsAddress);
        emit UpdatedRewardsAddress(_RewardsAddress);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"tradingActive","type":"bool"},{"indexed":false,"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedProtocolAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedRewardsAddress","type":"event"},{"inputs":[],"name":"ProtocolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RewardsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransferCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransferConstant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ProtocolAddress","type":"address"}],"name":"setProtocolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_RewardsAddress","type":"address"}],"name":"setRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForProtocol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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 IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protocolFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protocolFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f600d819055600e55600f805462ffffff1916600117905534801562000028575f80fd5b506040518060400160405280600981526020016815539312535255115160ba1b815250604051806040016040528060048152602001631553115160e21b8152508160039081620000799190620007ee565b506004620000888282620007ee565b5050505f6200009c620003f660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f8051602062003e97833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa816001620003fa565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000143573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001699190620008b6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001db9190620008b6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000226573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200024c9190620008b6565b6001600160a01b031660a0819052620002679060016200045c565b6c0c9bf16e93a6a46dad580000006103e862000285826009620008f9565b62000291919062000919565b6006556103e8620002a4826009620008f9565b620002b0919062000919565b6007556103e8620002c3826012620008f9565b620002cf919062000919565b600855620186a0620002e3826019620008f9565b620002ef919062000919565b600a555f60118190556014601381905560128290559062000311908062000939565b6200031d919062000939565b6010555f6015819055601681905560146017819055906200033f908062000939565b6200034b919062000939565b601455600b80547384c3c1b4199f22ec104466be57a0e60c4c7116c76001600160a01b03199182168117909255600c8054909116909117905562000391836001620003fa565b6200039e306001620003fa565b620003ad61dead6001620003fa565b620003ba836001620004c6565b620003c7306001620004c6565b620003d661dead6001620004c6565b620003e2838262000572565b620003ed8362000654565b5050506200094f565b3390565b6001600160a01b0382165f818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382165f908152601d60205260409020805460ff19168215151790556200048b8282620003fa565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b03163314620005145760405162461bcd60e51b815260206004820181905260248201525f8051602062003e7783398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005ca5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200050b565b8060025f828254620005dd919062000939565b90915550506001600160a01b0382165f90815260208190526040812080548392906200060b90849062000939565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200069e5760405162461bcd60e51b815260206004820181905260248201525f8051602062003e7783398151915260448201526064016200050b565b6001600160a01b038116620007055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200050b565b6005546040516001600160a01b038084169216905f8051602062003e97833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200077757607f821691505b6020821081036200079657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007e9575f81815260208120601f850160051c81016020861015620007c45750805b601f850160051c820191505b81811015620007e557828155600101620007d0565b5050505b505050565b81516001600160401b038111156200080a576200080a6200074e565b62000822816200081b845462000762565b846200079c565b602080601f83116001811462000858575f8415620008405750858301515b5f19600386901b1c1916600185901b178555620007e5565b5f85815260208120601f198616915b82811015620008885788860151825594840194600190910190840162000867565b5085821015620008a657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620008c7575f80fd5b81516001600160a01b0381168114620008de575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620009135762000913620008e5565b92915050565b5f826200093457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620009135762000913620008e5565b60805160a0516134d5620009a25f395f81816105230152818161113b01526117cf01525f818161040c01528181612c0801528181612cbf01528181612cfb01528181612d670152612d8e01526134d55ff3fe608060405260043610610369575f3560e01c80638da5cb5b116101c8578063c18bc195116100fd578063e2f456051161009d578063f54afa781161006d578063f54afa78146109c4578063f5648a4f146109d9578063f6374342146109ed578063fabb0b4f14610a02575f80fd5b8063e2f4560514610966578063ee40166e1461097b578063f11a24d314610990578063f2fde38b146109a5575f80fd5b8063d85ba063116100d8578063d85ba063146108d9578063dc3f0d0f146108ee578063dd62ed3e1461090d578063e2a7797e14610951575f80fd5b8063c18bc19514610886578063cc2b7657146108a5578063d257b34f146108ba575f80fd5b8063aa4bde2811610168578063bbc0c74211610143578063bbc0c7421461080b578063c024666814610829578063c054f2f414610848578063c17b5b8c14610867575f80fd5b8063aa4bde28146107b3578063b62496f5146107c8578063bb8d5131146107f6575f80fd5b80639a7a23d6116101a35780639a7a23d6146107375780639be637db14610756578063a457c2d714610775578063a9059cbb14610794575f80fd5b80638da5cb5b146106f157806395d89b411461070e5780639a6bed2514610722575f80fd5b80635e83ae761161029e5780637571336a1161023e5780638366e79a116102195780638366e79a1461067f57806387c3e8a61461069e57806388e765ff146106bd5780638906758d146106d2575f80fd5b80637571336a1461062c57806377a3b6091461064b5780638095d56414610660575f80fd5b80636ddd1713116102795780636ddd1713146105c657806370a08231146105e5578063715018a614610604578063751039fc14610618575f80fd5b80635e83ae761461057d57806366d602ae1461059c5780636a486a8e146105b1575f80fd5b80632435f8451161030957806339509351116102e457806339509351146104f357806349bd5a5e146105125780634a62bb651461054557806358e470041461055e575f80fd5b80632435f845146104985780632be32b61146104b9578063313ce567146104d8575f80fd5b80631694505e116103445780631694505e146103fb57806318160ddd146104465780631a8145bb1461046457806323b872dd14610479575f80fd5b806306fdde0314610374578063095ea7b31461039e57806310d5de53146103cd575f80fd5b3661037057005b5f80fd5b34801561037f575f80fd5b50610388610a17565b6040516103959190612e64565b60405180910390f35b3480156103a9575f80fd5b506103bd6103b8366004612ec6565b610aa7565b6040519015158152602001610395565b3480156103d8575f80fd5b506103bd6103e7366004612ef0565b601c6020525f908152604090205460ff1681565b348015610406575f80fd5b5061042e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610395565b348015610451575f80fd5b506002545b604051908152602001610395565b34801561046f575f80fd5b5061045660195481565b348015610484575f80fd5b506103bd610493366004612f12565b610abd565b3480156104a3575f80fd5b506104b76104b2366004612f98565b610b6a565b005b3480156104c4575f80fd5b506104b76104d3366004612ff0565b610ce2565b3480156104e3575f80fd5b5060405160128152602001610395565b3480156104fe575f80fd5b506103bd61050d366004612ec6565b610def565b34801561051d575f80fd5b5061042e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610550575f80fd5b50600f546103bd9060ff1681565b348015610569575f80fd5b506104b7610578366004612ef0565b610e2a565b348015610588575f80fd5b506104b7610597366004613014565b610eff565b3480156105a7575f80fd5b5061045660075481565b3480156105bc575f80fd5b5061045660145481565b3480156105d1575f80fd5b50600f546103bd9062010000900460ff1681565b3480156105f0575f80fd5b506104566105ff366004612ef0565b61101f565b34801561060f575f80fd5b506104b7611039565b348015610623575f80fd5b506104b76110ac565b348015610637575f80fd5b506104b7610646366004613030565b61110a565b348015610656575f80fd5b5061045660135481565b34801561066b575f80fd5b506104b761067a366004613067565b6111f4565b34801561068a575f80fd5b506103bd610699366004613090565b61129c565b3480156106a9575f80fd5b506104b76106b83660046130bc565b61149e565b3480156106c8575f80fd5b5061045660065481565b3480156106dd575f80fd5b506104b76106ec366004612ef0565b6116bf565b3480156106fc575f80fd5b506005546001600160a01b031661042e565b348015610719575f80fd5b50610388611794565b34801561072d575f80fd5b5061045660185481565b348015610742575f80fd5b506104b7610751366004613030565b6117a3565b348015610761575f80fd5b50600b5461042e906001600160a01b031681565b348015610780575f80fd5b506103bd61078f366004612ec6565b61187e565b34801561079f575f80fd5b506103bd6107ae366004612ec6565b611916565b3480156107be575f80fd5b5061045660085481565b3480156107d3575f80fd5b506103bd6107e2366004612ef0565b601d6020525f908152604090205460ff1681565b348015610801575f80fd5b5061045660175481565b348015610816575f80fd5b50600f546103bd90610100900460ff1681565b348015610834575f80fd5b506104b7610843366004613030565b611922565b348015610853575f80fd5b50600c5461042e906001600160a01b031681565b348015610872575f80fd5b506104b7610881366004613067565b6119aa565b348015610891575f80fd5b506104b76108a0366004612ff0565b611a4d565b3480156108b0575f80fd5b5061045660115481565b3480156108c5575f80fd5b506104b76108d4366004612ff0565b611b56565b3480156108e4575f80fd5b5061045660105481565b3480156108f9575f80fd5b506104b7610908366004612ff0565b611ca1565b348015610918575f80fd5b50610456610927366004613090565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561095c575f80fd5b5061045660155481565b348015610971575f80fd5b50610456600a5481565b348015610986575f80fd5b50610456600d5481565b34801561099b575f80fd5b5061045660125481565b3480156109b0575f80fd5b506104b76109bf366004612ef0565b611da8565b3480156109cf575f80fd5b50610456601a5481565b3480156109e4575f80fd5b506104b7611e92565b3480156109f8575f80fd5b5061045660165481565b348015610a0d575f80fd5b50610456600e5481565b606060038054610a2690613139565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290613139565b8015610a9d5780601f10610a7457610100808354040283529160200191610a9d565b820191905f5260205f20905b815481529060010190602001808311610a8057829003601f168201915b5050505050905090565b5f610ab3338484611f06565b5060015b92915050565b5f610ac9848484612029565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610b525760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b5f8533858403611f06565b506001949350505050565b6005546001600160a01b03163314610b945760405162461bcd60e51b8152600401610b4990613171565b6107d18210610bfc5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b49565b5f82610c0a6012600a61329a565b610c1490846132a8565b610c1e91906132a8565b905080610c2a8661101f565b1015610c785760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b49565b5f5b83811015610cda57610cc886868684818110610c9857610c986132bf565b9050602002016020810190610cad9190612ef0565b610cb96012600a61329a565b610cc390876132a8565b612029565b80610cd2816132d3565b915050610c7a565b505050505050565b6005546001600160a01b03163314610d0c5760405162461bcd60e51b8152600401610b4990613171565b670de0b6b3a76400006103e8610d2160025490565b610d2c9060016132a8565b610d3691906132eb565b610d4091906132eb565b811015610da15760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b49565b610db381670de0b6b3a76400006132a8565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610ab3918590610e2590869061330a565b611f06565b6005546001600160a01b03163314610e545760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b038116610eb65760405162461bcd60e51b8152602060048201526024808201527f5f50726f746f636f6c4164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610b49565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fb261c95c6bb0e2d30b7a67f2f01a3a6931ab95f4c2921343fd44df89500856f2905f90a250565b6005546001600160a01b03163314610f295760405162461bcd60e51b8152600401610b4990613171565b600f54610100900460ff1615610f815760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610b49565b600f805462ff0000198415156101009081029190911662ffff0019909216919091176201000017918290556040517fe185248899f361d51a48833938ab33493ebd7272d195abf7f51a833ea813881292610fed92900460ff169084909115158252602082015260400190565b60405180910390a1600f54610100900460ff16801561100c5750600d54155b1561101b5743600d55600e8190555b5050565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b031633146110635760405162461bcd60e51b8152600401610b4990613171565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110d65760405162461bcd60e51b8152600401610b4990613171565b600f805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146111345760405162461bcd60e51b8152600401610b4990613171565b806111ca577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111ca5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b49565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610b4990613171565b60118390556012829055601381905580611238838561330a565b611242919061330a565b6010819055604610156112975760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420373025206f72206c6573730000006044820152606401610b49565b505050565b6005545f906001600160a01b031633146112c85760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b03831661131e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b49565b306001600160a01b038416036113765760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b49565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156113ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de919061331d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af115801561142e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114529190613334565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146114c85760405162461bcd60e51b8152600401610b4990613171565b610321831061152f5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b49565b82811461158f5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b49565b5f805b848110156115e7576115a66012600a61329a565b8484838181106115b8576115b86132bf565b905060200201356115c991906132a8565b6115d3908361330a565b9150806115df816132d3565b915050611592565b50806115f28761101f565b10156116405760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b49565b5f5b848110156116b6576116a487878784818110611660576116606132bf565b90506020020160208101906116759190612ef0565b6116816012600a61329a565b878786818110611693576116936132bf565b90506020020135610cc391906132a8565b806116ae816132d3565b915050611642565b50505050505050565b6005546001600160a01b031633146116e95760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b03811661174b5760405162461bcd60e51b815260206004820152602360248201527f5f526577617264734164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610b49565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f647cd1cbe5341aa880069f5c966ac6cf0ed473b7c0bf494fb7fc7ca46dc4cc78905f90a250565b606060048054610a2690613139565b6005546001600160a01b031633146117cd5760405162461bcd60e51b8152600401610b4990613171565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036118745760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b49565b61101b828261279d565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156118ff5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b49565b61190c3385858403611f06565b5060019392505050565b5f610ab3338484612029565b6005546001600160a01b0316331461194c5760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119d45760405162461bcd60e51b8152600401610b4990613171565b601583905560168290556017819055806119ee838561330a565b6119f8919061330a565b6014819055604610156112975760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420373025206f72206c6573730000006044820152606401610b49565b6005546001600160a01b03163314611a775760405162461bcd60e51b8152600401610b4990613171565b670de0b6b3a76400006103e8611a8c60025490565b611a979060036132a8565b611aa191906132eb565b611aab91906132eb565b811015611b0f5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610b49565b611b2181670de0b6b3a76400006132a8565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610de4565b6005546001600160a01b03163314611b805760405162461bcd60e51b8152600401610b4990613171565b620186a0611b8d60025490565b611b989060016132a8565b611ba291906132eb565b811015611c0f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b49565b6103e8611c1b60025490565b611c269060016132a8565b611c3091906132eb565b811115611c9c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b49565b600a55565b6005546001600160a01b03163314611ccb5760405162461bcd60e51b8152600401610b4990613171565b670de0b6b3a76400006103e8611ce060025490565b611ceb9060016132a8565b611cf591906132eb565b611cff91906132eb565b811015611d615760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b49565b611d7381670de0b6b3a76400006132a8565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610de4565b6005546001600160a01b03163314611dd25760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b038116611e375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b49565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ebc5760405162461bcd60e51b8152600401610b4990613171565b6040515f90339047908381818185875af1925050503d805f8114611efb576040519150601f19603f3d011682016040523d82523d5f602084013e611f00565b606091505b50505050565b6001600160a01b038316611f685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b49565b6001600160a01b038216611fc95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b49565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661204f5760405162461bcd60e51b8152600401610b499061334f565b6001600160a01b0382166120755760405162461bcd60e51b8152600401610b4990613394565b5f81116120c45760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b49565b600f5460ff1615612486576005546001600160a01b038481169116148015906120fb57506005546001600160a01b03838116911614155b801561210f57506001600160a01b03821615155b801561212657506001600160a01b03821661dead14155b1561248657600f54610100900460ff1661220e576001600160a01b0383165f908152601c602052604090205460ff168061217757506001600160a01b0382165f908152601c602052604090205460ff165b6121bc5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b49565b6005546001600160a01b0384811691161461220e5760405162461bcd60e51b8152602060048201526012602482015271151c98591a5b99c81a5cc8195b98589b195960721b6044820152606401610b49565b5f600d5411801561222d5750600e54600d5461222a919061330a565b43105b506001600160a01b0383165f908152601d602052604090205460ff16801561226d57506001600160a01b0382165f908152601c602052604090205460ff16155b15612339576006548111156122d55760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b49565b6008546122e18361101f565b6122eb908361330a565b11156123345760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b49565b612486565b6001600160a01b0382165f908152601d602052604090205460ff16801561237857506001600160a01b0383165f908152601c602052604090205460ff16155b156123e2576007548111156123345760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b49565b6001600160a01b0382165f908152601c602052604090205460ff1615801561242257506001600160a01b0383165f908152601c602052604090205460ff16155b15612486576008546124338361101f565b61243d908361330a565b11156124865760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b49565b5f6124903061101f565b600a54909150811080159081906124af5750600f5462010000900460ff165b80156124be575060095460ff16155b80156124e257506001600160a01b0385165f908152601d602052604090205460ff16155b801561250657506001600160a01b0385165f908152601b602052604090205460ff16155b801561252a57506001600160a01b0384165f908152601b602052604090205460ff16155b1561254f576009805460ff19166001179055612544612805565b6009805460ff191690555b6001600160a01b0385165f908152601b602052604090205460019060ff168061258f57506001600160a01b0385165f908152601b602052604090205460ff165b1561259757505f5b5f8115612792575f600d541180156125bb575043600d545f6125b9919061330a565b115b612774576001600160a01b0386165f908152601d602052604090205460ff1680156125e757505f601454115b1561269c576064601454866125fc91906132a8565b61260691906132eb565b90506014546016548261261991906132a8565b61262391906132eb565b60195f828254612633919061330a565b909155505060145460155461264890836132a8565b61265291906132eb565b60185f828254612662919061330a565b909155505060145460175461267790836132a8565b61268191906132eb565b601a5f828254612691919061330a565b909155506127749050565b6001600160a01b0387165f908152601d602052604090205460ff1680156126c457505f601054115b15612774576064601054866126d991906132a8565b6126e391906132eb565b9050601054601254826126f691906132a8565b61270091906132eb565b60195f828254612710919061330a565b909155505060105460115461272590836132a8565b61272f91906132eb565b60185f82825461273f919061330a565b909155505060105460135461275490836132a8565b61275e91906132eb565b601a5f82825461276e919061330a565b90915550505b8015612785576127858730836129fe565b61278f81866133d7565b94505b6116b68787876129fe565b6001600160a01b0382165f908152601d60205260409020805460ff19168215151790556127ca8282612b51565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b5f61280f3061101f565b90505f601a54601854601954612825919061330a565b61282f919061330a565b905081158061283c575080155b15612845575050565b600a8054612852916132a8565b82111561286957600a8054612866916132a8565b91505b5f806002836019548661287c91906132a8565b61288691906132eb565b61289091906132eb565b90506128a461289f82866133d7565b612bb3565b601954479081905f906128b9906002906132eb565b6128c390876133d7565b6018546128d090856132a8565b6128da91906132eb565b90505f60026019546128ec91906132eb565b6128f690886133d7565b601a5461290390866132a8565b61290d91906132eb565b9050612919818361330a565b61292390846133d7565b5f60198190556018819055601a559250841580159061294157505f83115b15612950576129508584612d61565b600c546040516001600160a01b039091169082905f81818185875af1925050503d805f811461299a576040519150601f19603f3d011682016040523d82523d5f602084013e61299f565b606091505b5050600b546040519197506001600160a01b03169047905f81818185875af1925050503d805f81146129ec576040519150601f19603f3d011682016040523d82523d5f602084013e6129f1565b606091505b5050505050505050505050565b6001600160a01b038316612a245760405162461bcd60e51b8152600401610b499061334f565b6001600160a01b038216612a4a5760405162461bcd60e51b8152600401610b4990613394565b6001600160a01b0383165f9081526020819052604090205481811015612ac15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b49565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612af790849061330a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b4391815260200190565b60405180910390a350505050565b6001600160a01b0382165f818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612be657612be66132bf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8691906133ea565b81600181518110612c9957612c996132bf565b60200260200101906001600160a01b031690816001600160a01b031681525050612ce4307f000000000000000000000000000000000000000000000000000000000000000084611f06565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612d389085905f90869030904290600401613405565b5f604051808303815f87803b158015612d4f575f80fd5b505af1158015610cda573d5f803e3d5ffd5b612d8c307f000000000000000000000000000000000000000000000000000000000000000084611f06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230855f80612dd26005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612e38573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612e5d9190613474565b5050505050565b5f6020808352835180828501525f5b81811015612e8f57858101830151858201604001528201612e73565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612ec3575f80fd5b50565b5f8060408385031215612ed7575f80fd5b8235612ee281612eaf565b946020939093013593505050565b5f60208284031215612f00575f80fd5b8135612f0b81612eaf565b9392505050565b5f805f60608486031215612f24575f80fd5b8335612f2f81612eaf565b92506020840135612f3f81612eaf565b929592945050506040919091013590565b5f8083601f840112612f60575f80fd5b50813567ffffffffffffffff811115612f77575f80fd5b6020830191508360208260051b8501011115612f91575f80fd5b9250929050565b5f805f8060608587031215612fab575f80fd5b8435612fb681612eaf565b9350602085013567ffffffffffffffff811115612fd1575f80fd5b612fdd87828801612f50565b9598909750949560400135949350505050565b5f60208284031215613000575f80fd5b5035919050565b8015158114612ec3575f80fd5b5f8060408385031215613025575f80fd5b8235612ee281613007565b5f8060408385031215613041575f80fd5b823561304c81612eaf565b9150602083013561305c81613007565b809150509250929050565b5f805f60608486031215613079575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156130a1575f80fd5b82356130ac81612eaf565b9150602083013561305c81612eaf565b5f805f805f606086880312156130d0575f80fd5b85356130db81612eaf565b9450602086013567ffffffffffffffff808211156130f7575f80fd5b61310389838a01612f50565b9096509450604088013591508082111561311b575f80fd5b5061312888828901612f50565b969995985093965092949392505050565b600181811c9082168061314d57607f821691505b60208210810361316b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156131f457815f19048211156131da576131da6131a6565b808516156131e757918102915b93841c93908002906131bf565b509250929050565b5f8261320a57506001610ab7565b8161321657505f610ab7565b816001811461322c576002811461323657613252565b6001915050610ab7565b60ff841115613247576132476131a6565b50506001821b610ab7565b5060208310610133831016604e8410600b8410161715613275575081810a610ab7565b61327f83836131ba565b805f1904821115613292576132926131a6565b029392505050565b5f612f0b60ff8416836131fc565b8082028115828204841417610ab757610ab76131a6565b634e487b7160e01b5f52603260045260245ffd5b5f600182016132e4576132e46131a6565b5060010190565b5f8261330557634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610ab757610ab76131a6565b5f6020828403121561332d575f80fd5b5051919050565b5f60208284031215613344575f80fd5b8151612f0b81613007565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ab757610ab76131a6565b5f602082840312156133fa575f80fd5b8151612f0b81612eaf565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156134535784516001600160a01b03168352938301939183019160010161342e565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613486575f80fd5b835192506020840151915060408401519050925092509256fea264697066735822122066c95153175cc530425ce06d21a02c47ec859163c70dac7dde42a4c09631ed7464736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x608060405260043610610369575f3560e01c80638da5cb5b116101c8578063c18bc195116100fd578063e2f456051161009d578063f54afa781161006d578063f54afa78146109c4578063f5648a4f146109d9578063f6374342146109ed578063fabb0b4f14610a02575f80fd5b8063e2f4560514610966578063ee40166e1461097b578063f11a24d314610990578063f2fde38b146109a5575f80fd5b8063d85ba063116100d8578063d85ba063146108d9578063dc3f0d0f146108ee578063dd62ed3e1461090d578063e2a7797e14610951575f80fd5b8063c18bc19514610886578063cc2b7657146108a5578063d257b34f146108ba575f80fd5b8063aa4bde2811610168578063bbc0c74211610143578063bbc0c7421461080b578063c024666814610829578063c054f2f414610848578063c17b5b8c14610867575f80fd5b8063aa4bde28146107b3578063b62496f5146107c8578063bb8d5131146107f6575f80fd5b80639a7a23d6116101a35780639a7a23d6146107375780639be637db14610756578063a457c2d714610775578063a9059cbb14610794575f80fd5b80638da5cb5b146106f157806395d89b411461070e5780639a6bed2514610722575f80fd5b80635e83ae761161029e5780637571336a1161023e5780638366e79a116102195780638366e79a1461067f57806387c3e8a61461069e57806388e765ff146106bd5780638906758d146106d2575f80fd5b80637571336a1461062c57806377a3b6091461064b5780638095d56414610660575f80fd5b80636ddd1713116102795780636ddd1713146105c657806370a08231146105e5578063715018a614610604578063751039fc14610618575f80fd5b80635e83ae761461057d57806366d602ae1461059c5780636a486a8e146105b1575f80fd5b80632435f8451161030957806339509351116102e457806339509351146104f357806349bd5a5e146105125780634a62bb651461054557806358e470041461055e575f80fd5b80632435f845146104985780632be32b61146104b9578063313ce567146104d8575f80fd5b80631694505e116103445780631694505e146103fb57806318160ddd146104465780631a8145bb1461046457806323b872dd14610479575f80fd5b806306fdde0314610374578063095ea7b31461039e57806310d5de53146103cd575f80fd5b3661037057005b5f80fd5b34801561037f575f80fd5b50610388610a17565b6040516103959190612e64565b60405180910390f35b3480156103a9575f80fd5b506103bd6103b8366004612ec6565b610aa7565b6040519015158152602001610395565b3480156103d8575f80fd5b506103bd6103e7366004612ef0565b601c6020525f908152604090205460ff1681565b348015610406575f80fd5b5061042e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610395565b348015610451575f80fd5b506002545b604051908152602001610395565b34801561046f575f80fd5b5061045660195481565b348015610484575f80fd5b506103bd610493366004612f12565b610abd565b3480156104a3575f80fd5b506104b76104b2366004612f98565b610b6a565b005b3480156104c4575f80fd5b506104b76104d3366004612ff0565b610ce2565b3480156104e3575f80fd5b5060405160128152602001610395565b3480156104fe575f80fd5b506103bd61050d366004612ec6565b610def565b34801561051d575f80fd5b5061042e7f00000000000000000000000072d6e62c54cb41f316ca79015a7ebb2cb2153cf781565b348015610550575f80fd5b50600f546103bd9060ff1681565b348015610569575f80fd5b506104b7610578366004612ef0565b610e2a565b348015610588575f80fd5b506104b7610597366004613014565b610eff565b3480156105a7575f80fd5b5061045660075481565b3480156105bc575f80fd5b5061045660145481565b3480156105d1575f80fd5b50600f546103bd9062010000900460ff1681565b3480156105f0575f80fd5b506104566105ff366004612ef0565b61101f565b34801561060f575f80fd5b506104b7611039565b348015610623575f80fd5b506104b76110ac565b348015610637575f80fd5b506104b7610646366004613030565b61110a565b348015610656575f80fd5b5061045660135481565b34801561066b575f80fd5b506104b761067a366004613067565b6111f4565b34801561068a575f80fd5b506103bd610699366004613090565b61129c565b3480156106a9575f80fd5b506104b76106b83660046130bc565b61149e565b3480156106c8575f80fd5b5061045660065481565b3480156106dd575f80fd5b506104b76106ec366004612ef0565b6116bf565b3480156106fc575f80fd5b506005546001600160a01b031661042e565b348015610719575f80fd5b50610388611794565b34801561072d575f80fd5b5061045660185481565b348015610742575f80fd5b506104b7610751366004613030565b6117a3565b348015610761575f80fd5b50600b5461042e906001600160a01b031681565b348015610780575f80fd5b506103bd61078f366004612ec6565b61187e565b34801561079f575f80fd5b506103bd6107ae366004612ec6565b611916565b3480156107be575f80fd5b5061045660085481565b3480156107d3575f80fd5b506103bd6107e2366004612ef0565b601d6020525f908152604090205460ff1681565b348015610801575f80fd5b5061045660175481565b348015610816575f80fd5b50600f546103bd90610100900460ff1681565b348015610834575f80fd5b506104b7610843366004613030565b611922565b348015610853575f80fd5b50600c5461042e906001600160a01b031681565b348015610872575f80fd5b506104b7610881366004613067565b6119aa565b348015610891575f80fd5b506104b76108a0366004612ff0565b611a4d565b3480156108b0575f80fd5b5061045660115481565b3480156108c5575f80fd5b506104b76108d4366004612ff0565b611b56565b3480156108e4575f80fd5b5061045660105481565b3480156108f9575f80fd5b506104b7610908366004612ff0565b611ca1565b348015610918575f80fd5b50610456610927366004613090565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561095c575f80fd5b5061045660155481565b348015610971575f80fd5b50610456600a5481565b348015610986575f80fd5b50610456600d5481565b34801561099b575f80fd5b5061045660125481565b3480156109b0575f80fd5b506104b76109bf366004612ef0565b611da8565b3480156109cf575f80fd5b50610456601a5481565b3480156109e4575f80fd5b506104b7611e92565b3480156109f8575f80fd5b5061045660165481565b348015610a0d575f80fd5b50610456600e5481565b606060038054610a2690613139565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290613139565b8015610a9d5780601f10610a7457610100808354040283529160200191610a9d565b820191905f5260205f20905b815481529060010190602001808311610a8057829003601f168201915b5050505050905090565b5f610ab3338484611f06565b5060015b92915050565b5f610ac9848484612029565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610b525760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b5f8533858403611f06565b506001949350505050565b6005546001600160a01b03163314610b945760405162461bcd60e51b8152600401610b4990613171565b6107d18210610bfc5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b49565b5f82610c0a6012600a61329a565b610c1490846132a8565b610c1e91906132a8565b905080610c2a8661101f565b1015610c785760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b49565b5f5b83811015610cda57610cc886868684818110610c9857610c986132bf565b9050602002016020810190610cad9190612ef0565b610cb96012600a61329a565b610cc390876132a8565b612029565b80610cd2816132d3565b915050610c7a565b505050505050565b6005546001600160a01b03163314610d0c5760405162461bcd60e51b8152600401610b4990613171565b670de0b6b3a76400006103e8610d2160025490565b610d2c9060016132a8565b610d3691906132eb565b610d4091906132eb565b811015610da15760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b49565b610db381670de0b6b3a76400006132a8565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610ab3918590610e2590869061330a565b611f06565b6005546001600160a01b03163314610e545760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b038116610eb65760405162461bcd60e51b8152602060048201526024808201527f5f50726f746f636f6c4164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610b49565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fb261c95c6bb0e2d30b7a67f2f01a3a6931ab95f4c2921343fd44df89500856f2905f90a250565b6005546001600160a01b03163314610f295760405162461bcd60e51b8152600401610b4990613171565b600f54610100900460ff1615610f815760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610b49565b600f805462ff0000198415156101009081029190911662ffff0019909216919091176201000017918290556040517fe185248899f361d51a48833938ab33493ebd7272d195abf7f51a833ea813881292610fed92900460ff169084909115158252602082015260400190565b60405180910390a1600f54610100900460ff16801561100c5750600d54155b1561101b5743600d55600e8190555b5050565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b031633146110635760405162461bcd60e51b8152600401610b4990613171565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110d65760405162461bcd60e51b8152600401610b4990613171565b600f805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146111345760405162461bcd60e51b8152600401610b4990613171565b806111ca577f00000000000000000000000072d6e62c54cb41f316ca79015a7ebb2cb2153cf76001600160a01b0316826001600160a01b0316036111ca5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b49565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610b4990613171565b60118390556012829055601381905580611238838561330a565b611242919061330a565b6010819055604610156112975760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420373025206f72206c6573730000006044820152606401610b49565b505050565b6005545f906001600160a01b031633146112c85760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b03831661131e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b49565b306001600160a01b038416036113765760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b49565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156113ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de919061331d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af115801561142e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114529190613334565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146114c85760405162461bcd60e51b8152600401610b4990613171565b610321831061152f5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b49565b82811461158f5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b49565b5f805b848110156115e7576115a66012600a61329a565b8484838181106115b8576115b86132bf565b905060200201356115c991906132a8565b6115d3908361330a565b9150806115df816132d3565b915050611592565b50806115f28761101f565b10156116405760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b49565b5f5b848110156116b6576116a487878784818110611660576116606132bf565b90506020020160208101906116759190612ef0565b6116816012600a61329a565b878786818110611693576116936132bf565b90506020020135610cc391906132a8565b806116ae816132d3565b915050611642565b50505050505050565b6005546001600160a01b031633146116e95760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b03811661174b5760405162461bcd60e51b815260206004820152602360248201527f5f526577617264734164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610b49565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f647cd1cbe5341aa880069f5c966ac6cf0ed473b7c0bf494fb7fc7ca46dc4cc78905f90a250565b606060048054610a2690613139565b6005546001600160a01b031633146117cd5760405162461bcd60e51b8152600401610b4990613171565b7f00000000000000000000000072d6e62c54cb41f316ca79015a7ebb2cb2153cf76001600160a01b0316826001600160a01b0316036118745760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b49565b61101b828261279d565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156118ff5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b49565b61190c3385858403611f06565b5060019392505050565b5f610ab3338484612029565b6005546001600160a01b0316331461194c5760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119d45760405162461bcd60e51b8152600401610b4990613171565b601583905560168290556017819055806119ee838561330a565b6119f8919061330a565b6014819055604610156112975760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420373025206f72206c6573730000006044820152606401610b49565b6005546001600160a01b03163314611a775760405162461bcd60e51b8152600401610b4990613171565b670de0b6b3a76400006103e8611a8c60025490565b611a979060036132a8565b611aa191906132eb565b611aab91906132eb565b811015611b0f5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610b49565b611b2181670de0b6b3a76400006132a8565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610de4565b6005546001600160a01b03163314611b805760405162461bcd60e51b8152600401610b4990613171565b620186a0611b8d60025490565b611b989060016132a8565b611ba291906132eb565b811015611c0f5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b49565b6103e8611c1b60025490565b611c269060016132a8565b611c3091906132eb565b811115611c9c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b49565b600a55565b6005546001600160a01b03163314611ccb5760405162461bcd60e51b8152600401610b4990613171565b670de0b6b3a76400006103e8611ce060025490565b611ceb9060016132a8565b611cf591906132eb565b611cff91906132eb565b811015611d615760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b49565b611d7381670de0b6b3a76400006132a8565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610de4565b6005546001600160a01b03163314611dd25760405162461bcd60e51b8152600401610b4990613171565b6001600160a01b038116611e375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b49565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ebc5760405162461bcd60e51b8152600401610b4990613171565b6040515f90339047908381818185875af1925050503d805f8114611efb576040519150601f19603f3d011682016040523d82523d5f602084013e611f00565b606091505b50505050565b6001600160a01b038316611f685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b49565b6001600160a01b038216611fc95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b49565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661204f5760405162461bcd60e51b8152600401610b499061334f565b6001600160a01b0382166120755760405162461bcd60e51b8152600401610b4990613394565b5f81116120c45760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b49565b600f5460ff1615612486576005546001600160a01b038481169116148015906120fb57506005546001600160a01b03838116911614155b801561210f57506001600160a01b03821615155b801561212657506001600160a01b03821661dead14155b1561248657600f54610100900460ff1661220e576001600160a01b0383165f908152601c602052604090205460ff168061217757506001600160a01b0382165f908152601c602052604090205460ff165b6121bc5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b49565b6005546001600160a01b0384811691161461220e5760405162461bcd60e51b8152602060048201526012602482015271151c98591a5b99c81a5cc8195b98589b195960721b6044820152606401610b49565b5f600d5411801561222d5750600e54600d5461222a919061330a565b43105b506001600160a01b0383165f908152601d602052604090205460ff16801561226d57506001600160a01b0382165f908152601c602052604090205460ff16155b15612339576006548111156122d55760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b49565b6008546122e18361101f565b6122eb908361330a565b11156123345760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b49565b612486565b6001600160a01b0382165f908152601d602052604090205460ff16801561237857506001600160a01b0383165f908152601c602052604090205460ff16155b156123e2576007548111156123345760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b49565b6001600160a01b0382165f908152601c602052604090205460ff1615801561242257506001600160a01b0383165f908152601c602052604090205460ff16155b15612486576008546124338361101f565b61243d908361330a565b11156124865760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b49565b5f6124903061101f565b600a54909150811080159081906124af5750600f5462010000900460ff165b80156124be575060095460ff16155b80156124e257506001600160a01b0385165f908152601d602052604090205460ff16155b801561250657506001600160a01b0385165f908152601b602052604090205460ff16155b801561252a57506001600160a01b0384165f908152601b602052604090205460ff16155b1561254f576009805460ff19166001179055612544612805565b6009805460ff191690555b6001600160a01b0385165f908152601b602052604090205460019060ff168061258f57506001600160a01b0385165f908152601b602052604090205460ff165b1561259757505f5b5f8115612792575f600d541180156125bb575043600d545f6125b9919061330a565b115b612774576001600160a01b0386165f908152601d602052604090205460ff1680156125e757505f601454115b1561269c576064601454866125fc91906132a8565b61260691906132eb565b90506014546016548261261991906132a8565b61262391906132eb565b60195f828254612633919061330a565b909155505060145460155461264890836132a8565b61265291906132eb565b60185f828254612662919061330a565b909155505060145460175461267790836132a8565b61268191906132eb565b601a5f828254612691919061330a565b909155506127749050565b6001600160a01b0387165f908152601d602052604090205460ff1680156126c457505f601054115b15612774576064601054866126d991906132a8565b6126e391906132eb565b9050601054601254826126f691906132a8565b61270091906132eb565b60195f828254612710919061330a565b909155505060105460115461272590836132a8565b61272f91906132eb565b60185f82825461273f919061330a565b909155505060105460135461275490836132a8565b61275e91906132eb565b601a5f82825461276e919061330a565b90915550505b8015612785576127858730836129fe565b61278f81866133d7565b94505b6116b68787876129fe565b6001600160a01b0382165f908152601d60205260409020805460ff19168215151790556127ca8282612b51565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b5f61280f3061101f565b90505f601a54601854601954612825919061330a565b61282f919061330a565b905081158061283c575080155b15612845575050565b600a8054612852916132a8565b82111561286957600a8054612866916132a8565b91505b5f806002836019548661287c91906132a8565b61288691906132eb565b61289091906132eb565b90506128a461289f82866133d7565b612bb3565b601954479081905f906128b9906002906132eb565b6128c390876133d7565b6018546128d090856132a8565b6128da91906132eb565b90505f60026019546128ec91906132eb565b6128f690886133d7565b601a5461290390866132a8565b61290d91906132eb565b9050612919818361330a565b61292390846133d7565b5f60198190556018819055601a559250841580159061294157505f83115b15612950576129508584612d61565b600c546040516001600160a01b039091169082905f81818185875af1925050503d805f811461299a576040519150601f19603f3d011682016040523d82523d5f602084013e61299f565b606091505b5050600b546040519197506001600160a01b03169047905f81818185875af1925050503d805f81146129ec576040519150601f19603f3d011682016040523d82523d5f602084013e6129f1565b606091505b5050505050505050505050565b6001600160a01b038316612a245760405162461bcd60e51b8152600401610b499061334f565b6001600160a01b038216612a4a5760405162461bcd60e51b8152600401610b4990613394565b6001600160a01b0383165f9081526020819052604090205481811015612ac15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b49565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612af790849061330a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b4391815260200190565b60405180910390a350505050565b6001600160a01b0382165f818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612be657612be66132bf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8691906133ea565b81600181518110612c9957612c996132bf565b60200260200101906001600160a01b031690816001600160a01b031681525050612ce4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f06565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612d389085905f90869030904290600401613405565b5f604051808303815f87803b158015612d4f575f80fd5b505af1158015610cda573d5f803e3d5ffd5b612d8c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f06565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230855f80612dd26005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612e38573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612e5d9190613474565b5050505050565b5f6020808352835180828501525f5b81811015612e8f57858101830151858201604001528201612e73565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612ec3575f80fd5b50565b5f8060408385031215612ed7575f80fd5b8235612ee281612eaf565b946020939093013593505050565b5f60208284031215612f00575f80fd5b8135612f0b81612eaf565b9392505050565b5f805f60608486031215612f24575f80fd5b8335612f2f81612eaf565b92506020840135612f3f81612eaf565b929592945050506040919091013590565b5f8083601f840112612f60575f80fd5b50813567ffffffffffffffff811115612f77575f80fd5b6020830191508360208260051b8501011115612f91575f80fd5b9250929050565b5f805f8060608587031215612fab575f80fd5b8435612fb681612eaf565b9350602085013567ffffffffffffffff811115612fd1575f80fd5b612fdd87828801612f50565b9598909750949560400135949350505050565b5f60208284031215613000575f80fd5b5035919050565b8015158114612ec3575f80fd5b5f8060408385031215613025575f80fd5b8235612ee281613007565b5f8060408385031215613041575f80fd5b823561304c81612eaf565b9150602083013561305c81613007565b809150509250929050565b5f805f60608486031215613079575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156130a1575f80fd5b82356130ac81612eaf565b9150602083013561305c81612eaf565b5f805f805f606086880312156130d0575f80fd5b85356130db81612eaf565b9450602086013567ffffffffffffffff808211156130f7575f80fd5b61310389838a01612f50565b9096509450604088013591508082111561311b575f80fd5b5061312888828901612f50565b969995985093965092949392505050565b600181811c9082168061314d57607f821691505b60208210810361316b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156131f457815f19048211156131da576131da6131a6565b808516156131e757918102915b93841c93908002906131bf565b509250929050565b5f8261320a57506001610ab7565b8161321657505f610ab7565b816001811461322c576002811461323657613252565b6001915050610ab7565b60ff841115613247576132476131a6565b50506001821b610ab7565b5060208310610133831016604e8410600b8410161715613275575081810a610ab7565b61327f83836131ba565b805f1904821115613292576132926131a6565b029392505050565b5f612f0b60ff8416836131fc565b8082028115828204841417610ab757610ab76131a6565b634e487b7160e01b5f52603260045260245ffd5b5f600182016132e4576132e46131a6565b5060010190565b5f8261330557634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610ab757610ab76131a6565b5f6020828403121561332d575f80fd5b5051919050565b5f60208284031215613344575f80fd5b8151612f0b81613007565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ab757610ab76131a6565b5f602082840312156133fa575f80fd5b8151612f0b81612eaf565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156134535784516001600160a01b03168352938301939183019160010161342e565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613486575f80fd5b835192506020840151915060408401519050925092509256fea264697066735822122066c95153175cc530425ce06d21a02c47ec859163c70dac7dde42a4c09631ed7464736f6c63430008140033

Deployed Bytecode Sourcemap

7142:16394:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1860:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2774:169;;;;;;;;;;-1:-1:-1;2774:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;2774:169:0;1023:187:1;8267:64:0;;;;;;;;;;-1:-1:-1;8267:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7296:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1649:32:1;;;1631:51;;1619:2;1604:18;7296:43:0;1467:221:1;2181:108:0;;;;;;;;;;-1:-1:-1;2269:12:0;;2181:108;;;1839:25:1;;;1827:2;1812:18;2181:108:0;1693:177:1;8072:33:0;;;;;;;;;;;;;;;;2951:480;;;;;;;;;;-1:-1:-1;2951:480:0;;;;;:::i;:::-;;:::i;20335:510::-;;;;;;;;;;-1:-1:-1;20335:510:0;;;;;:::i;:::-;;:::i;:::-;;11766:269;;;;;;;;;;-1:-1:-1;11766:269:0;;;;;:::i;:::-;;:::i;2080:93::-;;;;;;;;;;-1:-1:-1;2080:93:0;;2163:2;3680:36:1;;3668:2;3653:18;2080:93:0;3538:184:1;3439:215:0;;;;;;;;;;-1:-1:-1;3439:215:0;;;;;:::i;:::-;;:::i;7346:38::-;;;;;;;;;;;;;;;7621:33;;;;;;;;;;-1:-1:-1;7621:33:0;;;;;;;;22971:281;;;;;;;;;;-1:-1:-1;22971:281:0;;;;;:::i;:::-;;:::i;11164:425::-;;;;;;;;;;-1:-1:-1;11164:425:0;;;;;:::i;:::-;;:::i;7222:28::-;;;;;;;;;;;;;;;;7885;;;;;;;;;;;;;;;;7701:31;;;;;;;;;;-1:-1:-1;7701:31:0;;;;;;;;;;;2297:127;;;;;;;;;;-1:-1:-1;2297:127:0;;;;;:::i;:::-;;:::i;5901:150::-;;;;;;;;;;;;;:::i;11641:115::-;;;;;;;;;;;;;:::i;13252:267::-;;;;;;;;;;-1:-1:-1;13252:267:0;;;;;:::i;:::-;;:::i;7848:28::-;;;;;;;;;;;;;;;;14029:381;;;;;;;;;;-1:-1:-1;14029:381:0;;;;;:::i;:::-;;:::i;22277:456::-;;;;;;;;;;-1:-1:-1;22277:456:0;;;;;:::i;:::-;;:::i;19619:708::-;;;;;;;;;;-1:-1:-1;19619:708:0;;;;;:::i;:::-;;:::i;7188:27::-;;;;;;;;;;;;;;;;23260:273;;;;;;;;;;-1:-1:-1;23260:273:0;;;;;:::i;:::-;;:::i;5687:79::-;;;;;;;;;;-1:-1:-1;5752:6:0;;-1:-1:-1;;;;;5752:6:0;5687:79;;1968:104;;;;;;;;;;;;;:::i;8033:32::-;;;;;;;;;;;;;;;;13527:246;;;;;;;;;;-1:-1:-1;13527:246:0;;;;;:::i;:::-;;:::i;7463:30::-;;;;;;;;;;-1:-1:-1;7463:30:0;;;;-1:-1:-1;;;;;7463:30:0;;;3662:401;;;;;;;;;;-1:-1:-1;3662:401:0;;;;;:::i;:::-;;:::i;2432:175::-;;;;;;;;;;-1:-1:-1;2432:175:0;;;;;:::i;:::-;;:::i;7257:30::-;;;;;;;;;;;;;;;;8489:58;;;;;;;;;;-1:-1:-1;8489:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7995:29;;;;;;;;;;;;;;;;7661:33;;;;;;;;;;-1:-1:-1;7661:33:0;;;;;;;;;;;14816:182;;;;;;;;;;-1:-1:-1;14816:182:0;;;;;:::i;:::-;;:::i;7500:29::-;;;;;;;;;;-1:-1:-1;7500:29:0;;;;-1:-1:-1;;;;;7500:29:0;;;14418:390;;;;;;;;;;-1:-1:-1;14418:390:0;;;;;:::i;:::-;;:::i;12325:284::-;;;;;;;;;;-1:-1:-1;12325:284:0;;;;;:::i;:::-;;:::i;7775:29::-;;;;;;;;;;;;;;;;12679:350;;;;;;;;;;-1:-1:-1;12679:350:0;;;;;:::i;:::-;;:::i;7741:27::-;;;;;;;;;;;;;;;;12043:274;;;;;;;;;;-1:-1:-1;12043:274:0;;;;;:::i;:::-;;:::i;2615:151::-;;;;;;;;;;-1:-1:-1;2615:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2731:18:0;;;2704:7;2731:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2615:151;7920:30;;;;;;;;;;;;;;;;7421:33;;;;;;;;;;;;;;;;7538:37;;;;;;;;;;;;;;;;7811:30;;;;;;;;;;;;;;;;6059:244;;;;;;;;;;-1:-1:-1;6059:244:0;;;;;:::i;:::-;;:::i;8112:31::-;;;;;;;;;;;;;;;;22803:160;;;;;;;;;;;;;:::i;7957:31::-;;;;;;;;;;;;;;;;7583:29;;;;;;;;;;;;;;;;1860:100;1914:13;1947:5;1940:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1860:100;:::o;2774:169::-;2857:4;2874:39;379:10;2897:7;2906:6;2874:8;:39::i;:::-;-1:-1:-1;2931:4:0;2774:169;;;;;:::o;2951:480::-;3091:4;3108:36;3118:6;3126:9;3137:6;3108:9;:36::i;:::-;-1:-1:-1;;;;;3184:19:0;;3157:24;3184:19;;;:11;:19;;;;;;;;379:10;3184:33;;;;;;;;3236:26;;;;3228:79;;;;-1:-1:-1;;;3228:79:0;;6973:2:1;3228:79:0;;;6955:21:1;7012:2;6992:18;;;6985:30;7051:34;7031:18;;;7024:62;-1:-1:-1;;;7102:18:1;;;7095:38;7150:19;;3228:79:0;;;;;;;;;3335:57;3344:6;379:10;3385:6;3366:16;:25;3335:8;:57::i;:::-;-1:-1:-1;3419:4:0;;2951:480;-1:-1:-1;;;;2951:480:0:o;20335:510::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;20483:4:::1;20464:23:::0;::::1;20456:81;;;::::0;-1:-1:-1;;;20456:81:0;;7743:2:1;20456:81:0::1;::::0;::::1;7725:21:1::0;7782:2;7762:18;;;7755:30;7821:34;7801:18;;;7794:62;-1:-1:-1;;;7872:18:1;;;7865:44;7926:19;;20456:81:0::1;7541:410:1::0;20456:81:0::1;20571:12;20611:9:::0;20594:14:::1;2163:2:::0;20594::::1;:14;:::i;:::-;20586:22;::::0;:6;:22:::1;:::i;:::-;:41;;;;:::i;:::-;20571:56;;20665:4;20646:15;20656:4;20646:9;:15::i;:::-;:23;;20638:63;;;::::0;-1:-1:-1;;;20638:63:0;;9846:2:1;20638:63:0::1;::::0;::::1;9828:21:1::0;9885:2;9865:18;;;9858:30;9924:29;9904:18;;;9897:57;9971:18;;20638:63:0::1;9644:351:1::0;20638:63:0::1;20718:6;20714:124;20728:20:::0;;::::1;20714:124;;;20769:53;20779:4;20784:9;;20794:1;20784:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20806:14;2163:2:::0;20806::::1;:14;:::i;:::-;20798:22;::::0;:6;:22:::1;:::i;:::-;20769:9;:53::i;:::-;20750:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20714:124;;;;20445:400;20335:510:::0;;;;:::o;11766:269::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;11885:4:::1;11879;11859:13;2269:12:::0;;;2181:108;11859:13:::1;:17;::::0;11875:1:::1;11859:17;:::i;:::-;:24;;;;:::i;:::-;11858:31;;;;:::i;:::-;11848:6;:41;;11840:95;;;::::0;-1:-1:-1;;;11840:95:0;;10696:2:1;11840:95:0::1;::::0;::::1;10678:21:1::0;10735:2;10715:18;;;10708:30;10774:34;10754:18;;;10747:62;-1:-1:-1;;;10825:18:1;;;10818:39;10874:19;;11840:95:0::1;10494:405:1::0;11840:95:0::1;11961:17;:6:::0;11971::::1;11961:17;:::i;:::-;11946:12;:32:::0;;;11994:33:::1;::::0;1839:25:1;;;11994:33:0::1;::::0;1827:2:1;1812:18;11994:33:0::1;;;;;;;;11766:269:::0;:::o;3439:215::-;379:10;3527:4;3576:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3576:34:0;;;;;;;;;;3527:4;;3544:80;;3567:7;;3576:47;;3613:10;;3576:47;:::i;:::-;3544:8;:80::i;22971:281::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23063:30:0;::::1;23055:79;;;::::0;-1:-1:-1;;;23055:79:0;;11236:2:1;23055:79:0::1;::::0;::::1;11218:21:1::0;11275:2;11255:18;;;11248:30;11314:34;11294:18;;;11287:62;-1:-1:-1;;;11365:18:1;;;11358:34;11409:19;;23055:79:0::1;11034:400:1::0;23055:79:0::1;23145:15;:43:::0;;-1:-1:-1;;;;;;23145:43:0::1;-1:-1:-1::0;;;;;23145:43:0;::::1;::::0;;::::1;::::0;;;23204:40:::1;::::0;::::1;::::0;-1:-1:-1;;23204:40:0::1;22971:281:::0;:::o;11164:425::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;11261:13:::1;::::0;::::1;::::0;::::1;;;11260:14;11252:51;;;::::0;-1:-1:-1;;;11252:51:0;;11641:2:1;11252:51:0::1;::::0;::::1;11623:21:1::0;11680:2;11660:18;;;11653:30;11719:26;11699:18;;;11692:54;11763:18;;11252:51:0::1;11439:348:1::0;11252:51:0::1;11314:13;:23:::0;;-1:-1:-1;;11314:23:0;::::1;;;::::0;;::::1;11348:18:::0;;;;-1:-1:-1;;11348:18:0;;;;;;;;::::1;::::0;;;;11382:42:::1;::::0;::::1;::::0;::::1;::::0;11397:13;::::1;11314:23;11397:13;::::0;11412:11;;11985:14:1;;11978:22;11960:41;;12032:2;12017:18;;12010:34;11948:2;11933:18;;11792:258;11382:42:0::1;;;;;;;;11441:13;::::0;::::1;::::0;::::1;;;:40:::0;::::1;;;-1:-1:-1::0;11458:18:0::1;::::0;:23;11441:40:::1;11437:145;;;11519:12;11498:18;:33:::0;11546:10:::1;:24:::0;;;11437:145:::1;11164:425:::0;;:::o;2297:127::-;-1:-1:-1;;;;;2398:18:0;2371:7;2398:18;;;;;;;;;;;;2297:127::o;5901:150::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;5994:6:::1;::::0;5973:40:::1;::::0;6010:1:::1;::::0;-1:-1:-1;;;;;5994:6:0::1;::::0;5973:40:::1;::::0;6010:1;;5973:40:::1;6024:6;:19:::0;;-1:-1:-1;;;;;;6024:19:0::1;::::0;;5901:150::o;11641:115::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;11695:14:::1;:22:::0;;-1:-1:-1;;11695:22:0::1;::::0;;11733:15:::1;::::0;::::1;::::0;11712:5:::1;::::0;11733:15:::1;11641:115::o:0;13252:267::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;13348:4:::1;13344:111;;13386:13;-1:-1:-1::0;;;;;13376:23:0::1;:6;-1:-1:-1::0;;;;;13376:23:0::1;::::0;13368:75:::1;;;::::0;-1:-1:-1;;;13368:75:0;;12257:2:1;13368:75:0::1;::::0;::::1;12239:21:1::0;12296:2;12276:18;;;12269:30;12335:34;12315:18;;;12308:62;-1:-1:-1;;;12386:18:1;;;12379:37;12433:19;;13368:75:0::1;12055:403:1::0;13368:75:0::1;-1:-1:-1::0;;;;;13465:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;13465:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13252:267::o;14029:381::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;14148:14:::1;:29:::0;;;14188:15:::1;:31:::0;;;14230:13:::1;:27:::0;;;14246:11;14283:32:::1;14206:13:::0;14165:12;14283:32:::1;:::i;:::-;:48;;;;:::i;:::-;14268:12;:63:::0;;;14366:2:::1;-1:-1:-1::0;14350:18:0::1;14342:60;;;::::0;-1:-1:-1;;;14342:60:0;;12665:2:1;14342:60:0::1;::::0;::::1;12647:21:1::0;12704:2;12684:18;;;12677:30;12743:31;12723:18;;;12716:59;12792:18;;14342:60:0::1;12463:353:1::0;14342:60:0::1;14029:381:::0;;;:::o;22277:456::-;5814:6;;22364:10;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22395:20:0;::::1;22387:59;;;::::0;-1:-1:-1;;;22387:59:0;;13023:2:1;22387:59:0::1;::::0;::::1;13005:21:1::0;13062:2;13042:18;;;13035:30;13101:28;13081:18;;;13074:56;13147:18;;22387:59:0::1;12821:350:1::0;22387:59:0::1;22483:4;-1:-1:-1::0;;;;;22465:23:0;::::1;::::0;22457:64:::1;;;::::0;-1:-1:-1;;;22457:64:0;;13378:2:1;22457:64:0::1;::::0;::::1;13360:21:1::0;13417:2;13397:18;;;13390:30;13456;13436:18;;;13429:58;13504:18;;22457:64:0::1;13176:352:1::0;22457:64:0::1;22559:39;::::0;-1:-1:-1;;;22559:39:0;;22592:4:::1;22559:39;::::0;::::1;1631:51:1::0;22532:24:0::1;::::0;-1:-1:-1;;;;;22559:24:0;::::1;::::0;::::1;::::0;1604:18:1;;22559:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22617:46;::::0;-1:-1:-1;;;22617:46:0;;-1:-1:-1;;;;;13914:32:1;;;22617:46:0::1;::::0;::::1;13896:51:1::0;13963:18;;;13956:34;;;22532:66:0;;-1:-1:-1;22617:23:0;;::::1;::::0;::::1;::::0;13869:18:1;;22617:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22679;::::0;;-1:-1:-1;;;;;13914:32:1;;13896:51;;13978:2;13963:18;;13956:34;;;22609:54:0;;-1:-1:-1;22679:46:0::1;::::0;13869:18:1;22679:46:0::1;;;;;;;22376:357;22277:456:::0;;;;:::o;19619:708::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;19776:3:::1;19757:22:::0;::::1;19749:79;;;::::0;-1:-1:-1;;;19749:79:0;;14453:2:1;19749:79:0::1;::::0;::::1;14435:21:1::0;14492:2;14472:18;;;14465:30;14531:34;14511:18;;;14504:62;-1:-1:-1;;;14582:18:1;;;14575:43;14635:19;;19749:79:0::1;14251:409:1::0;19749:79:0::1;19870:33:::0;;::::1;19862:85;;;::::0;-1:-1:-1;;;19862:85:0;;14867:2:1;19862:85:0::1;::::0;::::1;14849:21:1::0;14906:2;14886:18;;;14879:30;14945:34;14925:18;;;14918:62;-1:-1:-1;;;14996:18:1;;;14989:38;15044:19;;19862:85:0::1;14665:404:1::0;19862:85:0::1;19960:12;19993:6:::0;19989:109:::1;20003:20:::0;;::::1;19989:109;;;20071:14;2163:2:::0;20071::::1;:14;:::i;:::-;20059:6;;20066:1;20059:9;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;20051:35;::::0;:4;:35:::1;:::i;:::-;20044:42:::0;-1:-1:-1;20025:3:0;::::1;::::0;::::1;:::i;:::-;;;;19989:109;;;;20137:4;20118:15;20128:4;20118:9;:15::i;:::-;:23;;20110:63;;;::::0;-1:-1:-1;;;20110:63:0;;9846:2:1;20110:63:0::1;::::0;::::1;9828:21:1::0;9885:2;9865:18;;;9858:30;9924:29;9904:18;;;9897:57;9971:18;;20110:63:0::1;9644:351:1::0;20110:63:0::1;20190:6;20186:134;20200:20:::0;;::::1;20186:134;;;20241:57;20251:4;20256:9;;20266:1;20256:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20282:14;2163:2:::0;20282::::1;:14;:::i;:::-;20270:6;;20277:1;20270:9;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;20241:57::-;20222:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20186:134;;;;19736:591;19619:708:::0;;;;;:::o;23260:273::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23350:29:0;::::1;23342:77;;;::::0;-1:-1:-1;;;23342:77:0;;15276:2:1;23342:77:0::1;::::0;::::1;15258:21:1::0;15315:2;15295:18;;;15288:30;15354:34;15334:18;;;15327:62;-1:-1:-1;;;15405:18:1;;;15398:33;15448:19;;23342:77:0::1;15074:399:1::0;23342:77:0::1;23430:14;:41:::0;;-1:-1:-1;;;;;;23430:41:0::1;-1:-1:-1::0;;;;;23430:41:0;::::1;::::0;;::::1;::::0;;;23487:38:::1;::::0;::::1;::::0;-1:-1:-1;;23487:38:0::1;23260:273:::0;:::o;1968:104::-;2024:13;2057:7;2050:14;;;;;:::i;13527:246::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;13636:13:::1;-1:-1:-1::0;;;;;13628:21:0::1;:4;-1:-1:-1::0;;;;;13628:21:0::1;::::0;13620:91:::1;;;::::0;-1:-1:-1;;;13620:91:0;;15680:2:1;13620:91:0::1;::::0;::::1;15662:21:1::0;15719:2;15699:18;;;15692:30;15758:34;15738:18;;;15731:62;15829:27;15809:18;;;15802:55;15874:19;;13620:91:0::1;15478:421:1::0;13620:91:0::1;13724:41;13753:4;13759:5;13724:28;:41::i;3662:401::-:0;379:10;3755:4;3799:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3799:34:0;;;;;;;;;;3852:35;;;;3844:85;;;;-1:-1:-1;;;3844:85:0;;16106:2:1;3844:85:0;;;16088:21:1;16145:2;16125:18;;;16118:30;16184:34;16164:18;;;16157:62;-1:-1:-1;;;16235:18:1;;;16228:35;16280:19;;3844:85:0;15904:401:1;3844:85:0;3957:67;379:10;3980:7;4008:15;3989:16;:34;3957:8;:67::i;:::-;-1:-1:-1;4051:4:0;;3662:401;-1:-1:-1;;;3662:401:0:o;2432:175::-;2518:4;2535:42;379:10;2559:9;2570:6;2535:9;:42::i;14816:182::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14901:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;14901:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14956:34;;1163:41:1;;;14956:34:0::1;::::0;1136:18:1;14956:34:0::1;;;;;;;14816:182:::0;;:::o;14418:390::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;14538:15:::1;:30:::0;;;14579:16:::1;:32:::0;;;14622:14:::1;:28:::0;;;14639:11;14677:34:::1;14598:13:::0;14556:12;14677:34:::1;:::i;:::-;:51;;;;:::i;:::-;14661:13;:67:::0;;;14764:2:::1;-1:-1:-1::0;14747:19:0::1;14739:61;;;::::0;-1:-1:-1;;;14739:61:0;;12665:2:1;14739:61:0::1;::::0;::::1;12647:21:1::0;12704:2;12684:18;;;12677:30;12743:31;12723:18;;;12716:59;12792:18;;14739:61:0::1;12463:353:1::0;12325:284:0;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;12447:4:::1;12441;12421:13;2269:12:::0;;;2181:108;12421:13:::1;:17;::::0;12437:1:::1;12421:17;:::i;:::-;:24;;;;:::i;:::-;12420:31;;;;:::i;:::-;12410:6;:41;;12402:98;;;::::0;-1:-1:-1;;;12402:98:0;;16512:2:1;12402:98:0::1;::::0;::::1;16494:21:1::0;16551:2;16531:18;;;16524:30;16590:34;16570:18;;;16563:62;-1:-1:-1;;;16641:18:1;;;16634:42;16693:19;;12402:98:0::1;16310:408:1::0;12402:98:0::1;12529:17;:6:::0;12539::::1;12529:17;:::i;:::-;12511:15;:35:::0;;;12562:39:::1;::::0;1839:25:1;;;12562:39:0::1;::::0;1827:2:1;1812:18;12562:39:0::1;1693:177:1::0;12679:350:0;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;12803:6:::1;12783:13;2269:12:::0;;;2181:108;12783:13:::1;:17;::::0;12799:1:::1;12783:17;:::i;:::-;:26;;;;:::i;:::-;12770:9;:39;;12762:105;;;::::0;-1:-1:-1;;;12762:105:0;;16925:2:1;12762:105:0::1;::::0;::::1;16907:21:1::0;16964:2;16944:18;;;16937:30;17003:34;16983:18;;;16976:62;-1:-1:-1;;;17054:18:1;;;17047:51;17115:19;;12762:105:0::1;16723:417:1::0;12762:105:0::1;12919:4;12899:13;2269:12:::0;;;2181:108;12899:13:::1;:17;::::0;12915:1:::1;12899:17;:::i;:::-;:24;;;;:::i;:::-;12886:9;:37;;12878:102;;;::::0;-1:-1:-1;;;12878:102:0;;17347:2:1;12878:102:0::1;::::0;::::1;17329:21:1::0;17386:2;17366:18;;;17359:30;17425:34;17405:18;;;17398:62;-1:-1:-1;;;17476:18:1;;;17469:50;17536:19;;12878:102:0::1;17145:416:1::0;12878:102:0::1;12991:18;:30:::0;12679:350::o;12043:274::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;12163:4:::1;12157;12137:13;2269:12:::0;;;2181:108;12137:13:::1;:17;::::0;12153:1:::1;12137:17;:::i;:::-;:24;;;;:::i;:::-;12136:31;;;;:::i;:::-;12126:6;:41;;12118:96;;;::::0;-1:-1:-1;;;12118:96:0;;17768:2:1;12118:96:0::1;::::0;::::1;17750:21:1::0;17807:2;17787:18;;;17780:30;17846:34;17826:18;;;17819:62;-1:-1:-1;;;17897:18:1;;;17890:40;17947:19;;12118:96:0::1;17566:406:1::0;12118:96:0::1;12241:17;:6:::0;12251::::1;12241:17;:::i;:::-;12225:13;:33:::0;;;12274:35:::1;::::0;1839:25:1;;;12274:35:0::1;::::0;1827:2:1;1812:18;12274:35:0::1;1693:177:1::0;6059:244:0;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6148:22:0;::::1;6140:73;;;::::0;-1:-1:-1;;;6140:73:0;;18179:2:1;6140:73:0::1;::::0;::::1;18161:21:1::0;18218:2;18198:18;;;18191:30;18257:34;18237:18;;;18230:62;-1:-1:-1;;;18308:18:1;;;18301:36;18354:19;;6140:73:0::1;17977:402:1::0;6140:73:0::1;6250:6;::::0;6229:38:::1;::::0;-1:-1:-1;;;;;6229:38:0;;::::1;::::0;6250:6:::1;::::0;6229:38:::1;::::0;6250:6:::1;::::0;6229:38:::1;6278:6;:17:::0;;-1:-1:-1;;;;;;6278:17:0::1;-1:-1:-1::0;;;;;6278:17:0;;;::::1;::::0;;;::::1;::::0;;6059:244::o;22803:160::-;5814:6;;-1:-1:-1;;;;;5814:6:0;379:10;5814:22;5806:67;;;;-1:-1:-1;;;5806:67:0;;;;;;;:::i;:::-;22897:58:::1;::::0;22861:12:::1;::::0;22905:10:::1;::::0;22929:21:::1;::::0;22861:12;22897:58;22861:12;22897:58;22929:21;22905:10;22897:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;22803:160:0:o;4980:380::-;-1:-1:-1;;;;;5116:19:0;;5108:68;;;;-1:-1:-1;;;5108:68:0;;18796:2:1;5108:68:0;;;18778:21:1;18835:2;18815:18;;;18808:30;18874:34;18854:18;;;18847:62;-1:-1:-1;;;18925:18:1;;;18918:34;18969:19;;5108:68:0;18594:400:1;5108:68:0;-1:-1:-1;;;;;5195:21:0;;5187:68;;;;-1:-1:-1;;;5187:68:0;;19201:2:1;5187:68:0;;;19183:21:1;19240:2;19220:18;;;19213:30;19279:34;19259:18;;;19252:62;-1:-1:-1;;;19330:18:1;;;19323:32;19372:19;;5187:68:0;18999:398:1;5187:68:0;-1:-1:-1;;;;;5268:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5320:32;;1839:25:1;;;5320:32:0;;1812:18:1;5320:32:0;;;;;;;4980:380;;;:::o;15008:3474::-;-1:-1:-1;;;;;15108:18:0;;15100:68;;;;-1:-1:-1;;;15100:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15187:16:0;;15179:64;;;;-1:-1:-1;;;15179:64:0;;;;;;;:::i;:::-;15271:1;15262:6;:10;15254:52;;;;-1:-1:-1;;;15254:52:0;;20414:2:1;15254:52:0;;;20396:21:1;20453:2;20433:18;;;20426:30;20492:31;20472:18;;;20465:59;20541:18;;15254:52:0;20212:353:1;15254:52:0;15322:14;;;;15319:1343;;;5752:6;;-1:-1:-1;;;;;15356:15:0;;;5752:6;;15356:15;;;;:32;;-1:-1:-1;5752:6:0;;-1:-1:-1;;;;;15375:13:0;;;5752:6;;15375:13;;15356:32;:52;;;;-1:-1:-1;;;;;;15392:16:0;;;;15356:52;:77;;;;-1:-1:-1;;;;;;15412:21:0;;15426:6;15412:21;;15356:77;15352:1299;;;15457:13;;;;;;;15453:241;;-1:-1:-1;;;;;15502:37:0;;;;;;:31;:37;;;;;;;;;:76;;-1:-1:-1;;;;;;15543:35:0;;;;;;:31;:35;;;;;;;;15502:76;15494:111;;;;-1:-1:-1;;;15494:111:0;;20772:2:1;15494:111:0;;;20754:21:1;20811:2;20791:18;;;20784:30;-1:-1:-1;;;20830:18:1;;;20823:52;20892:18;;15494:111:0;20570:346:1;15494:111:0;5752:6;;-1:-1:-1;;;;;15636:15:0;;;5752:6;;15636:15;15628:46;;;;-1:-1:-1;;;15628:46:0;;21123:2:1;15628:46:0;;;21105:21:1;21162:2;21142:18;;;21135:30;-1:-1:-1;;;21181:18:1;;;21174:48;21239:18;;15628:46:0;20921:342:1;15628:46:0;15739:1;15718:18;;:22;:74;;;;;15781:10;;15760:18;;:31;;;;:::i;:::-;15744:12;:48;15718:74;15714:101;-1:-1:-1;;;;;15867:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;15903:35:0;;;;;;:31;:35;;;;;;;;15902:36;15867:71;15863:773;;;15981:12;;15971:6;:22;;15963:75;;;;-1:-1:-1;;;15963:75:0;;21470:2:1;15963:75:0;;;21452:21:1;21509:2;21489:18;;;21482:30;21548:34;21528:18;;;21521:62;-1:-1:-1;;;21599:18:1;;;21592:38;21647:19;;15963:75:0;21268:404:1;15963:75:0;16095:15;;16078:13;16088:2;16078:9;:13::i;:::-;16069:22;;:6;:22;:::i;:::-;:41;;16061:78;;;;-1:-1:-1;;;16061:78:0;;21879:2:1;16061:78:0;;;21861:21:1;21918:2;21898:18;;;21891:30;-1:-1:-1;;;21937:18:1;;;21930:54;22001:18;;16061:78:0;21677:348:1;16061:78:0;15863:773;;;-1:-1:-1;;;;;16215:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;16249:37:0;;;;;;:31;:37;;;;;;;;16248:38;16215:71;16211:425;;;16329:13;;16319:6;:23;;16311:78;;;;-1:-1:-1;;;16311:78:0;;22232:2:1;16311:78:0;;;22214:21:1;22271:2;22251:18;;;22244:30;22310:34;22290:18;;;22283:62;-1:-1:-1;;;22361:18:1;;;22354:40;22411:19;;16311:78:0;22030:406:1;16211:425:0;-1:-1:-1;;;;;16437:35:0;;;;;;:31;:35;;;;;;;;16436:36;:78;;;;-1:-1:-1;;;;;;16477:37:0;;;;;;:31;:37;;;;;;;;16476:38;16436:78;16432:204;;;16572:15;;16555:13;16565:2;16555:9;:13::i;:::-;16546:22;;:6;:22;:::i;:::-;:41;;16538:78;;;;-1:-1:-1;;;16538:78:0;;21879:2:1;16538:78:0;;;21861:21:1;21918:2;21898:18;;;21891:30;-1:-1:-1;;;21937:18:1;;;21930:54;22001:18;;16538:78:0;21677:348:1;16538:78:0;16674:28;16705:24;16723:4;16705:9;:24::i;:::-;16781:18;;16674:55;;-1:-1:-1;16757:42:0;;;;;;;16815:22;;-1:-1:-1;16826:11:0;;;;;;;16815:22;:35;;;;-1:-1:-1;16842:8:0;;;;16841:9;16815:35;:71;;;;-1:-1:-1;;;;;;16855:31:0;;;;;;:25;:31;;;;;;;;16854:32;16815:71;:101;;;;-1:-1:-1;;;;;;16891:25:0;;;;;;:19;:25;;;;;;;;16890:26;16815:101;:129;;;;-1:-1:-1;;;;;;16921:23:0;;;;;;:19;:23;;;;;;;;16920:24;16815:129;16812:236;;;16961:8;:15;;-1:-1:-1;;16961:15:0;16972:4;16961:15;;;16993:10;:8;:10::i;:::-;17020:8;:16;;-1:-1:-1;;17020:16:0;;;16812:236;-1:-1:-1;;;;;17178:25:0;;17060:12;17178:25;;;:19;:25;;;;;;17075:4;;17178:25;;;:52;;-1:-1:-1;;;;;;17207:23:0;;;;;;:19;:23;;;;;;;;17178:52;17175:99;;;-1:-1:-1;17257:5:0;17175:99;17286:12;17380:7;17377:1052;;;17425:1;17406:18;;:20;:63;;;;;17457:12;17431:18;;17452:1;17431:22;;;;:::i;:::-;17430:39;17406:63;17403:879;;-1:-1:-1;;;;;17533:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;17582:1;17566:13;;:17;17533:50;17529:753;;;17634:3;17619:13;;17610:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;17603:34;;17704:13;;17685:16;;17678:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;17656:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;17782:13:0;;17764:15;;17757:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;17736:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;17858:13:0;;17841:14;;17834:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;17814:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;17529:753:0;;-1:-1:-1;17529:753:0;;-1:-1:-1;;;;;17932:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;17982:1;17967:12;;:16;17932:51;17929:353;;;18035:3;18020:12;;18011:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;18004:34;;18104:12;;18086:15;;18079:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;18057:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;18180:12:0;;18163:14;;18156:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;18135:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;18254:12:0;;18238:13;;18231:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;18211:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;17929:353:0;18301:8;;18298:89;;18329:42;18345:4;18359;18366;18329:15;:42::i;:::-;18403:14;18413:4;18403:14;;:::i;:::-;;;17377:1052;18441:33;18457:4;18463:2;18467:6;18441:15;:33::i;13781:240::-;-1:-1:-1;;;;;13864:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;13864:39:0;;;;;;;13916;13864:31;:39;13916:26;:39::i;:::-;13973:40;;;;;;-1:-1:-1;;;;;13973:40:0;;;;;;;;13781:240;;:::o;20856:1413::-;20895:23;20921:24;20939:4;20921:9;:24::i;:::-;20895:50;;20956:25;21025:16;;21005:17;;20984:18;;:38;;;;:::i;:::-;:57;;;;:::i;:::-;20956:85;-1:-1:-1;21057:20:0;;;:46;;-1:-1:-1;21081:22:0;;21057:46;21054:60;;;21106:7;;20856:1413::o;21054:60::-;21145:18;;;:23;;;:::i;:::-;21127:15;:41;21124:113;;;21202:18;;;:23;;;:::i;:::-;21184:41;;21124:113;21249:12;21323:23;21408:1;21388:17;21367:18;;21349:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;21323:86;-1:-1:-1;21422:51:0;21439:33;21323:86;21439:15;:33;:::i;:::-;21422:16;:51::i;:::-;21668:18;;21507:21;;;;21486:18;;21668:20;;21687:1;;21668:20;:::i;:::-;21647:42;;:17;:42;:::i;:::-;21626:17;;21613:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;21588:102;;21701:21;21798:1;21779:18;;:20;;;;:::i;:::-;21758:42;;:17;:42;:::i;:::-;21738:16;;21725:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;21701:100;-1:-1:-1;21833:30:0;21701:100;21833:14;:30;:::i;:::-;21814:49;;;;:::i;:::-;21897:1;21876:18;:22;;;21909:17;:21;;;21941:16;:20;21814:49;-1:-1:-1;21977:19:0;;;;;:42;;;22018:1;22000:15;:19;21977:42;21974:119;;;22035:46;22048:15;22065;22035:12;:46::i;:::-;22126:14;;22118:54;;-1:-1:-1;;;;;22126:14:0;;;;22154:13;;22118:54;;;;22154:13;22126:14;22118:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22206:15:0;;22198:63;;22105:67;;-1:-1:-1;;;;;;22206:15:0;;22235:21;;22198:63;;;;22235:21;22206:15;22198:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20856:1413:0:o;4071:602::-;-1:-1:-1;;;;;4211:20:0;;4203:70;;;;-1:-1:-1;;;4203:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4292:23:0;;4284:71;;;;-1:-1:-1;;;4284:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4392:17:0;;4368:21;4392:17;;;;;;;;;;;4428:23;;;;4420:74;;;;-1:-1:-1;;;4420:74:0;;22776:2:1;4420:74:0;;;22758:21:1;22815:2;22795:18;;;22788:30;22854:34;22834:18;;;22827:62;-1:-1:-1;;;22905:18:1;;;22898:36;22951:19;;4420:74:0;22574:402:1;4420:74:0;-1:-1:-1;;;;;4522:17:0;;;:9;:17;;;;;;;;;;;4542:22;;;4522:42;;4582:20;;;;;;;;:30;;4558:6;;4522:9;4582:30;;4558:6;;4582:30;:::i;:::-;;;;;;;;4647:9;-1:-1:-1;;;;;4630:35:0;4639:6;-1:-1:-1;;;;;4630:35:0;;4658:6;4630:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;4630:35:0;;;;;;;;4192:481;4071:602;;;:::o;13037:207::-;-1:-1:-1;;;;;13125:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;13125:52:0;;;;;;;;;;13193:43;;23149:51:1;;;23216:18;;;23209:50;13193:43:0;;23122:18:1;13193:43:0;;;;;;;13037:207;;:::o;18490:591::-;18642:16;;;18656:1;18642:16;;;;;;;;18618:21;;18642:16;;;;;;;;;;-1:-1:-1;18642:16:0;18618:40;;18687:4;18669;18674:1;18669:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;18669:23:0;;;-1:-1:-1;;;;;18669:23:0;;;;;18713:15;-1:-1:-1;;;;;18713:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18703:4;18708:1;18703:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;18703:32:0;;;-1:-1:-1;;;;;18703:32:0;;;;;18748:62;18765:4;18780:15;18798:11;18748:8;:62::i;:::-;18849:224;;-1:-1:-1;;;18849:224:0;;-1:-1:-1;;;;;18849:15:0;:66;;;;:224;;18930:11;;18956:1;;19000:4;;19027;;19047:15;;18849:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19089:522;19237:62;19254:4;19269:15;19287:11;19237:8;:62::i;:::-;19342:15;-1:-1:-1;;;;;19342:31:0;;19381:9;19414:4;19434:11;19460:1;19503;19554:7;5752:6;;-1:-1:-1;;;;;5752:6:0;;5687:79;19554:7;19342:261;;;;;;-1:-1:-1;;;;;;19342:261:0;;;-1:-1:-1;;;;;25002:15:1;;;19342:261:0;;;24984:34:1;25034:18;;;25027:34;;;;25077:18;;;25070:34;;;;25120:18;;;25113:34;25184:15;;;25163:19;;;25156:44;19577:15:0;25216:19:1;;;25209:35;24918:19;;19342:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19089:522;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;:::-;1451:5;1215:247;-1:-1:-1;;;1215:247:1:o;1875:456::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;-1:-1:-1;2202:2:1;2187:18;;2174:32;2215:33;2174:32;2215:33;:::i;:::-;1875:456;;2267:7;;-1:-1:-1;;;2321:2:1;2306:18;;;;2293:32;;1875:456::o;2336:367::-;2399:8;2409:6;2463:3;2456:4;2448:6;2444:17;2440:27;2430:55;;2481:1;2478;2471:12;2430:55;-1:-1:-1;2504:20:1;;2547:18;2536:30;;2533:50;;;2579:1;2576;2569:12;2533:50;2616:4;2608:6;2604:17;2592:29;;2676:3;2669:4;2659:6;2656:1;2652:14;2644:6;2640:27;2636:38;2633:47;2630:67;;;2693:1;2690;2683:12;2630:67;2336:367;;;;;:::o;2708:640::-;2812:6;2820;2828;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2944:9;2931:23;2963:31;2988:5;2963:31;:::i;:::-;3013:5;-1:-1:-1;3069:2:1;3054:18;;3041:32;3096:18;3085:30;;3082:50;;;3128:1;3125;3118:12;3082:50;3167:70;3229:7;3220:6;3209:9;3205:22;3167:70;:::i;:::-;2708:640;;3256:8;;-1:-1:-1;3141:96:1;;3338:2;3323:18;3310:32;;2708:640;-1:-1:-1;;;;2708:640:1:o;3353:180::-;3412:6;3465:2;3453:9;3444:7;3440:23;3436:32;3433:52;;;3481:1;3478;3471:12;3433:52;-1:-1:-1;3504:23:1;;3353:180;-1:-1:-1;3353:180:1:o;3935:118::-;4021:5;4014:13;4007:21;4000:5;3997:32;3987:60;;4043:1;4040;4033:12;4058:309;4123:6;4131;4184:2;4172:9;4163:7;4159:23;4155:32;4152:52;;;4200:1;4197;4190:12;4152:52;4239:9;4226:23;4258:28;4280:5;4258:28;:::i;4372:382::-;4437:6;4445;4498:2;4486:9;4477:7;4473:23;4469:32;4466:52;;;4514:1;4511;4504:12;4466:52;4553:9;4540:23;4572:31;4597:5;4572:31;:::i;:::-;4622:5;-1:-1:-1;4679:2:1;4664:18;;4651:32;4692:30;4651:32;4692:30;:::i;:::-;4741:7;4731:17;;;4372:382;;;;;:::o;4759:316::-;4836:6;4844;4852;4905:2;4893:9;4884:7;4880:23;4876:32;4873:52;;;4921:1;4918;4911:12;4873:52;-1:-1:-1;;4944:23:1;;;5014:2;4999:18;;4986:32;;-1:-1:-1;5065:2:1;5050:18;;;5037:32;;4759:316;-1:-1:-1;4759:316:1:o;5080:388::-;5148:6;5156;5209:2;5197:9;5188:7;5184:23;5180:32;5177:52;;;5225:1;5222;5215:12;5177:52;5264:9;5251:23;5283:31;5308:5;5283:31;:::i;:::-;5333:5;-1:-1:-1;5390:2:1;5375:18;;5362:32;5403:33;5362:32;5403:33;:::i;5473:908::-;5604:6;5612;5620;5628;5636;5689:2;5677:9;5668:7;5664:23;5660:32;5657:52;;;5705:1;5702;5695:12;5657:52;5744:9;5731:23;5763:31;5788:5;5763:31;:::i;:::-;5813:5;-1:-1:-1;5869:2:1;5854:18;;5841:32;5892:18;5922:14;;;5919:34;;;5949:1;5946;5939:12;5919:34;5988:70;6050:7;6041:6;6030:9;6026:22;5988:70;:::i;:::-;6077:8;;-1:-1:-1;5962:96:1;-1:-1:-1;6165:2:1;6150:18;;6137:32;;-1:-1:-1;6181:16:1;;;6178:36;;;6210:1;6207;6200:12;6178:36;;6249:72;6313:7;6302:8;6291:9;6287:24;6249:72;:::i;:::-;5473:908;;;;-1:-1:-1;5473:908:1;;-1:-1:-1;6340:8:1;;6223:98;5473:908;-1:-1:-1;;;5473:908:1:o;6386:380::-;6465:1;6461:12;;;;6508;;;6529:61;;6583:4;6575:6;6571:17;6561:27;;6529:61;6636:2;6628:6;6625:14;6605:18;6602:38;6599:161;;6682:10;6677:3;6673:20;6670:1;6663:31;6717:4;6714:1;6707:15;6745:4;6742:1;6735:15;6599:161;;6386:380;;;:::o;7180:356::-;7382:2;7364:21;;;7401:18;;;7394:30;7460:34;7455:2;7440:18;;7433:62;7527:2;7512:18;;7180:356::o;7956:127::-;8017:10;8012:3;8008:20;8005:1;7998:31;8048:4;8045:1;8038:15;8072:4;8069:1;8062:15;8088:422;8177:1;8220:5;8177:1;8234:270;8255:7;8245:8;8242:21;8234:270;;;8314:4;8310:1;8306:6;8302:17;8296:4;8293:27;8290:53;;;8323:18;;:::i;:::-;8373:7;8363:8;8359:22;8356:55;;;8393:16;;;;8356:55;8472:22;;;;8432:15;;;;8234:270;;;8238:3;8088:422;;;;;:::o;8515:806::-;8564:5;8594:8;8584:80;;-1:-1:-1;8635:1:1;8649:5;;8584:80;8683:4;8673:76;;-1:-1:-1;8720:1:1;8734:5;;8673:76;8765:4;8783:1;8778:59;;;;8851:1;8846:130;;;;8758:218;;8778:59;8808:1;8799:10;;8822:5;;;8846:130;8883:3;8873:8;8870:17;8867:43;;;8890:18;;:::i;:::-;-1:-1:-1;;8946:1:1;8932:16;;8961:5;;8758:218;;9060:2;9050:8;9047:16;9041:3;9035:4;9032:13;9028:36;9022:2;9012:8;9009:16;9004:2;8998:4;8995:12;8991:35;8988:77;8985:159;;;-1:-1:-1;9097:19:1;;;9129:5;;8985:159;9176:34;9201:8;9195:4;9176:34;:::i;:::-;9246:6;9242:1;9238:6;9234:19;9225:7;9222:32;9219:58;;;9257:18;;:::i;:::-;9295:20;;8515:806;-1:-1:-1;;;8515:806:1:o;9326:140::-;9384:5;9413:47;9454:4;9444:8;9440:19;9434:4;9413:47;:::i;9471:168::-;9544:9;;;9575;;9592:15;;;9586:22;;9572:37;9562:71;;9613:18;;:::i;10000:127::-;10061:10;10056:3;10052:20;10049:1;10042:31;10092:4;10089:1;10082:15;10116:4;10113:1;10106:15;10132:135;10171:3;10192:17;;;10189:43;;10212:18;;:::i;:::-;-1:-1:-1;10259:1:1;10248:13;;10132:135::o;10272:217::-;10312:1;10338;10328:132;;10382:10;10377:3;10373:20;10370:1;10363:31;10417:4;10414:1;10407:15;10445:4;10442:1;10435:15;10328:132;-1:-1:-1;10474:9:1;;10272:217::o;10904:125::-;10969:9;;;10990:10;;;10987:36;;;11003:18;;:::i;13533:184::-;13603:6;13656:2;13644:9;13635:7;13631:23;13627:32;13624:52;;;13672:1;13669;13662:12;13624:52;-1:-1:-1;13695:16:1;;13533:184;-1:-1:-1;13533:184:1:o;14001:245::-;14068:6;14121:2;14109:9;14100:7;14096:23;14092:32;14089:52;;;14137:1;14134;14127:12;14089:52;14169:9;14163:16;14188:28;14210:5;14188:28;:::i;19402:401::-;19604:2;19586:21;;;19643:2;19623:18;;;19616:30;19682:34;19677:2;19662:18;;19655:62;-1:-1:-1;;;19748:2:1;19733:18;;19726:35;19793:3;19778:19;;19402:401::o;19808:399::-;20010:2;19992:21;;;20049:2;20029:18;;;20022:30;20088:34;20083:2;20068:18;;20061:62;-1:-1:-1;;;20154:2:1;20139:18;;20132:33;20197:3;20182:19;;19808:399::o;22441:128::-;22508:9;;;22529:11;;;22526:37;;;22543:18;;:::i;23402:251::-;23472:6;23525:2;23513:9;23504:7;23500:23;23496:32;23493:52;;;23541:1;23538;23531:12;23493:52;23573:9;23567:16;23592:31;23617:5;23592:31;:::i;23658:980::-;23920:4;23968:3;23957:9;23953:19;23999:6;23988:9;23981:25;24025:2;24063:6;24058:2;24047:9;24043:18;24036:34;24106:3;24101:2;24090:9;24086:18;24079:31;24130:6;24165;24159:13;24196:6;24188;24181:22;24234:3;24223:9;24219:19;24212:26;;24273:2;24265:6;24261:15;24247:29;;24294:1;24304:195;24318:6;24315:1;24312:13;24304:195;;;24383:13;;-1:-1:-1;;;;;24379:39:1;24367:52;;24474:15;;;;24439:12;;;;24415:1;24333:9;24304:195;;;-1:-1:-1;;;;;;;24555:32:1;;;;24550:2;24535:18;;24528:60;-1:-1:-1;;;24619:3:1;24604:19;24597:35;24516:3;23658:980;-1:-1:-1;;;23658:980:1:o;25255:306::-;25343:6;25351;25359;25412:2;25400:9;25391:7;25387:23;25383:32;25380:52;;;25428:1;25425;25418:12;25380:52;25457:9;25451:16;25441:26;;25507:2;25496:9;25492:18;25486:25;25476:35;;25551:2;25540:9;25536:18;25530:25;25520:35;;25255:306;;;;;:::o

Swarm Source

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