ETH Price: $2,910.26 (+1.28%)
 

Overview

Max Total Supply

100,000,000 GREEN

Holders

89

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
54,288.84078672 GREEN

Value
$0.00
0x7886dfa40b84be79cadcbe7283bd6b97b27fbf6c
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:
GREEN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-26
*/

/**

🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢  LINKS  🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢

Telegram:  https://t.me/GreenERC20

Website:   https://www.greengreengreen.green

Docs:      https://docs.greengreengreen.green

Twitter:   https://twitter.greengreengreen.green

🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢  BASICS  🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢

$GREEN has a max supply of 100,000,000 tokens.

With each buy of $100 or more, a new 🟢 emoji is added to the token name and website background.

50% of taxes are reflected to token holders and paid out in ETH. The other 50% goes to marketing.

🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢  BUY TAX  🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢

$GREEN has a maximum buy tax of 7%.

The buy tax starts at 7% and drops by 1%, until 0%, for every 15 seconds that pass without a new buy.

🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢  SELL TAX  🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢

$GREEN has a maxmimum sell tax of 7%.

The sell tax starts at 0% and rises by 1%, up to 7%, for every sell within 30 seconds of the previous sell.

🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢  REFLECTIONS  🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢

Reflections must be claimed on the $GREEN dapp or by calling the claimDividends() function on the $GREEN token contract.

Wallets that fail to claim reflections before selling lose them, and they are automatically redistribtued to all remaining holders.

🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢🟢

*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.14;

// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

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

  function version() external view returns (uint256);

  function getRoundData(
    uint80 _roundId
  ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);

  function latestRoundData()
    external
    view
    returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}

contract GREEN is Context, IERC20, Ownable {
    string public constant Perfection = unicode"🟢";

    string private _name = unicode"🟢";
    string private constant _symbol = "GREEN";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromDividend;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    address payable private _developerWallet = payable(msg.sender);
    address payable private _marketingWallet = payable(msg.sender);

    bool private dividends = true;
    uint256 public dividendShares = 1;
    uint256 public dividendPerToken;
    uint256 public dividendBalanceTotal;
    uint256 public dividendClaimedTotal;
    mapping(address => uint256) dividendBalance;
    mapping(address => uint256) dividendCredited;
    mapping(address => uint256) dividendClaimed;

    IUniswapV2Router02 public constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Factory public constant uniswapV2Factory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public immutable GREEN;
    IWETH public constant wethContract = IWETH(WETH);
    IERC20 public constant weth = IERC20(WETH);
    address public immutable uniswapV2Pair;
    AggregatorV3Interface public constant chainlinkFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);

    bool private tradingOpen;
    bool private inAtomicSwap;
    bool private inContractSwap;

    uint256 public maxSwap = 2000000 * 10**9;
    uint256 public maxWallet = 2000000 * 10**9;
    uint256 private constant _triggerSwap = 10**9;

    uint256 public lastPoolBalance = 1 ether;

    event Deposit(address indexed from, uint256 value);
    event Claim(address indexed to, uint256 value);

    uint256 public constant BUY_COOLDOWN = 15;
    uint256 public constant SELL_COOLDOWN = 30;
    uint256 public constant BUY_TAX_MAX = 7;
    uint256 public constant SELL_TAX_MAX = 7;
    uint256 public constant BUY_TAX_DEFAULT = 7;
    uint256 public constant SELL_TAX_DEFAULT = 0;

    uint256 private _lastBuy = block.timestamp;
    uint256 private _lastSell;
    uint256 private _sellStreak;

    uint256 private _taxFeeOnBuy = BUY_TAX_DEFAULT;
    uint256 private _taxFeeOnSell = SELL_TAX_DEFAULT;
    uint256 private _taxFee = BUY_TAX_DEFAULT;

    uint256 public constant BUY_EMOJI_TRIGGER = 100;

    modifier lockAtomicSwap {
        inAtomicSwap = true;
        _;
        inAtomicSwap = false;
    }

    constructor() {
        GREEN = address(this);
        uniswapV2Pair = uniswapV2Factory.createPair(GREEN, WETH);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[GREEN] = true;
        _isExcludedFromFee[_developerWallet] = true;
        _isExcludedFromFee[_marketingWallet] = true;

        _isExcludedFromDividend[owner()] = true;
        _isExcludedFromDividend[GREEN] = true;
        _isExcludedFromDividend[address(uniswapV2Router)] = true;
        _isExcludedFromDividend[uniswapV2Pair] = true;
        _isExcludedFromDividend[address(0x0)] = true;
        _isExcludedFromDividend[address(0xdead)] = true;

        _approve(GREEN, address(uniswapV2Router), MAX);
        _approve(owner(), address(uniswapV2Router), MAX);

        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

    function getMeaningOfLife() external pure returns (string memory) {
        return Perfection;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

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

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

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

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function _removeTax() private returns (uint256) {
        if (_taxFee == 0) {
            return 0;
        }

        uint256 _taxFeePrevious = _taxFee;
        _taxFee = 0;
        return _taxFeePrevious;
    }

    function _restoreTax(uint256 _taxFeePrevious) private {
        _taxFee = _taxFeePrevious;
    }

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "TOKEN: Transfer amount must exceed zero");

        if (from != owner() && to != owner() && from != GREEN && to != GREEN) {
            if (!tradingOpen) {
                require(from == GREEN, "TOKEN: This account cannot send tokens until trading is enabled");
            }

            require(amount <= maxSwap, "TOKEN: Max Transaction Limit");

            if (to != uniswapV2Pair) {
                require(balanceOf(to) + amount <= maxWallet, "TOKEN: Balance exceeds wallet size!");
            }

            uint256 contractTokenBalance = balanceOf(GREEN);
            bool canSwap = contractTokenBalance >= _triggerSwap;

            if (contractTokenBalance >= maxSwap) {
                contractTokenBalance = maxSwap;
            }

            if (canSwap && !inAtomicSwap && from != uniswapV2Pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                inContractSwap = true;
                swapTokensForEth(contractTokenBalance);
                inContractSwap = false;
                if (GREEN.balance > 0) {
                    sendETHToFee(GREEN.balance / 2);
                    _depositDividends(GREEN, GREEN.balance);
                }
            }
        }

        bool takeFee = true;

        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _taxFee = getBuyTax();
                _taxFeeOnBuy = _taxFee;
                uint256 _poolBalance = getPoolBalance();
                if (_poolBalance > lastPoolBalance) {
                    uint256 _ETHAmount = _poolBalance - lastPoolBalance;
                    uint256 _USDAmount = getBuyValue(_ETHAmount);
                    if (_USDAmount >= BUY_EMOJI_TRIGGER) {
                        _addEmoji();
                    }
                }
                _lastBuy = block.timestamp;
            }
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _updateSellStreak();
                _taxFee = getSellTax();
                _taxFeeOnSell = _taxFee;
                _lastSell = block.timestamp;
            }
        }

        lastPoolBalance = getPoolBalance();

        _tokenTransfer(from, to, amount, takeFee);
    }

    function getBuyTax() public view returns (uint256) {
        uint256 _difference = block.timestamp - _lastBuy;
        uint256 _epochs = _difference / BUY_COOLDOWN;
        return BUY_TAX_MAX - (_epochs > BUY_TAX_MAX ? BUY_TAX_MAX : _epochs);
    }

    function getSellTax() public view returns (uint256) {
        return _sellStreak > SELL_TAX_MAX ? SELL_TAX_MAX : _sellStreak;
    }

    function _updateSellStreak() private {
        uint256 _difference = block.timestamp - _lastSell;
        if (SELL_COOLDOWN >= _difference) {
            _sellStreak++;
        } else {
            _sellStreak = 0;
        }
    }

    function getETHPrice() public view returns (uint256) {
        (, int256 answer,,,) = chainlinkFeed.latestRoundData();
        return uint256(answer / 1e8);
    }

    function getBuyValue(uint256 _ETHAmount) public view returns (uint256) {
        return _ETHAmount * getETHPrice() / 1e18;
    }

    function getPoolBalance() public view returns (uint256) {
        return weth.balanceOf(uniswapV2Pair);
    }

    function getMarketCap() external view returns (uint256) {
        if (balanceOf(uniswapV2Pair) > 0) {
            return (((getPoolBalance() * getETHPrice()) / 1e18) * (totalSupply() / balanceOf(uniswapV2Pair))) * 2;
        }

        return 0;
    }

    function _addEmoji() private {
        _name = string(abi.encodePacked(_name, unicode"🟢"));
    }

    function swapTokensForEth(uint256 _tokenAmount) private lockAtomicSwap {
        address[] memory path = new address[](2);
        path[0] = GREEN;
        path[1] = WETH;
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(_tokenAmount, 0, path, GREEN, block.timestamp + 3600);
    }

    function sendETHToFee(uint256 _ETHAmount) private {
        payable(_marketingWallet).call{value: _ETHAmount}("");
    }

    function enableTrading() external onlyOwner {
        tradingOpen = true;
    }

    function removeLimits() external onlyOwner {
        maxSwap = _tTotal;
        maxWallet = _tTotal;
    }

    function setDividends(bool _dividends) external onlyOwner {
        dividends = _dividends;
    }

    function swapTokensForEthManual(uint256 _contractTokenBalance) external {
        require(_msgSender() == _developerWallet || _msgSender() == _marketingWallet);
        swapTokensForEth(_contractTokenBalance);
    }

    function sendETHToFeeManual(uint256 _contractETHBalance) external {
        require(_msgSender() == _developerWallet || _msgSender() == _marketingWallet);
        uint256 _wethRemainder = weth.balanceOf(GREEN);
        if (_wethRemainder > 0) {
            wethContract.withdraw(_wethRemainder);
        }
        sendETHToFee(_contractETHBalance + _wethRemainder);
    }

    function _tokenFromReflection(uint256 rAmount) private view returns (uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        return (!inContractSwap && inAtomicSwap) ? totalSupply() * 1e4 : rAmount / _getRate();
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee) {
            uint256 _taxFeePrevious = _removeTax();
            _transferStandard(sender, recipient, amount);
            _restoreTax(_taxFeePrevious);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        _refreshDividends(sender);
        _refreshDividends(recipient);
        if (!inAtomicSwap || inContractSwap) {
            uint256 _senderBalanceBefore = balanceOf(sender);
            uint256 _recipientBalanceBefore = balanceOf(recipient);
            (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
            _rOwned[sender] = _rOwned[sender] - rAmount;
            _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
            _rOwned[GREEN] = _rOwned[GREEN] + (tTeam * _getRate());
            _rTotal = _rTotal - rFee;
            if (dividends) {
                if (_isExcludedFromDividend[sender] && !_isExcludedFromDividend[recipient]) {
                    dividendShares = dividendShares + (balanceOf(recipient) - _recipientBalanceBefore);
                }
                if (!_isExcludedFromDividend[sender] && _isExcludedFromDividend[recipient]) {
                    uint256 _difference = (_senderBalanceBefore - balanceOf(sender));
                    dividendShares = dividendShares > _difference ? dividendShares - _difference : 1;
                }
            }
            emit Transfer(sender, recipient, tTransferAmount);
        } else {
            emit Transfer(sender, recipient, tAmount);
        }
        if (dividends) {
            if (dividendBalance[sender] > 0 && balanceOf(sender) == 0) {
                _claimDividends(sender, false);
            }
            if (dividendBalance[recipient] > 0 && balanceOf(recipient) == 0) {
                _claimDividends(recipient, false);
            }
        }
    }

    function getDividendPerToken() external view returns (uint256) {
        return dividendPerToken;
    }

    function getDividendsTotal() external view returns (uint256) {
        return dividendBalanceTotal;
    }

    function getClaimedTotal() external view returns (uint256) {
        return dividendClaimedTotal;
    }

    function getDividends(address account) public view returns (uint256) {
        return dividendBalance[account] + ((balanceOf(account) * (dividendPerToken - dividendCredited[account])) / 1e27);
    }

    function getClaimed(address account) external view returns (uint256) {
        return dividendClaimed[account];
    }

    function getDividendBalance(address account) external view returns (uint256) {
        return dividendBalance[account];
    }

    function getDividendShares() external view returns (uint256) {
        return dividendShares;
    }

    function _refreshDividends(address account) private {
        if (!dividends) return;
        if (!_isExcludedFromDividend[account]) {
            dividendBalance[account] = getDividends(account);
            dividendCredited[account] = dividendPerToken;
        }
    }

    function circulatingSupply() external view returns (uint256) {
        return totalSupply() - balanceOf(GREEN) - balanceOf(uniswapV2Pair) - balanceOf(address(uniswapV2Router)) - balanceOf(address(0x0)) - balanceOf(address(0xdead));
    }

    function _depositDividends(address _from, uint256 _ETHAmount) private {
        if (!dividends) return;
        if (_ETHAmount > 0) {
            emit Deposit(_from, _ETHAmount);
            dividendBalanceTotal = dividendBalanceTotal + _ETHAmount;
            dividendPerToken = dividendPerToken + ((_ETHAmount * 1e27) / dividendShares);
            wethContract.deposit{value: _ETHAmount}();
        }
    }

    function depositDividends() public payable {
        _depositDividends(msg.sender, msg.value);
    }

    function _claimDividends(address account, bool manual) private {
        if (!dividends) return;
        if (manual) {
            _refreshDividends(account);
        }
        uint256 _unclaimed = dividendBalance[account];
        if (_unclaimed > 0) {
            if (manual) {
                emit Claim(msg.sender, _unclaimed);
                dividendClaimedTotal = dividendClaimedTotal + _unclaimed;
                dividendClaimed[msg.sender] = dividendClaimed[msg.sender] + _unclaimed;
                wethContract.withdraw(_unclaimed);
                dividendBalance[msg.sender] = 0;
                if (balanceOf(msg.sender) == 0) {
                    dividendCredited[msg.sender] = 0;
                }
                payable(msg.sender).call{value: _unclaimed}("");
            } else {
                emit Claim(GREEN, _unclaimed);
                dividendClaimedTotal = dividendClaimedTotal + _unclaimed;
                dividendClaimed[GREEN] = dividendClaimed[GREEN] + _unclaimed;
                wethContract.withdraw(_unclaimed);
                dividendBalance[account] = 0;
                if (balanceOf(account) == 0) {
                    dividendCredited[account] = 0;
                }
                _depositDividends(GREEN, _unclaimed);
            }
        }
    }

    function claimDividends() external {
        _claimDividends(msg.sender, true);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, 0, _taxFee);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tTeam, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(uint256 tAmount, uint256 redisFee, uint256 taxFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount * redisFee / 100;
        uint256 tTeam = tAmount * taxFee / 100;
        return (tAmount - tFee - tTeam, tFee, tTeam);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        return (rAmount, rAmount - rFee - (tTeam * currentRate), rFee);
    }

    function _getRate() private view returns (uint256) {
        return _rTotal / _tTotal;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BUY_COOLDOWN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUY_EMOJI_TRIGGER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUY_TAX_DEFAULT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUY_TAX_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GREEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Perfection","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELL_COOLDOWN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELL_TAX_DEFAULT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELL_TAX_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainlinkFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"depositDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dividendBalanceTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendClaimedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ETHAmount","type":"uint256"}],"name":"getBuyValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getDividendBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDividendPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDividendShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDividendsTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMeaningOfLife","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPoolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPoolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contractETHBalance","type":"uint256"}],"name":"sendETHToFeeManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_dividends","type":"bool"}],"name":"setDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contractTokenBalance","type":"uint256"}],"name":"swapTokensForEthManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethContract","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600460c090815263784fcfd160e11b60e052600190620000269082620005cd565b506200003d67016345785d8a000060001962000699565b6200004b90600019620006bc565b6007908155600880546001600160a01b031916339081179091556009805460ff60a01b199092166001600160a81b031990921691909117600160a01b1790556001600a5566071afd498d00006012819055601355670de0b6b3a76400006014554260155560188190556000601955601a55348015620000c957600080fd5b50620000d533620003ac565b3060808190526040516364e329cb60e11b8152600481019190915273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26024820152735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063c9c65396906044016020604051808303816000875af115801562000149573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016f9190620006e4565b6001600160a01b031660a052600160056000620001946000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556080518216815260059093528183208054851660019081179091556008548216845282842080548616821790556009549091168352908220805490931681179092556006906200021a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055608051808316825260069094528281208054861660019081179091557f8cb3563b79eac8102a826f0dcb81e7e954d7df2b15d07edcb2dd2b236c2078b4805487168217905560a051909216815291822080548516821790557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8805485168217905561dead9091527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054909316179091556200031c90737a250d5630b4cf539739df2c5dacb4c659f2488d600019620003fc565b62000351620003336000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d600019620003fc565b60075433600081815260026020908152604080832094909455925167016345785d8a00008152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000716565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316620004645760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004c75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200045b565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200055357607f821691505b6020821081036200057457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005c857600081815260208120601f850160051c81016020861015620005a35750805b601f850160051c820191505b81811015620005c457828155600101620005af565b5050505b505050565b81516001600160401b03811115620005e957620005e962000528565b6200060181620005fa84546200053e565b846200057a565b602080601f831160018114620006395760008415620006205750858301515b600019600386901b1c1916600185901b178555620005c4565b600085815260208120601f198616915b828110156200066a5788860151825594840194600190910190840162000649565b5085821015620006895787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082620006b757634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620006de57634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215620006f757600080fd5b81516001600160a01b03811681146200070f57600080fd5b9392505050565b60805160a051612d4e620008006000396000818161053c01528181610e5501528181610e8401528181610f4001528181611080015281816115e7015281816116f3015281816118a6015281816118e30152818161192701526119e801526000818161066501528181610d4101528181610f690152818161146a015281816114a8015281816114ee01528181611696015281816117a7015281816117df0152818161180a0152818161182b01528181611c2601528181611ca201528181611cde01528181611dc501528181611fce015281816120800152818161246201526124a50152612d4e6000f3fe60806040526004361061037a5760003560e01c806385b37321116101d1578063b0bc85de11610102578063defa92ee116100a0578063f31d61631161006f578063f31d6163146109b0578063f8b45b05146109c5578063f9e918a1146109db578063ff883fbb1461080d57600080fd5b8063defa92ee1461093d578063eb46260e14610945578063eb6715b81461097b578063f2fde38b1461099057600080fd5b8063d21a3d63116100dc578063d21a3d63146108cc578063d49c4c56146108e1578063d7e030ad1461080d578063dd62ed3e146108f757600080fd5b8063b0bc85de14610881578063c4918b4e14610896578063cc2d04aa146108ac57600080fd5b806395d89b411161016f578063a607a8d911610149578063a607a8d914610837578063a9059cbb1461084c578063abd70aa21461086c578063ad5c4648146104e257600080fd5b806395d89b41146107df5780639bcc76421461080d5780639ccab6951461082257600080fd5b80638da5cb5b116101ab5780638da5cb5b1461077757806390526cf21461079557806390825c28146107b55780639358928b146107ca57600080fd5b806385b373211461071257806387f91de3146107325780638a8c523c1461076257600080fd5b806357b71963116102ab578063751039fc116102495780637aab9811116102235780637aab9811146106875780637dbdf1f51461069d578063803da11b146106c5578063858af522146106e557600080fd5b8063751039fc1461062857806377ec0feb1461063d57806378ec96a01461065357600080fd5b8063668038e011610285578063668038e0146105c757806370a08231146105de578063715018a6146105fe578063719dfc3d1461061357600080fd5b806357b719631461057357806359d0f7131461058957806364c0980d146105b157600080fd5b8063313ce567116103185780634634d81c116102f25780634634d81c1461050a5780634780eac1146104e257806349bd5a5e1461052a5780634c0617b51461055e57600080fd5b8063313ce5671461049057806331cece42146104ac5780633fc8cef3146104e257600080fd5b80631694505e116103545780631694505e1461040057806318160ddd1461044057806323b872dd1461045b578063252d723a1461047b57600080fd5b806306d825a21461038657806306fdde03146103ae578063095ea7b3146103d057600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b601e81565b6040519081526020015b60405180910390f35b3480156103ba57600080fd5b506103c36109f0565b6040516103a59190612812565b3480156103dc57600080fd5b506103f06103eb36600461287c565b610a82565b60405190151581526020016103a5565b34801561040c57600080fd5b50610428737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103a5565b34801561044c57600080fd5b5067016345785d8a000061039b565b34801561046757600080fd5b506103f06104763660046128a6565b610a99565b34801561048757600080fd5b5061039b610b74565b34801561049c57600080fd5b50604051600981526020016103a5565b3480156104b857600080fd5b5061039b6104c73660046128e2565b6001600160a01b03166000908152600e602052604090205490565b3480156104ee57600080fd5b5061042873c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561051657600080fd5b5061039b6105253660046128e2565b610bb9565b34801561053657600080fd5b506104287f000000000000000000000000000000000000000000000000000000000000000081565b34801561056a57600080fd5b5061039b600f81565b34801561057f57600080fd5b5061039b600a5481565b34801561059557600080fd5b50610428735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b3480156105bd57600080fd5b5061039b60145481565b3480156105d357600080fd5b506105dc610c2c565b005b3480156105ea57600080fd5b5061039b6105f93660046128e2565b610c39565b34801561060a57600080fd5b506105dc610c5b565b34801561061f57600080fd5b50600b5461039b565b34801561063457600080fd5b506105dc610c6d565b34801561064957600080fd5b5061039b600b5481565b34801561065f57600080fd5b506104287f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061039b600c5481565b3480156106a957600080fd5b50610428735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b3480156106d157600080fd5b5061039b6106e0366004612904565b610c88565b3480156106f157600080fd5b50604080518082019091526004815263784fcfd160e11b60208201526103c3565b34801561071e57600080fd5b506105dc61072d36600461291d565b610caf565b34801561073e57600080fd5b506103c360405180604001604052806004815260200163784fcfd160e11b81525081565b34801561076e57600080fd5b506105dc610cd5565b34801561078357600080fd5b506000546001600160a01b0316610428565b3480156107a157600080fd5b506105dc6107b0366004612904565b610cec565b3480156107c157600080fd5b5061039b610e4d565b3480156107d657600080fd5b5061039b610f07565b3480156107eb57600080fd5b5060408051808201909152600581526423a922a2a760d91b60208201526103c3565b34801561081957600080fd5b5061039b600781565b34801561082e57600080fd5b50600a5461039b565b34801561084357600080fd5b5061039b610fc7565b34801561085857600080fd5b506103f061086736600461287c565b61105c565b34801561087857600080fd5b5061039b611069565b34801561088d57600080fd5b5061039b611108565b3480156108a257600080fd5b5061039b60125481565b3480156108b857600080fd5b506105dc6108c7366004612904565b611121565b3480156108d857600080fd5b5061039b606481565b3480156108ed57600080fd5b5061039b600d5481565b34801561090357600080fd5b5061039b61091236600461293f565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6105dc61116b565b34801561095157600080fd5b5061039b6109603660046128e2565b6001600160a01b031660009081526010602052604090205490565b34801561098757600080fd5b50600d5461039b565b34801561099c57600080fd5b506105dc6109ab3660046128e2565b611175565b3480156109bc57600080fd5b5061039b600081565b3480156109d157600080fd5b5061039b60135481565b3480156109e757600080fd5b50600c5461039b565b6060600180546109ff90612972565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90612972565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8f3384846111eb565b5060015b92915050565b6000610aa684848461130f565b6001600160a01b0384166000908152600460209081526040808320338452909152902054821115610b2f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6001600160a01b038416600090815260046020908152604080832033808552925290912054610b6a918691610b659086906129c2565b6111eb565b5060019392505050565b60008060155442610b8591906129c2565b90506000610b94600f836129eb565b905060078111610ba45780610ba7565b60075b610bb29060076129c2565b9250505090565b6001600160a01b0381166000908152600f6020526040812054600b546b033b2e3c9fd0803ce800000091610bec916129c2565b610bf584610c39565b610bff91906129ff565b610c0991906129eb565b6001600160a01b0383166000908152600e6020526040902054610a939190612a16565b610c37336001611a83565b565b6001600160a01b038116600090815260026020526040812054610a9390611def565b610c63611ea5565b610c376000611eff565b610c75611ea5565b67016345785d8a00006012819055601355565b6000670de0b6b3a7640000610c9b610fc7565b610ca590846129ff565b610a9391906129eb565b610cb7611ea5565b60098054911515600160a01b0260ff60a01b19909216919091179055565b610cdd611ea5565b6011805460ff19166001179055565b6008546001600160a01b0316336001600160a01b03161480610d2157506009546001600160a01b0316336001600160a01b0316145b610d2a57600080fd5b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc99190612a29565b90508015610e3757604051632e1a7d4d60e01b81526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b505050505b610e49610e448284612a16565b611f4f565b5050565b600080610e797f0000000000000000000000000000000000000000000000000000000000000000610c39565b1115610f0157610ea87f0000000000000000000000000000000000000000000000000000000000000000610c39565b610eba9067016345785d8a00006129eb565b670de0b6b3a7640000610ecb610fc7565b610ed3611069565b610edd91906129ff565b610ee791906129eb565b610ef191906129ff565b610efc9060026129ff565b905090565b50600090565b6000610f1461dead610c39565b610f1e6000610c39565b610f3b737a250d5630b4cf539739df2c5dacb4c659f2488d610c39565b610f647f0000000000000000000000000000000000000000000000000000000000000000610c39565b610f8d7f0000000000000000000000000000000000000000000000000000000000000000610c39565b610f9f9067016345785d8a00006129c2565b610fa991906129c2565b610fb391906129c2565b610fbd91906129c2565b610efc91906129c2565b600080735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561101c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110409190612a5c565b5050509150506305f5e100816110569190612aac565b91505090565b6000610a8f33848461130f565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190612a29565b600060076017541161111b575060175490565b50600790565b6008546001600160a01b0316336001600160a01b0316148061115657506009546001600160a01b0316336001600160a01b0316145b61115f57600080fd5b61116881611f9c565b50565b610c37333461210c565b61117d611ea5565b6001600160a01b0381166111e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b26565b61116881611eff565b6001600160a01b03831661124d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b26565b6001600160a01b0382166112ae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b26565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113735760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b26565b6001600160a01b0382166113d55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b26565b600081116114355760405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a205472616e7366657220616d6f756e74206d75737420657863656044820152666564207a65726f60c81b6064820152608401610b26565b6000546001600160a01b0384811691161480159061146157506000546001600160a01b03838116911614155b801561149f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b80156114dd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561185c5760115460ff16611593577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146115935760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610b26565b6012548111156115e55760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610b26565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461168f576013548161162b84610c39565b6116359190612a16565b111561168f5760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610b26565b60006116ba7f0000000000000000000000000000000000000000000000000000000000000000610c39565b601254909150633b9aca008210159082106116d55760125491505b8080156116ea5750601154610100900460ff16155b801561172857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561174d57506001600160a01b03851660009081526005602052604090205460ff16155b801561177257506001600160a01b03841660009081526005602052604090205460ff16155b15611859576011805462ff000019166201000017905561179182611f9c565b6011805462ff0000191690556001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016311561185957611805610e4460026001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016316129eb565b6118597f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163161210c565b50505b6001600160a01b03831660009081526005602052604090205460019060ff168061189e57506001600160a01b03831660009081526005602052604090205460ff165b8061191857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415801561191857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b1561192557506000611a66565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561198357506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b156119e657611990610b74565b601a81905560185560006119a2611069565b90506014548111156119e0576000601454826119be91906129c2565b905060006119cb82610c88565b9050606481106119dd576119dd61221d565b50505b50426015555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015611a4457506001600160a01b038416737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611a6657611a5161224c565b611a59611108565b601a819055601955426016555b611a6e611069565b601455611a7d84848484612286565b50505050565b600954600160a01b900460ff16611a98575050565b8015611aa757611aa7826122bc565b6001600160a01b0382166000908152600e60205260409020548015611dea578115611c245760405181815233907f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49060200160405180910390a280600d54611b0f9190612a16565b600d5533600090815260106020526040902054611b2d908290612a16565b33600090815260106020526040908190209190915551632e1a7d4d60e01b81526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015611b8d57600080fd5b505af1158015611ba1573d6000803e3d6000fd5b5050336000818152600e6020526040812055611bbf92509050610c39565b600003611bd757336000908152600f60205260408120555b60405133908290600081818185875af1925050503d8060008114611c17576040519150601f19603f3d011682016040523d82523d6000602084013e611c1c565b606091505b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d482604051611c7f91815260200190565b60405180910390a280600d54611c959190612a16565b600d556001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260106020526040902054611cdc908290612a16565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600090815260106020526040908190209190915551632e1a7d4d60e01b81526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015611d6557600080fd5b505af1158015611d79573d6000803e3d6000fd5b5050506001600160a01b0384166000908152600e602052604081205550611d9f83610c39565b600003611dc0576001600160a01b0383166000908152600f60205260408120555b611dea7f00000000000000000000000000000000000000000000000000000000000000008261210c565b505050565b6000600754821115611e565760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b26565b60115462010000900460ff16158015611e765750601154610100900460ff165b611e9157611e82612327565b611e8c90836129eb565b610a93565b610a9367016345785d8a00006127106129ff565b6000546001600160a01b03163314610c375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b26565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611a7d576040519150601f19603f3d011682016040523d82523d6000602084013e611a7d565b6011805461ff0019166101001790556040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061200057612000612af0565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061204857612048612af0565b6001600160a01b0390921660209283029190910190910152737a250d5630b4cf539739df2c5dacb4c659f2488d63791ac947836000847f00000000000000000000000000000000000000000000000000000000000000006120ab42610e10612a16565b6040518663ffffffff1660e01b81526004016120cb959493929190612b06565b600060405180830381600087803b1580156120e557600080fd5b505af11580156120f9573d6000803e3d6000fd5b50506011805461ff001916905550505050565b600954600160a01b900460ff16612121575050565b8015610e4957816001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8260405161216291815260200190565b60405180910390a280600c546121789190612a16565b600c55600a54612194826b033b2e3c9fd0803ce80000006129ff565b61219e91906129eb565b600b546121ab9190612a16565b600b8190555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561220057600080fd5b505af1158015612214573d6000803e3d6000fd5b50505050505050565b600160405160200161222f9190612b77565b604051602081830303815290604052600190816111689190612c3f565b60006016544261225c91906129c2565b905080601e1061227e576017805490600061227683612cff565b919050555050565b600060175550565b806122b157600061229561233f565b90506122a285858561235e565b6122ab81601a55565b50611a7d565b611a7d84848461235e565b600954600160a01b900460ff166122d05750565b6001600160a01b03811660009081526006602052604090205460ff16611168576122f981610bb9565b6001600160a01b0382166000908152600e6020908152604080832093909355600b54600f9091529190205550565b600067016345785d8a0000600754610efc91906129eb565b6000601a546000036123515750600090565b50601a8054600090915590565b612367836122bc565b612370826122bc565b601154610100900460ff16158061238f575060115462010000900460ff165b1561263c57600061239f84610c39565b905060006123ac84610c39565b90506000806000806000806123c089612716565b95509550955095509550955085600260008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123fd91906129c2565b6001600160a01b03808d1660009081526002602052604080822093909355908c168152205461242d908690612a16565b6001600160a01b038b1660009081526002602052604090205561244e612327565b61245890826129ff565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526002602052604090205461249b9190612a16565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600260205260409020556007546124e29085906129c2565b600755600954600160a01b900460ff16156125e2576001600160a01b038b1660009081526006602052604090205460ff16801561253857506001600160a01b038a1660009081526006602052604090205460ff16155b1561256257866125478b610c39565b61255191906129c2565b600a5461255e9190612a16565b600a555b6001600160a01b038b1660009081526006602052604090205460ff161580156125a357506001600160a01b038a1660009081526006602052604090205460ff165b156125e25760006125b38c610c39565b6125bd908a6129c2565b905080600a54116125cf5760016125dd565b80600a546125dd91906129c2565b600a55505b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161262791815260200190565b60405180910390a3505050505050505061268a565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161268191815260200190565b60405180910390a35b600954600160a01b900460ff1615611dea576001600160a01b0383166000908152600e6020526040902054158015906126c957506126c783610c39565b155b156126d9576126d9836000611a83565b6001600160a01b0382166000908152600e602052604090205415801590612706575061270482610c39565b155b15611dea57611dea826000611a83565b60008060008060008060008060006127328a6000601a5461276a565b92509250925060008060006127508d868661274b612327565b6127c3565b919f909e50909c50959a5093985091965092945050505050565b6000808080606461277b87896129ff565b61278591906129eb565b905060006064612795878a6129ff565b61279f91906129eb565b9050806127ac838a6129c2565b6127b691906129c2565b9891975095509350505050565b60008080806127d285896129ff565b905060006127e086896129ff565b9050816127ed87896129ff565b6127f783856129c2565b61280191906129c2565b909a90995090975095505050505050565b600060208083528351808285015260005b8181101561283f57858101830151858201604001528201612823565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461287757600080fd5b919050565b6000806040838503121561288f57600080fd5b61289883612860565b946020939093013593505050565b6000806000606084860312156128bb57600080fd5b6128c484612860565b92506128d260208501612860565b9150604084013590509250925092565b6000602082840312156128f457600080fd5b6128fd82612860565b9392505050565b60006020828403121561291657600080fd5b5035919050565b60006020828403121561292f57600080fd5b813580151581146128fd57600080fd5b6000806040838503121561295257600080fd5b61295b83612860565b915061296960208401612860565b90509250929050565b600181811c9082168061298657607f821691505b6020821081036129a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a9357610a936129ac565b634e487b7160e01b600052601260045260246000fd5b6000826129fa576129fa6129d5565b500490565b8082028115828204841417610a9357610a936129ac565b80820180821115610a9357610a936129ac565b600060208284031215612a3b57600080fd5b5051919050565b805169ffffffffffffffffffff8116811461287757600080fd5b600080600080600060a08688031215612a7457600080fd5b612a7d86612a42565b9450602086015193506040860151925060608601519150612aa060808701612a42565b90509295509295909350565b600082612abb57612abb6129d5565b600160ff1b821460001984141615612ad557612ad56129ac565b500590565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b565784516001600160a01b031683529383019391830191600101612b31565b50506001600160a01b03969096166060850152505050608001529392505050565b6000808354612b8581612972565b60018281168015612b9d5760018114612bb257612be1565b60ff1984168752821515830287019450612be1565b8760005260208060002060005b85811015612bd85781548a820152908401908201612bbf565b50505082870194505b505063784fcfd160e11b835250506004019392505050565b601f821115611dea57600081815260208120601f850160051c81016020861015612c205750805b601f850160051c820191505b81811015611c1c57828155600101612c2c565b815167ffffffffffffffff811115612c5957612c59612ada565b612c6d81612c678454612972565b84612bf9565b602080601f831160018114612ca25760008415612c8a5750858301515b600019600386901b1c1916600185901b178555611c1c565b600085815260208120601f198616915b82811015612cd157888601518255948401946001909101908401612cb2565b5085821015612cef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018201612d1157612d116129ac565b506001019056fea26469706673582212203834437517cfff719596329629c51f5725bc6cd649974401c1e861565de632cc64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c806385b37321116101d1578063b0bc85de11610102578063defa92ee116100a0578063f31d61631161006f578063f31d6163146109b0578063f8b45b05146109c5578063f9e918a1146109db578063ff883fbb1461080d57600080fd5b8063defa92ee1461093d578063eb46260e14610945578063eb6715b81461097b578063f2fde38b1461099057600080fd5b8063d21a3d63116100dc578063d21a3d63146108cc578063d49c4c56146108e1578063d7e030ad1461080d578063dd62ed3e146108f757600080fd5b8063b0bc85de14610881578063c4918b4e14610896578063cc2d04aa146108ac57600080fd5b806395d89b411161016f578063a607a8d911610149578063a607a8d914610837578063a9059cbb1461084c578063abd70aa21461086c578063ad5c4648146104e257600080fd5b806395d89b41146107df5780639bcc76421461080d5780639ccab6951461082257600080fd5b80638da5cb5b116101ab5780638da5cb5b1461077757806390526cf21461079557806390825c28146107b55780639358928b146107ca57600080fd5b806385b373211461071257806387f91de3146107325780638a8c523c1461076257600080fd5b806357b71963116102ab578063751039fc116102495780637aab9811116102235780637aab9811146106875780637dbdf1f51461069d578063803da11b146106c5578063858af522146106e557600080fd5b8063751039fc1461062857806377ec0feb1461063d57806378ec96a01461065357600080fd5b8063668038e011610285578063668038e0146105c757806370a08231146105de578063715018a6146105fe578063719dfc3d1461061357600080fd5b806357b719631461057357806359d0f7131461058957806364c0980d146105b157600080fd5b8063313ce567116103185780634634d81c116102f25780634634d81c1461050a5780634780eac1146104e257806349bd5a5e1461052a5780634c0617b51461055e57600080fd5b8063313ce5671461049057806331cece42146104ac5780633fc8cef3146104e257600080fd5b80631694505e116103545780631694505e1461040057806318160ddd1461044057806323b872dd1461045b578063252d723a1461047b57600080fd5b806306d825a21461038657806306fdde03146103ae578063095ea7b3146103d057600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b601e81565b6040519081526020015b60405180910390f35b3480156103ba57600080fd5b506103c36109f0565b6040516103a59190612812565b3480156103dc57600080fd5b506103f06103eb36600461287c565b610a82565b60405190151581526020016103a5565b34801561040c57600080fd5b50610428737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103a5565b34801561044c57600080fd5b5067016345785d8a000061039b565b34801561046757600080fd5b506103f06104763660046128a6565b610a99565b34801561048757600080fd5b5061039b610b74565b34801561049c57600080fd5b50604051600981526020016103a5565b3480156104b857600080fd5b5061039b6104c73660046128e2565b6001600160a01b03166000908152600e602052604090205490565b3480156104ee57600080fd5b5061042873c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561051657600080fd5b5061039b6105253660046128e2565b610bb9565b34801561053657600080fd5b506104287f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f281565b34801561056a57600080fd5b5061039b600f81565b34801561057f57600080fd5b5061039b600a5481565b34801561059557600080fd5b50610428735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b3480156105bd57600080fd5b5061039b60145481565b3480156105d357600080fd5b506105dc610c2c565b005b3480156105ea57600080fd5b5061039b6105f93660046128e2565b610c39565b34801561060a57600080fd5b506105dc610c5b565b34801561061f57600080fd5b50600b5461039b565b34801561063457600080fd5b506105dc610c6d565b34801561064957600080fd5b5061039b600b5481565b34801561065f57600080fd5b506104287f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b81565b34801561069357600080fd5b5061039b600c5481565b3480156106a957600080fd5b50610428735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b3480156106d157600080fd5b5061039b6106e0366004612904565b610c88565b3480156106f157600080fd5b50604080518082019091526004815263784fcfd160e11b60208201526103c3565b34801561071e57600080fd5b506105dc61072d36600461291d565b610caf565b34801561073e57600080fd5b506103c360405180604001604052806004815260200163784fcfd160e11b81525081565b34801561076e57600080fd5b506105dc610cd5565b34801561078357600080fd5b506000546001600160a01b0316610428565b3480156107a157600080fd5b506105dc6107b0366004612904565b610cec565b3480156107c157600080fd5b5061039b610e4d565b3480156107d657600080fd5b5061039b610f07565b3480156107eb57600080fd5b5060408051808201909152600581526423a922a2a760d91b60208201526103c3565b34801561081957600080fd5b5061039b600781565b34801561082e57600080fd5b50600a5461039b565b34801561084357600080fd5b5061039b610fc7565b34801561085857600080fd5b506103f061086736600461287c565b61105c565b34801561087857600080fd5b5061039b611069565b34801561088d57600080fd5b5061039b611108565b3480156108a257600080fd5b5061039b60125481565b3480156108b857600080fd5b506105dc6108c7366004612904565b611121565b3480156108d857600080fd5b5061039b606481565b3480156108ed57600080fd5b5061039b600d5481565b34801561090357600080fd5b5061039b61091236600461293f565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6105dc61116b565b34801561095157600080fd5b5061039b6109603660046128e2565b6001600160a01b031660009081526010602052604090205490565b34801561098757600080fd5b50600d5461039b565b34801561099c57600080fd5b506105dc6109ab3660046128e2565b611175565b3480156109bc57600080fd5b5061039b600081565b3480156109d157600080fd5b5061039b60135481565b3480156109e757600080fd5b50600c5461039b565b6060600180546109ff90612972565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90612972565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8f3384846111eb565b5060015b92915050565b6000610aa684848461130f565b6001600160a01b0384166000908152600460209081526040808320338452909152902054821115610b2f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6001600160a01b038416600090815260046020908152604080832033808552925290912054610b6a918691610b659086906129c2565b6111eb565b5060019392505050565b60008060155442610b8591906129c2565b90506000610b94600f836129eb565b905060078111610ba45780610ba7565b60075b610bb29060076129c2565b9250505090565b6001600160a01b0381166000908152600f6020526040812054600b546b033b2e3c9fd0803ce800000091610bec916129c2565b610bf584610c39565b610bff91906129ff565b610c0991906129eb565b6001600160a01b0383166000908152600e6020526040902054610a939190612a16565b610c37336001611a83565b565b6001600160a01b038116600090815260026020526040812054610a9390611def565b610c63611ea5565b610c376000611eff565b610c75611ea5565b67016345785d8a00006012819055601355565b6000670de0b6b3a7640000610c9b610fc7565b610ca590846129ff565b610a9391906129eb565b610cb7611ea5565b60098054911515600160a01b0260ff60a01b19909216919091179055565b610cdd611ea5565b6011805460ff19166001179055565b6008546001600160a01b0316336001600160a01b03161480610d2157506009546001600160a01b0316336001600160a01b0316145b610d2a57600080fd5b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b16600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc99190612a29565b90508015610e3757604051632e1a7d4d60e01b81526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b505050505b610e49610e448284612a16565b611f4f565b5050565b600080610e797f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f2610c39565b1115610f0157610ea87f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f2610c39565b610eba9067016345785d8a00006129eb565b670de0b6b3a7640000610ecb610fc7565b610ed3611069565b610edd91906129ff565b610ee791906129eb565b610ef191906129ff565b610efc9060026129ff565b905090565b50600090565b6000610f1461dead610c39565b610f1e6000610c39565b610f3b737a250d5630b4cf539739df2c5dacb4c659f2488d610c39565b610f647f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f2610c39565b610f8d7f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b610c39565b610f9f9067016345785d8a00006129c2565b610fa991906129c2565b610fb391906129c2565b610fbd91906129c2565b610efc91906129c2565b600080735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561101c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110409190612a5c565b5050509150506305f5e100816110569190612aac565b91505090565b6000610a8f33848461130f565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f216600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190612a29565b600060076017541161111b575060175490565b50600790565b6008546001600160a01b0316336001600160a01b0316148061115657506009546001600160a01b0316336001600160a01b0316145b61115f57600080fd5b61116881611f9c565b50565b610c37333461210c565b61117d611ea5565b6001600160a01b0381166111e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b26565b61116881611eff565b6001600160a01b03831661124d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b26565b6001600160a01b0382166112ae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b26565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113735760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b26565b6001600160a01b0382166113d55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b26565b600081116114355760405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a205472616e7366657220616d6f756e74206d75737420657863656044820152666564207a65726f60c81b6064820152608401610b26565b6000546001600160a01b0384811691161480159061146157506000546001600160a01b03838116911614155b801561149f57507f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b6001600160a01b0316836001600160a01b031614155b80156114dd57507f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b6001600160a01b0316826001600160a01b031614155b1561185c5760115460ff16611593577f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b6001600160a01b0316836001600160a01b0316146115935760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610b26565b6012548111156115e55760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610b26565b7f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f26001600160a01b0316826001600160a01b03161461168f576013548161162b84610c39565b6116359190612a16565b111561168f5760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610b26565b60006116ba7f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b610c39565b601254909150633b9aca008210159082106116d55760125491505b8080156116ea5750601154610100900460ff16155b801561172857507f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f26001600160a01b0316856001600160a01b031614155b801561174d57506001600160a01b03851660009081526005602052604090205460ff16155b801561177257506001600160a01b03841660009081526005602052604090205460ff16155b15611859576011805462ff000019166201000017905561179182611f9c565b6011805462ff0000191690556001600160a01b037f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b16311561185957611805610e4460026001600160a01b037f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b16316129eb565b6118597f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b7f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b6001600160a01b03163161210c565b50505b6001600160a01b03831660009081526005602052604090205460019060ff168061189e57506001600160a01b03831660009081526005602052604090205460ff165b8061191857507f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f26001600160a01b0316846001600160a01b03161415801561191857507f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f26001600160a01b0316836001600160a01b031614155b1561192557506000611a66565b7f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f26001600160a01b0316846001600160a01b031614801561198357506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b156119e657611990610b74565b601a81905560185560006119a2611069565b90506014548111156119e0576000601454826119be91906129c2565b905060006119cb82610c88565b9050606481106119dd576119dd61221d565b50505b50426015555b7f0000000000000000000000006492ed2d831397832e20ca2ad8f4b65f2db306f26001600160a01b0316836001600160a01b0316148015611a4457506001600160a01b038416737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611a6657611a5161224c565b611a59611108565b601a819055601955426016555b611a6e611069565b601455611a7d84848484612286565b50505050565b600954600160a01b900460ff16611a98575050565b8015611aa757611aa7826122bc565b6001600160a01b0382166000908152600e60205260409020548015611dea578115611c245760405181815233907f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49060200160405180910390a280600d54611b0f9190612a16565b600d5533600090815260106020526040902054611b2d908290612a16565b33600090815260106020526040908190209190915551632e1a7d4d60e01b81526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015611b8d57600080fd5b505af1158015611ba1573d6000803e3d6000fd5b5050336000818152600e6020526040812055611bbf92509050610c39565b600003611bd757336000908152600f60205260408120555b60405133908290600081818185875af1925050503d8060008114611c17576040519150601f19603f3d011682016040523d82523d6000602084013e611c1c565b606091505b505050505050565b7f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b6001600160a01b03167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d482604051611c7f91815260200190565b60405180910390a280600d54611c959190612a16565b600d556001600160a01b037f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b16600090815260106020526040902054611cdc908290612a16565b7f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b6001600160a01b0316600090815260106020526040908190209190915551632e1a7d4d60e01b81526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015611d6557600080fd5b505af1158015611d79573d6000803e3d6000fd5b5050506001600160a01b0384166000908152600e602052604081205550611d9f83610c39565b600003611dc0576001600160a01b0383166000908152600f60205260408120555b611dea7f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b8261210c565b505050565b6000600754821115611e565760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b26565b60115462010000900460ff16158015611e765750601154610100900460ff165b611e9157611e82612327565b611e8c90836129eb565b610a93565b610a9367016345785d8a00006127106129ff565b6000546001600160a01b03163314610c375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b26565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611a7d576040519150601f19603f3d011682016040523d82523d6000602084013e611a7d565b6011805461ff0019166101001790556040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b8160008151811061200057612000612af0565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061204857612048612af0565b6001600160a01b0390921660209283029190910190910152737a250d5630b4cf539739df2c5dacb4c659f2488d63791ac947836000847f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b6120ab42610e10612a16565b6040518663ffffffff1660e01b81526004016120cb959493929190612b06565b600060405180830381600087803b1580156120e557600080fd5b505af11580156120f9573d6000803e3d6000fd5b50506011805461ff001916905550505050565b600954600160a01b900460ff16612121575050565b8015610e4957816001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8260405161216291815260200190565b60405180910390a280600c546121789190612a16565b600c55600a54612194826b033b2e3c9fd0803ce80000006129ff565b61219e91906129eb565b600b546121ab9190612a16565b600b8190555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561220057600080fd5b505af1158015612214573d6000803e3d6000fd5b50505050505050565b600160405160200161222f9190612b77565b604051602081830303815290604052600190816111689190612c3f565b60006016544261225c91906129c2565b905080601e1061227e576017805490600061227683612cff565b919050555050565b600060175550565b806122b157600061229561233f565b90506122a285858561235e565b6122ab81601a55565b50611a7d565b611a7d84848461235e565b600954600160a01b900460ff166122d05750565b6001600160a01b03811660009081526006602052604090205460ff16611168576122f981610bb9565b6001600160a01b0382166000908152600e6020908152604080832093909355600b54600f9091529190205550565b600067016345785d8a0000600754610efc91906129eb565b6000601a546000036123515750600090565b50601a8054600090915590565b612367836122bc565b612370826122bc565b601154610100900460ff16158061238f575060115462010000900460ff165b1561263c57600061239f84610c39565b905060006123ac84610c39565b90506000806000806000806123c089612716565b95509550955095509550955085600260008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123fd91906129c2565b6001600160a01b03808d1660009081526002602052604080822093909355908c168152205461242d908690612a16565b6001600160a01b038b1660009081526002602052604090205561244e612327565b61245890826129ff565b6001600160a01b037f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b1660009081526002602052604090205461249b9190612a16565b6001600160a01b037f00000000000000000000000080513a4fe1a71bae23eb74237cc2d61e5e50930b166000908152600260205260409020556007546124e29085906129c2565b600755600954600160a01b900460ff16156125e2576001600160a01b038b1660009081526006602052604090205460ff16801561253857506001600160a01b038a1660009081526006602052604090205460ff16155b1561256257866125478b610c39565b61255191906129c2565b600a5461255e9190612a16565b600a555b6001600160a01b038b1660009081526006602052604090205460ff161580156125a357506001600160a01b038a1660009081526006602052604090205460ff165b156125e25760006125b38c610c39565b6125bd908a6129c2565b905080600a54116125cf5760016125dd565b80600a546125dd91906129c2565b600a55505b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161262791815260200190565b60405180910390a3505050505050505061268a565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161268191815260200190565b60405180910390a35b600954600160a01b900460ff1615611dea576001600160a01b0383166000908152600e6020526040902054158015906126c957506126c783610c39565b155b156126d9576126d9836000611a83565b6001600160a01b0382166000908152600e602052604090205415801590612706575061270482610c39565b155b15611dea57611dea826000611a83565b60008060008060008060008060006127328a6000601a5461276a565b92509250925060008060006127508d868661274b612327565b6127c3565b919f909e50909c50959a5093985091965092945050505050565b6000808080606461277b87896129ff565b61278591906129eb565b905060006064612795878a6129ff565b61279f91906129eb565b9050806127ac838a6129c2565b6127b691906129c2565b9891975095509350505050565b60008080806127d285896129ff565b905060006127e086896129ff565b9050816127ed87896129ff565b6127f783856129c2565b61280191906129c2565b909a90995090975095505050505050565b600060208083528351808285015260005b8181101561283f57858101830151858201604001528201612823565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461287757600080fd5b919050565b6000806040838503121561288f57600080fd5b61289883612860565b946020939093013593505050565b6000806000606084860312156128bb57600080fd5b6128c484612860565b92506128d260208501612860565b9150604084013590509250925092565b6000602082840312156128f457600080fd5b6128fd82612860565b9392505050565b60006020828403121561291657600080fd5b5035919050565b60006020828403121561292f57600080fd5b813580151581146128fd57600080fd5b6000806040838503121561295257600080fd5b61295b83612860565b915061296960208401612860565b90509250929050565b600181811c9082168061298657607f821691505b6020821081036129a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a9357610a936129ac565b634e487b7160e01b600052601260045260246000fd5b6000826129fa576129fa6129d5565b500490565b8082028115828204841417610a9357610a936129ac565b80820180821115610a9357610a936129ac565b600060208284031215612a3b57600080fd5b5051919050565b805169ffffffffffffffffffff8116811461287757600080fd5b600080600080600060a08688031215612a7457600080fd5b612a7d86612a42565b9450602086015193506040860151925060608601519150612aa060808701612a42565b90509295509295909350565b600082612abb57612abb6129d5565b600160ff1b821460001984141615612ad557612ad56129ac565b500590565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b565784516001600160a01b031683529383019391830191600101612b31565b50506001600160a01b03969096166060850152505050608001529392505050565b6000808354612b8581612972565b60018281168015612b9d5760018114612bb257612be1565b60ff1984168752821515830287019450612be1565b8760005260208060002060005b85811015612bd85781548a820152908401908201612bbf565b50505082870194505b505063784fcfd160e11b835250506004019392505050565b601f821115611dea57600081815260208120601f850160051c81016020861015612c205750805b601f850160051c820191505b81811015611c1c57828155600101612c2c565b815167ffffffffffffffff811115612c5957612c59612ada565b612c6d81612c678454612972565b84612bf9565b602080601f831160018114612ca25760008415612c8a5750858301515b600019600386901b1c1916600185901b178555611c1c565b600085815260208120601f198616915b82811015612cd157888601518255948401946001909101908401612cb2565b5085821015612cef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018201612d1157612d116129ac565b506001019056fea26469706673582212203834437517cfff719596329629c51f5725bc6cd649974401c1e861565de632cc64736f6c63430008130033

Deployed Bytecode Sourcemap

14534:18585:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16825:42;;;;;;;;;;;;16865:2;16825:42;;;;;160:25:1;;;148:2;133:18;16825:42:0;;;;;;;;19766:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19121:161::-;;;;;;;;;;-1:-1:-1;19121:161:0;;;;;:::i;:::-;;:::i;:::-;;;1351:14:1;;1344:22;1326:41;;1314:2;1299:18;19121:161:0;1186:187:1;15730:115:0;;;;;;;;;;;;15802:42;15730:115;;;;;-1:-1:-1;;;;;1568:32:1;;;1550:51;;1538:2;1523:18;15730:115:0;1378:229:1;18545:95:0;;;;;;;;;;-1:-1:-1;15157:17:0;18545:95;;19290:373;;;;;;;;;;-1:-1:-1;19290:373:0;;;;;:::i;:::-;;:::i;23309:252::-;;;;;;;;;;;;;:::i;19857:83::-;;;;;;;;;;-1:-1:-1;19857:83:0;;14768:1;2087:36:1;;2075:2;2060:18;19857:83:0;1945:184:1;29248:127:0;;;;;;;;;;-1:-1:-1;29248:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;29343:24:0;29316:7;29343:24;;;:15;:24;;;;;;;29248:127;16145:42;;;;;;;;;;;;16004;16145;;28913:200;;;;;;;;;;-1:-1:-1;28913:200:0;;;;;:::i;:::-;;:::i;16194:38::-;;;;;;;;;;;;;;;16777:41;;;;;;;;;;;;16816:2;16777:41;;15415:33;;;;;;;;;;;;;;;;15852:114;;;;;;;;;;;;15923:42;15852:114;;16616:40;;;;;;;;;;;;;;;;31892:87;;;;;;;;;;;;;:::i;:::-;;18648:139;;;;;;;;;;-1:-1:-1;18648:139:0;;;;;:::i;:::-;;:::i;4717:103::-;;;;;;;;;;;;;:::i;28572:105::-;;;;;;;;;;-1:-1:-1;28653:16:0;;28572:105;;25299:109;;;;;;;;;;;;;:::i;15455:31::-;;;;;;;;;;;;;;;;16053:30;;;;;;;;;;;;;;;15493:35;;;;;;;;;;;;;;;;16239:119;;;;;;;;;;;;16315:42;16239:119;;24128:130;;;;;;;;;;-1:-1:-1;24128:130:0;;;;;:::i;:::-;;:::i;18435:102::-;;;;;;;;;;-1:-1:-1;18519:10:0;;;;;;;;;;;;-1:-1:-1;;;18519:10:0;;;;18435:102;;25416:99;;;;;;;;;;-1:-1:-1;25416:99:0;;;;;:::i;:::-;;:::i;14584:49::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14584:49:0;;;;;25210:81;;;;;;;;;;;;;:::i;4076:87::-;;;;;;;;;;-1:-1:-1;4122:7:0;4149:6;-1:-1:-1;;;;;4149:6:0;4076:87;;25749:378;;;;;;;;;;-1:-1:-1;25749:378:0;;;;;:::i;:::-;;:::i;24385:257::-;;;;;;;;;;;;;:::i;29776:239::-;;;;;;;;;;;;;:::i;19671:87::-;;;;;;;;;;-1:-1:-1;19743:7:0;;;;;;;;;;;;-1:-1:-1;;;19743:7:0;;;;19671:87;;16967:43;;;;;;;;;;;;17009:1;16967:43;;29383:101;;;;;;;;;;-1:-1:-1;29462:14:0;;29383:101;;23955:165;;;;;;;;;;;;;:::i;18795:167::-;;;;;;;;;;-1:-1:-1;18795:167:0;;;;;:::i;:::-;;:::i;24266:111::-;;;;;;;;;;;;;:::i;23569:133::-;;;;;;;;;;;;;:::i;16466:40::-;;;;;;;;;;;;;;;;25523:218;;;;;;;;;;-1:-1:-1;25523:218:0;;;;;:::i;:::-;;:::i;17345:47::-;;;;;;;;;;;;17389:3;17345:47;;15535:35;;;;;;;;;;;;;;;;18970:143;;;;;;;;;;-1:-1:-1;18970:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19078:18:0;;;19051:7;19078:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18970:143;30448:102;;;:::i;29121:119::-;;;;;;;;;;-1:-1:-1;29121:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;29208:24:0;29181:7;29208:24;;;:15;:24;;;;;;;29121:119;28800:105;;;;;;;;;;-1:-1:-1;28877:20:0;;28800:105;;4975:201;;;;;;;;;;-1:-1:-1;4975:201:0;;;;;:::i;:::-;;:::i;17017:44::-;;;;;;;;;;;;17060:1;17017:44;;16513:42;;;;;;;;;;;;;;;;28685:107;;;;;;;;;;-1:-1:-1;28764:20:0;;28685:107;;19766:83;19803:13;19836:5;19829:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19766:83;:::o;19121:161::-;19196:4;19213:39;2865:10;19236:7;19245:6;19213:8;:39::i;:::-;-1:-1:-1;19270:4:0;19121:161;;;;;:::o;19290:373::-;19388:4;19405:36;19415:6;19423:9;19434:6;19405:9;:36::i;:::-;-1:-1:-1;;;;;19460:19:0;;;;;;:11;:19;;;;;;;;2865:10;19460:33;;;;;;;;:43;-1:-1:-1;19460:43:0;19452:96;;;;-1:-1:-1;;;19452:96:0;;4761:2:1;19452:96:0;;;4743:21:1;4800:2;4780:18;;;4773:30;4839:34;4819:18;;;4812:62;-1:-1:-1;;;4890:18:1;;;4883:38;4938:19;;19452:96:0;;;;;;;;;-1:-1:-1;;;;;19590:19:0;;;;;;:11;:19;;;;;;;;2865:10;19590:33;;;;;;;;;19559:74;;19568:6;;19590:42;;19626:6;;19590:42;:::i;:::-;19559:8;:74::i;:::-;-1:-1:-1;19651:4:0;19290:373;;;;;:::o;23309:252::-;23351:7;23371:19;23411:8;;23393:15;:26;;;;:::i;:::-;23371:48;-1:-1:-1;23430:15:0;23448:26;16816:2;23371:48;23448:26;:::i;:::-;23430:44;;16912:1;23507:7;:21;:45;;23545:7;23507:45;;;16912:1;23507:45;23492:61;;16912:1;23492:61;:::i;:::-;23485:68;;;;23309:252;:::o;28913:200::-;-1:-1:-1;;;;;29070:25:0;;28973:7;29070:25;;;:16;:25;;;;;;29051:16;;29100:4;;29051:44;;;:::i;:::-;29029:18;29039:7;29029:9;:18::i;:::-;:67;;;;:::i;:::-;29028:76;;;;:::i;:::-;-1:-1:-1;;;;;29000:24:0;;;;;;:15;:24;;;;;;:105;;;;:::i;31892:87::-;31938:33;31954:10;31966:4;31938:15;:33::i;:::-;31892:87::o;18648:139::-;-1:-1:-1;;;;;18762:16:0;;18714:7;18762:16;;;:7;:16;;;;;;18741:38;;:20;:38::i;4717:103::-;3962:13;:11;:13::i;:::-;4782:30:::1;4809:1;4782:18;:30::i;25299:109::-:0;3962:13;:11;:13::i;:::-;15157:17:::1;25353:7;:17:::0;;;25381:9:::1;:19:::0;25299:109::o;24128:130::-;24190:7;24246:4;24230:13;:11;:13::i;:::-;24217:26;;:10;:26;:::i;:::-;:33;;;;:::i;25416:99::-;3962:13;:11;:13::i;:::-;25485:9:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;25485:22:0::1;-1:-1:-1::0;;;;25485:22:0;;::::1;::::0;;;::::1;::::0;;25416:99::o;25210:81::-;3962:13;:11;:13::i;:::-;25265:11:::1;:18:::0;;-1:-1:-1;;25265:18:0::1;25279:4;25265:18;::::0;;25210:81::o;25749:378::-;25850:16;;-1:-1:-1;;;;;25850:16:0;2865:10;-1:-1:-1;;;;;25834:32:0;;:68;;;-1:-1:-1;25886:16:0;;-1:-1:-1;;;;;25886:16:0;2865:10;-1:-1:-1;;;;;25870:32:0;;25834:68;25826:77;;;;;;25939:21;;-1:-1:-1;;;25939:21:0;;-1:-1:-1;;;;;25954:5:0;1568:32:1;25939:21:0;;;1550:51:1;25914:22:0;;16004:42;;25939:14;;1523:18:1;;25939:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25914:46;-1:-1:-1;25975:18:0;;25971:88;;26010:37;;-1:-1:-1;;;26010:37:0;;;;;160:25:1;;;16004:42:0;;26010:21;;133:18:1;;26010:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25971:88;26069:50;26082:36;26104:14;26082:19;:36;:::i;:::-;26069:12;:50::i;:::-;25815:312;25749:378;:::o;24385:257::-;24432:7;24483:1;24456:24;24466:13;24456:9;:24::i;:::-;:28;24452:162;;;24572:24;24582:13;24572:9;:24::i;:::-;24556:40;;15157:17;24556:40;:::i;:::-;24547:4;24530:13;:11;:13::i;:::-;24511:16;:14;:16::i;:::-;:32;;;;:::i;:::-;24510:41;;;;:::i;:::-;24509:88;;;;:::i;:::-;24508:94;;24601:1;24508:94;:::i;:::-;24501:101;;24385:257;:::o;24452:162::-;-1:-1:-1;24633:1:0;;24385:257::o;29776:239::-;29828:7;29981:26;29999:6;29981:9;:26::i;:::-;29955:23;29973:3;29955:9;:23::i;:::-;29917:35;15802:42;29917:9;:35::i;:::-;29890:24;29900:13;29890:9;:24::i;:::-;29871:16;29881:5;29871:9;:16::i;:::-;29855:32;;15157:17;29855:32;:::i;:::-;:59;;;;:::i;:::-;:97;;;;:::i;:::-;:123;;;;:::i;:::-;:152;;;;:::i;23955:165::-;23999:7;24022:13;16315:42;-1:-1:-1;;;;;24042:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24019:54;;;;;;24108:3;24099:6;:12;;;;:::i;:::-;24084:28;;;23955:165;:::o;18795:167::-;18873:4;18890:42;2865:10;18914:9;18925:6;18890:9;:42::i;24266:111::-;24340:29;;-1:-1:-1;;;24340:29:0;;-1:-1:-1;;;;;24355:13:0;1568:32:1;24340:29:0;;;1550:51:1;24313:7:0;;16004:42;;24340:14;;1523:18:1;;24340:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23569:133::-;23612:7;16959:1;23639:11;;:26;:55;;-1:-1:-1;23683:11:0;;;24385:257::o;23639:55::-;-1:-1:-1;16959:1:0;;23569:133::o;25523:218::-;25630:16;;-1:-1:-1;;;;;25630:16:0;2865:10;-1:-1:-1;;;;;25614:32:0;;:68;;;-1:-1:-1;25666:16:0;;-1:-1:-1;;;;;25666:16:0;2865:10;-1:-1:-1;;;;;25650:32:0;;25614:68;25606:77;;;;;;25694:39;25711:21;25694:16;:39::i;:::-;25523:218;:::o;30448:102::-;30502:40;30520:10;30532:9;30502:17;:40::i;4975:201::-;3962:13;:11;:13::i;:::-;-1:-1:-1;;;;;5064:22:0;::::1;5056:73;;;::::0;-1:-1:-1;;;5056:73:0;;7044:2:1;5056:73:0::1;::::0;::::1;7026:21:1::0;7083:2;7063:18;;;7056:30;7122:34;7102:18;;;7095:62;-1:-1:-1;;;7173:18:1;;;7166:36;7219:19;;5056:73:0::1;6842:402:1::0;5056:73:0::1;5140:28;5159:8;5140:18;:28::i;20282:335::-:0;-1:-1:-1;;;;;20375:19:0;;20367:68;;;;-1:-1:-1;;;20367:68:0;;7451:2:1;20367:68:0;;;7433:21:1;7490:2;7470:18;;;7463:30;7529:34;7509:18;;;7502:62;-1:-1:-1;;;7580:18:1;;;7573:34;7624:19;;20367:68:0;7249:400:1;20367:68:0;-1:-1:-1;;;;;20454:21:0;;20446:68;;;;-1:-1:-1;;;20446:68:0;;7856:2:1;20446:68:0;;;7838:21:1;7895:2;7875:18;;;7868:30;7934:34;7914:18;;;7907:62;-1:-1:-1;;;7985:18:1;;;7978:32;8027:19;;20446:68:0;7654:398:1;20446:68:0;-1:-1:-1;;;;;20525:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20577:32;;160:25:1;;;20577:32:0;;133:18:1;20577:32:0;;;;;;;20282:335;;;:::o;20625:2676::-;-1:-1:-1;;;;;20713:18:0;;20705:68;;;;-1:-1:-1;;;20705:68:0;;8259:2:1;20705:68:0;;;8241:21:1;8298:2;8278:18;;;8271:30;8337:34;8317:18;;;8310:62;-1:-1:-1;;;8388:18:1;;;8381:35;8433:19;;20705:68:0;8057:401:1;20705:68:0;-1:-1:-1;;;;;20792:16:0;;20784:64;;;;-1:-1:-1;;;20784:64:0;;8665:2:1;20784:64:0;;;8647:21:1;8704:2;8684:18;;;8677:30;8743:34;8723:18;;;8716:62;-1:-1:-1;;;8794:18:1;;;8787:33;8837:19;;20784:64:0;8463:399:1;20784:64:0;20876:1;20867:6;:10;20859:62;;;;-1:-1:-1;;;20859:62:0;;9069:2:1;20859:62:0;;;9051:21:1;9108:2;9088:18;;;9081:30;9147:34;9127:18;;;9120:62;-1:-1:-1;;;9198:18:1;;;9191:37;9245:19;;20859:62:0;8867:403:1;20859:62:0;4122:7;4149:6;-1:-1:-1;;;;;20938:15:0;;;4149:6;;20938:15;;;;:32;;-1:-1:-1;4122:7:0;4149:6;-1:-1:-1;;;;;20957:13:0;;;4149:6;;20957:13;;20938:32;:49;;;;;20982:5;-1:-1:-1;;;;;20974:13:0;:4;-1:-1:-1;;;;;20974:13:0;;;20938:49;:64;;;;;20997:5;-1:-1:-1;;;;;20991:11:0;:2;-1:-1:-1;;;;;20991:11:0;;;20938:64;20934:1178;;;21024:11;;;;21019:142;;21072:5;-1:-1:-1;;;;;21064:13:0;:4;-1:-1:-1;;;;;21064:13:0;;21056:89;;;;-1:-1:-1;;;21056:89:0;;9477:2:1;21056:89:0;;;9459:21:1;9516:2;9496:18;;;9489:30;9555:34;9535:18;;;9528:62;9626:33;9606:18;;;9599:61;9677:19;;21056:89:0;9275:427:1;21056:89:0;21195:7;;21185:6;:17;;21177:58;;;;-1:-1:-1;;;21177:58:0;;9909:2:1;21177:58:0;;;9891:21:1;9948:2;9928:18;;;9921:30;9987;9967:18;;;9960:58;10035:18;;21177:58:0;9707:352:1;21177:58:0;21262:13;-1:-1:-1;;;;;21256:19:0;:2;-1:-1:-1;;;;;21256:19:0;;21252:143;;21330:9;;21320:6;21304:13;21314:2;21304:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;21296:83;;;;-1:-1:-1;;;21296:83:0;;10266:2:1;21296:83:0;;;10248:21:1;10305:2;10285:18;;;10278:30;10344:34;10324:18;;;10317:62;-1:-1:-1;;;10395:18:1;;;10388:33;10438:19;;21296:83:0;10064:399:1;21296:83:0;21411:28;21442:16;21452:5;21442:9;:16::i;:::-;21569:7;;21411:47;;-1:-1:-1;16602:5:0;21488:36;;;;21545:31;;21541:102;;21620:7;;21597:30;;21541:102;21663:7;:24;;;;-1:-1:-1;21675:12:0;;;;;;;21674:13;21663:24;:49;;;;;21699:13;-1:-1:-1;;;;;21691:21:0;:4;-1:-1:-1;;;;;21691:21:0;;;21663:49;:78;;;;-1:-1:-1;;;;;;21717:24:0;;;;;;:18;:24;;;;;;;;21716:25;21663:78;:105;;;;-1:-1:-1;;;;;;21746:22:0;;;;;;:18;:22;;;;;;;;21745:23;21663:105;21659:442;;;21789:14;:21;;-1:-1:-1;;21789:21:0;;;;;21829:38;21846:20;21829:16;:38::i;:::-;21886:14;:22;;-1:-1:-1;;21886:22:0;;;-1:-1:-1;;;;;21931:5:0;:13;;:17;21927:159;;21973:31;21986:17;22002:1;-1:-1:-1;;;;;21986:5:0;:13;;:17;:::i;21973:31::-;22027:39;22045:5;22052;-1:-1:-1;;;;;22052:13:0;;22027:17;:39::i;:::-;21004:1108;;20934:1178;-1:-1:-1;;;;;22161:24:0;;22124:12;22161:24;;;:18;:24;;;;;;22139:4;;22161:24;;;:50;;-1:-1:-1;;;;;;22189:22:0;;;;;;:18;:22;;;;;;;;22161:50;22160:102;;;;22225:13;-1:-1:-1;;;;;22217:21:0;:4;-1:-1:-1;;;;;22217:21:0;;;:44;;;;;22248:13;-1:-1:-1;;;;;22242:19:0;:2;-1:-1:-1;;;;;22242:19:0;;;22217:44;22156:1037;;;-1:-1:-1;22289:5:0;22156:1037;;;22339:13;-1:-1:-1;;;;;22331:21:0;:4;-1:-1:-1;;;;;22331:21:0;;:55;;;;-1:-1:-1;;;;;;22356:30:0;;15802:42;22356:30;;22331:55;22327:597;;;22417:11;:9;:11::i;:::-;22407:7;:21;;;22447:12;:22;-1:-1:-1;22511:16:0;:14;:16::i;:::-;22488:39;;22565:15;;22550:12;:30;22546:318;;;22605:18;22641:15;;22626:12;:30;;;;:::i;:::-;22605:51;;22679:18;22700:23;22712:10;22700:11;:23::i;:::-;22679:44;;17389:3;22750:10;:31;22746:99;;22810:11;:9;:11::i;:::-;22582:282;;22546:318;-1:-1:-1;22893:15:0;22882:8;:26;22327:597;22948:13;-1:-1:-1;;;;;22942:19:0;:2;-1:-1:-1;;;;;22942:19:0;;:55;;;;-1:-1:-1;;;;;;22965:32:0;;15802:42;22965:32;;22942:55;22938:244;;;23018:19;:17;:19::i;:::-;23066:12;:10;:12::i;:::-;23056:7;:22;;;23097:13;:23;23151:15;23139:9;:27;22938:244;23223:16;:14;:16::i;:::-;23205:15;:34;23252:41;23267:4;23273:2;23277:6;23285:7;23252:14;:41::i;:::-;20694:2607;20625:2676;;;:::o;30558:1326::-;30637:9;;-1:-1:-1;;;30637:9:0;;;;30632:23;;30558:1326;;:::o;30632:23::-;30669:6;30665:65;;;30692:26;30710:7;30692:17;:26::i;:::-;-1:-1:-1;;;;;30761:24:0;;30740:18;30761:24;;;:15;:24;;;;;;30800:14;;30796:1081;;30835:6;30831:1035;;;30867:29;;160:25:1;;;30873:10:0;;30867:29;;148:2:1;133:18;30867:29:0;;;;;;;30961:10;30938:20;;:33;;;;:::i;:::-;30915:20;:56;31036:10;31020:27;;;;:15;:27;;;;;;:40;;31050:10;;31020:40;:::i;:::-;31006:10;30990:27;;;;:15;:27;;;;;;;:70;;;;31079:33;-1:-1:-1;;;31079:33:0;;;;;160:25:1;;;16004:42:0;;31079:21;;133:18:1;;31079:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31147:10:0;31161:1;31131:27;;;:15;:27;;;;;:31;31185:21;;-1:-1:-1;31147:10:0;-1:-1:-1;31185:9:0;:21::i;:::-;31210:1;31185:26;31181:107;;31253:10;31267:1;31236:28;;;:16;:28;;;;;:32;31181:107;31306:47;;31314:10;;31338;;31306:47;;;;31338:10;31314;31306:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30621:1263;30558:1326;;:::o;30831:1035::-;31405:5;-1:-1:-1;;;;;31399:24:0;;31412:10;31399:24;;;;160:25:1;;148:2;133:18;;14:177;31399:24:0;;;;;;;;31488:10;31465:20;;:33;;;;:::i;:::-;31442:20;:56;-1:-1:-1;;;;;31558:5:0;31542:22;;;;;:15;:22;;;;;;:35;;31567:10;;31542:35;:::i;:::-;31533:5;-1:-1:-1;;;;;31517:22:0;;;;;:15;:22;;;;;;;:60;;;;31596:33;-1:-1:-1;;;31596:33:0;;;;;160:25:1;;;16004:42:0;;31596:21;;133:18:1;;31596:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;31648:24:0;;31675:1;31648:24;;;:15;:24;;;;;:28;-1:-1:-1;31699:18:0;31664:7;31699:9;:18::i;:::-;31721:1;31699:23;31695:101;;-1:-1:-1;;;;;31747:25:0;;31775:1;31747:25;;;:16;:25;;;;;:29;31695:101;31814:36;31832:5;31839:10;31814:17;:36::i;:::-;30621:1263;30558:1326;;:::o;26135:266::-;26204:7;26243;;26232;:18;;26224:73;;;;-1:-1:-1;;;26224:73:0;;10880:2:1;26224:73:0;;;10862:21:1;10919:2;10899:18;;;10892:30;10958:34;10938:18;;;10931:62;-1:-1:-1;;;11009:18:1;;;11002:40;11059:19;;26224:73:0;10678:406:1;26224:73:0;26317:14;;;;;;;26316:15;:31;;;;-1:-1:-1;26335:12:0;;;;;;;26316:31;26315:78;;26383:10;:8;:10::i;:::-;26373:20;;:7;:20;:::i;:::-;26315:78;;;26351:19;15157:17;26367:3;26351:19;:::i;4241:132::-;4122:7;4149:6;-1:-1:-1;;;;;4149:6:0;2865:10;4305:23;4297:68;;;;-1:-1:-1;;;4297:68:0;;11291:2:1;4297:68:0;;;11273:21:1;;;11310:18;;;11303:30;11369:34;11349:18;;;11342:62;11421:18;;4297:68:0;11089:356:1;5336:191:0;5410:16;5429:6;;-1:-1:-1;;;;;5446:17:0;;;-1:-1:-1;;;;;;5446:17:0;;;;;;5479:40;;5429:6;;;;;;;5479:40;;5410:16;5479:40;5399:128;5336:191;:::o;25080:122::-;25149:16;;25141:53;;-1:-1:-1;;;;;25149:16:0;;;;25179:10;;25141:53;;;;25179:10;25149:16;25141:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24760:312;17436:12;:19;;-1:-1:-1;;17436:19:0;;;;;24866:16:::1;::::0;;24880:1:::1;24866:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24866:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24866:16:0::1;24842:40;;24903:5;24893:4;24898:1;24893:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1::0;;;;;24893:15:0::1;;;-1:-1:-1::0;;;;;24893:15:0::1;;;::::0;::::1;16004:42;24919:4;24924:1;24919:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24919:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:14;15802:42:::1;24944:66;25011:12:::0;25025:1:::1;25028:4:::0;25034:5:::1;25041:22;:15;25059:4;25041:22;:::i;:::-;24944:120;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17478:12:0;:20;;-1:-1:-1;;17478:20:0;;;-1:-1:-1;;;;24760:312:0:o;30023:417::-;30109:9;;-1:-1:-1;;;30109:9:0;;;;30104:23;;30023:417;;:::o;30104:23::-;30141:14;;30137:296;;30185:5;-1:-1:-1;;;;;30177:26:0;;30192:10;30177:26;;;;160:25:1;;148:2;133:18;;14:177;30177:26:0;;;;;;;;30264:10;30241:20;;:33;;;;:::i;:::-;30218:20;:56;30350:14;;30329:17;:10;30342:4;30329:17;:::i;:::-;30328:36;;;;:::i;:::-;30308:16;;:57;;;;:::i;:::-;30289:16;:76;;;;16004:42;-1:-1:-1;;;;;30380:20:0;;30408:10;30380:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30023:417;;:::o;24650:102::-;24722:5;24705:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;24690:5;:54;;;;;;:::i;23710:237::-;23758:19;23798:9;;23780:15;:27;;;;:::i;:::-;23758:49;;23839:11;16865:2;23822:28;23818:122;;23867:11;:13;;;:11;:13;;;:::i;:::-;;;;;;25523:218;:::o;23818:122::-;23927:1;23913:11;:15;23747:200;23710:237::o;26409:373::-;26522:7;26517:258;;26546:23;26572:12;:10;:12::i;:::-;26546:38;;26599:44;26617:6;26625:9;26636:6;26599:17;:44::i;:::-;26658:28;26670:15;20241:7;:25;20176:98;26658:28;26531:167;26517:258;;;26719:44;26737:6;26745:9;26756:6;26719:17;:44::i;29492:276::-;29560:9;;-1:-1:-1;;;29560:9:0;;;;29555:23;;29492:276;:::o;29555:23::-;-1:-1:-1;;;;;29593:32:0;;;;;;:23;:32;;;;;;;;29588:173;;29669:21;29682:7;29669:12;:21::i;:::-;-1:-1:-1;;;;;29642:24:0;;;;;;:15;:24;;;;;;;;:48;;;;29733:16;;29705;:25;;;;;;:44;29492:276;:::o;33022:94::-;33064:7;15157:17;33091:7;;:17;;;;:::i;19948:220::-;19987:7;20011;;20022:1;20011:12;20007:53;;-1:-1:-1;20047:1:0;;19948:220::o;20007:53::-;-1:-1:-1;20098:7:0;;;20072:23;20116:11;;;20098:7;19948:220::o;26790:1774::-;26888:25;26906:6;26888:17;:25::i;:::-;26924:28;26942:9;26924:17;:28::i;:::-;26968:12;;;;;;;26967:13;;:31;;-1:-1:-1;26984:14:0;;;;;;;26967:31;26963:1272;;;27015:28;27046:17;27056:6;27046:9;:17::i;:::-;27015:48;;27078:31;27112:20;27122:9;27112;:20::i;:::-;27078:54;;27148:15;27165:23;27190:12;27204:23;27229:12;27243:13;27260:19;27271:7;27260:10;:19::i;:::-;27147:132;;;;;;;;;;;;27330:7;27312;:15;27320:6;-1:-1:-1;;;;;27312:15:0;-1:-1:-1;;;;;27312:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;27294:15:0;;;;;;;:7;:15;;;;;;:43;;;;27373:18;;;;;;;:36;;27394:15;;27373:36;:::i;:::-;-1:-1:-1;;;;;27352:18:0;;;;;;:7;:18;;;;;:57;27467:10;:8;:10::i;:::-;27459:18;;:5;:18;:::i;:::-;-1:-1:-1;;;;;27449:5:0;27441:14;;;;;:7;:14;;;;;;:37;;;;:::i;:::-;-1:-1:-1;;;;;27432:5:0;27424:14;;;;;:7;:14;;;;;:54;27503:7;;:14;;27513:4;;27503:14;:::i;:::-;27493:7;:24;27536:9;;-1:-1:-1;;;27536:9:0;;;;27532:554;;;-1:-1:-1;;;;;27570:31:0;;;;;;:23;:31;;;;;;;;:70;;;;-1:-1:-1;;;;;;27606:34:0;;;;;;:23;:34;;;;;;;;27605:35;27570:70;27566:201;;;27723:23;27700:20;27710:9;27700;:20::i;:::-;:46;;;;:::i;:::-;27682:14;;:65;;;;:::i;:::-;27665:14;:82;27566:201;-1:-1:-1;;;;;27790:31:0;;;;;;:23;:31;;;;;;;;27789:32;:70;;;;-1:-1:-1;;;;;;27825:34:0;;;;;;:23;:34;;;;;;;;27789:70;27785:286;;;27884:19;27930:17;27940:6;27930:9;:17::i;:::-;27907:40;;:20;:40;:::i;:::-;27884:64;;28005:11;27988:14;;:28;:63;;28050:1;27988:63;;;28036:11;28019:14;;:28;;;;:::i;:::-;27971:14;:80;-1:-1:-1;27785:286:0;28122:9;-1:-1:-1;;;;;28105:44:0;28114:6;-1:-1:-1;;;;;28105:44:0;;28133:15;28105:44;;;;160:25:1;;148:2;133:18;;14:177;28105:44:0;;;;;;;;27000:1161;;;;;;;;26963:1272;;;28204:9;-1:-1:-1;;;;;28187:36:0;28196:6;-1:-1:-1;;;;;28187:36:0;;28215:7;28187:36;;;;160:25:1;;148:2;133:18;;14:177;28187:36:0;;;;;;;;26963:1272;28249:9;;-1:-1:-1;;;28249:9:0;;;;28245:312;;;-1:-1:-1;;;;;28279:23:0;;28305:1;28279:23;;;:15;:23;;;;;;:27;;;;:53;;;28310:17;28320:6;28310:9;:17::i;:::-;:22;28279:53;28275:124;;;28353:30;28369:6;28377:5;28353:15;:30::i;:::-;-1:-1:-1;;;;;28417:26:0;;28446:1;28417:26;;;:15;:26;;;;;;:30;;;;:59;;;28451:20;28461:9;28451;:20::i;:::-;:25;28417:59;28413:133;;;28497:33;28513:9;28524:5;28497:15;:33::i;31987:416::-;32046:7;32055;32064;32073;32082;32091;32112:23;32137:12;32151:13;32168:32;32180:7;32189:1;32192:7;;32168:11;:32::i;:::-;32111:89;;;;;;32212:15;32229:23;32254:12;32270:45;32282:7;32291:4;32297:5;32304:10;:8;:10::i;:::-;32270:11;:45::i;:::-;32211:104;;;;-1:-1:-1;32211:104:0;;-1:-1:-1;32366:15:0;;-1:-1:-1;32383:4:0;;-1:-1:-1;32389:5:0;;-1:-1:-1;31987:416:0;;-1:-1:-1;;;;;31987:416:0:o;32411:283::-;32505:7;;;;32579:3;32558:18;32568:8;32558:7;:18;:::i;:::-;:24;;;;:::i;:::-;32543:39;-1:-1:-1;32593:13:0;32628:3;32609:16;32619:6;32609:7;:16;:::i;:::-;:22;;;;:::i;:::-;32593:38;-1:-1:-1;32593:38:0;32650:14;32660:4;32650:7;:14;:::i;:::-;:22;;;;:::i;:::-;32642:44;32674:4;;-1:-1:-1;32674:4:0;-1:-1:-1;32411:283:0;-1:-1:-1;;;;32411:283:0:o;32702:312::-;32812:7;;;;32868:21;32878:11;32868:7;:21;:::i;:::-;32850:39;-1:-1:-1;32900:12:0;32915:18;32922:11;32915:4;:18;:::i;:::-;32900:33;-1:-1:-1;32952:7:0;32979:19;32987:11;32979:5;:19;:::i;:::-;32961:14;32971:4;32961:7;:14;:::i;:::-;:38;;;;:::i;:::-;32944:62;;;;-1:-1:-1;33001:4:0;;-1:-1:-1;32702:312:0;-1:-1:-1;;;;;;32702:312:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:173::-;817:20;;-1:-1:-1;;;;;866:31:1;;856:42;;846:70;;912:1;909;902:12;846:70;749:173;;;:::o;927:254::-;995:6;1003;1056:2;1044:9;1035:7;1031:23;1027:32;1024:52;;;1072:1;1069;1062:12;1024:52;1095:29;1114:9;1095:29;:::i;:::-;1085:39;1171:2;1156:18;;;;1143:32;;-1:-1:-1;;;927:254:1:o;1612:328::-;1689:6;1697;1705;1758:2;1746:9;1737:7;1733:23;1729:32;1726:52;;;1774:1;1771;1764:12;1726:52;1797:29;1816:9;1797:29;:::i;:::-;1787:39;;1845:38;1879:2;1868:9;1864:18;1845:38;:::i;:::-;1835:48;;1930:2;1919:9;1915:18;1902:32;1892:42;;1612:328;;;;;:::o;2134:186::-;2193:6;2246:2;2234:9;2225:7;2221:23;2217:32;2214:52;;;2262:1;2259;2252:12;2214:52;2285:29;2304:9;2285:29;:::i;:::-;2275:39;2134:186;-1:-1:-1;;;2134:186:1:o;3446:180::-;3505:6;3558:2;3546:9;3537:7;3533:23;3529:32;3526:52;;;3574:1;3571;3564:12;3526:52;-1:-1:-1;3597:23:1;;3446:180;-1:-1:-1;3446:180:1:o;3631:273::-;3687:6;3740:2;3728:9;3719:7;3715:23;3711:32;3708:52;;;3756:1;3753;3746:12;3708:52;3795:9;3782:23;3848:5;3841:13;3834:21;3827:5;3824:32;3814:60;;3870:1;3867;3860:12;3909:260;3977:6;3985;4038:2;4026:9;4017:7;4013:23;4009:32;4006:52;;;4054:1;4051;4044:12;4006:52;4077:29;4096:9;4077:29;:::i;:::-;4067:39;;4125:38;4159:2;4148:9;4144:18;4125:38;:::i;:::-;4115:48;;3909:260;;;;;:::o;4174:380::-;4253:1;4249:12;;;;4296;;;4317:61;;4371:4;4363:6;4359:17;4349:27;;4317:61;4424:2;4416:6;4413:14;4393:18;4390:38;4387:161;;4470:10;4465:3;4461:20;4458:1;4451:31;4505:4;4502:1;4495:15;4533:4;4530:1;4523:15;4387:161;;4174:380;;;:::o;4968:127::-;5029:10;5024:3;5020:20;5017:1;5010:31;5060:4;5057:1;5050:15;5084:4;5081:1;5074:15;5100:128;5167:9;;;5188:11;;;5185:37;;;5202:18;;:::i;5233:127::-;5294:10;5289:3;5285:20;5282:1;5275:31;5325:4;5322:1;5315:15;5349:4;5346:1;5339:15;5365:120;5405:1;5431;5421:35;;5436:18;;:::i;:::-;-1:-1:-1;5470:9:1;;5365:120::o;5490:168::-;5563:9;;;5594;;5611:15;;;5605:22;;5591:37;5581:71;;5632:18;;:::i;5663:125::-;5728:9;;;5749:10;;;5746:36;;;5762:18;;:::i;5793:184::-;5863:6;5916:2;5904:9;5895:7;5891:23;5887:32;5884:52;;;5932:1;5929;5922:12;5884:52;-1:-1:-1;5955:16:1;;5793:184;-1:-1:-1;5793:184:1:o;5982:179::-;6060:13;;6113:22;6102:34;;6092:45;;6082:73;;6151:1;6148;6141:12;6166:473;6269:6;6277;6285;6293;6301;6354:3;6342:9;6333:7;6329:23;6325:33;6322:53;;;6371:1;6368;6361:12;6322:53;6394:39;6423:9;6394:39;:::i;:::-;6384:49;;6473:2;6462:9;6458:18;6452:25;6442:35;;6517:2;6506:9;6502:18;6496:25;6486:35;;6561:2;6550:9;6546:18;6540:25;6530:35;;6584:49;6628:3;6617:9;6613:19;6584:49;:::i;:::-;6574:59;;6166:473;;;;;;;;:::o;6644:193::-;6683:1;6709;6699:35;;6714:18;;:::i;:::-;-1:-1:-1;;;6750:18:1;;-1:-1:-1;;6770:13:1;;6746:38;6743:64;;;6787:18;;:::i;:::-;-1:-1:-1;6821:10:1;;6644:193::o;11450:127::-;11511:10;11506:3;11502:20;11499:1;11492:31;11542:4;11539:1;11532:15;11566:4;11563:1;11556:15;11582:127;11643:10;11638:3;11634:20;11631:1;11624:31;11674:4;11671:1;11664:15;11698:4;11695:1;11688:15;11714:980;11976:4;12024:3;12013:9;12009:19;12055:6;12044:9;12037:25;12081:2;12119:6;12114:2;12103:9;12099:18;12092:34;12162:3;12157:2;12146:9;12142:18;12135:31;12186:6;12221;12215:13;12252:6;12244;12237:22;12290:3;12279:9;12275:19;12268:26;;12329:2;12321:6;12317:15;12303:29;;12350:1;12360:195;12374:6;12371:1;12368:13;12360:195;;;12439:13;;-1:-1:-1;;;;;12435:39:1;12423:52;;12530:15;;;;12495:12;;;;12471:1;12389:9;12360:195;;;-1:-1:-1;;;;;;;12611:32:1;;;;12606:2;12591:18;;12584:60;-1:-1:-1;;;12675:3:1;12660:19;12653:35;12572:3;11714:980;-1:-1:-1;;;11714:980:1:o;12825:993::-;13054:3;13083:1;13116:6;13110:13;13146:36;13172:9;13146:36;:::i;:::-;13201:1;13218:18;;;13245:133;;;;13392:1;13387:356;;;;13211:532;;13245:133;-1:-1:-1;;13278:24:1;;13266:37;;13351:14;;13344:22;13332:35;;13323:45;;;-1:-1:-1;13245:133:1;;13387:356;13418:6;13415:1;13408:17;13448:4;13493:2;13490:1;13480:16;13518:1;13532:165;13546:6;13543:1;13540:13;13532:165;;;13624:14;;13611:11;;;13604:35;13667:16;;;;13561:10;;13532:165;;;13536:3;;;13726:6;13721:3;13717:16;13710:23;;13211:532;-1:-1:-1;;;;;13752:33:1;;-1:-1:-1;;13810:1:1;13801:11;;12825:993;-1:-1:-1;;;12825:993:1:o;13823:545::-;13925:2;13920:3;13917:11;13914:448;;;13961:1;13986:5;13982:2;13975:17;14031:4;14027:2;14017:19;14101:2;14089:10;14085:19;14082:1;14078:27;14072:4;14068:38;14137:4;14125:10;14122:20;14119:47;;;-1:-1:-1;14160:4:1;14119:47;14215:2;14210:3;14206:12;14203:1;14199:20;14193:4;14189:31;14179:41;;14270:82;14288:2;14281:5;14278:13;14270:82;;;14333:17;;;14314:1;14303:13;14270:82;;14544:1352;14670:3;14664:10;14697:18;14689:6;14686:30;14683:56;;;14719:18;;:::i;:::-;14748:97;14838:6;14798:38;14830:4;14824:11;14798:38;:::i;:::-;14792:4;14748:97;:::i;:::-;14900:4;;14964:2;14953:14;;14981:1;14976:663;;;;15683:1;15700:6;15697:89;;;-1:-1:-1;15752:19:1;;;15746:26;15697:89;-1:-1:-1;;14501:1:1;14497:11;;;14493:24;14489:29;14479:40;14525:1;14521:11;;;14476:57;15799:81;;14946:944;;14976:663;12772:1;12765:14;;;12809:4;12796:18;;-1:-1:-1;;15012:20:1;;;15130:236;15144:7;15141:1;15138:14;15130:236;;;15233:19;;;15227:26;15212:42;;15325:27;;;;15293:1;15281:14;;;;15160:19;;15130:236;;;15134:3;15394:6;15385:7;15382:19;15379:201;;;15455:19;;;15449:26;-1:-1:-1;;15538:1:1;15534:14;;;15550:3;15530:24;15526:37;15522:42;15507:58;15492:74;;15379:201;-1:-1:-1;;;;;15626:1:1;15610:14;;;15606:22;15593:36;;-1:-1:-1;14544:1352:1:o;15901:135::-;15940:3;15961:17;;;15958:43;;15981:18;;:::i;:::-;-1:-1:-1;16028:1:1;16017:13;;15901:135::o

Swarm Source

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