ETH Price: $3,016.53 (+2.91%)
Gas: 1 Gwei

Token

PepeFlokiEth (PPeth)
 

Overview

Max Total Supply

1,000,000,000 PPeth

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,424,799.081515499425947187 PPeth

Value
$0.00
0xfcb0ef6e55dcff30e10b0dcc2a42833f7f852ad4
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:
PepeFlokiEth

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//       ██████╗ ██████╗ ███╗   ██╗████████╗██████╗  █████╗  ██████╗████████╗    ██████╗ ██╗   ██╗
//      ██╔════╝██╔═══██╗████╗  ██║╚══██╔══╝██╔══██╗██╔══██╗██╔════╝╚══██╔══╝    ██╔══██╗╚██╗ ██╔╝
//      ██║     ██║   ██║██╔██╗ ██║   ██║   ██████╔╝███████║██║        ██║       ██████╔╝ ╚████╔╝
//      ██║     ██║   ██║██║╚██╗██║   ██║   ██╔══██╗██╔══██║██║        ██║       ██╔══██╗  ╚██╔╝
//      ╚██████╗╚██████╔╝██║ ╚████║   ██║   ██║  ██║██║  ██║╚██████╗   ██║       ██████╔╝   ██║
//       ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝   ╚═╝       ╚═════╝    ╚═╝
//
//  ██████╗ ██╗      ██████╗  ██████╗██╗  ██╗███████╗ █████╗ ███████╗██╗   ██╗    ██████╗ ██████╗ ███╗   ███╗
//  ██╔══██╗██║     ██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗██╔════╝██║   ██║   ██╔════╝██╔═══██╗████╗ ████║
//  ██████╔╝██║     ██║   ██║██║     █████╔╝ ███████╗███████║█████╗  ██║   ██║   ██║     ██║   ██║██╔████╔██║
//  ██╔══██╗██║     ██║   ██║██║     ██╔═██╗ ╚════██║██╔══██║██╔══╝  ██║   ██║   ██║     ██║   ██║██║╚██╔╝██║
//  ██████╔╝███████╗╚██████╔╝╚██████╗██║  ██╗███████║██║  ██║██║     ╚██████╔╝██╗╚██████╗╚██████╔╝██║ ╚═╝ ██║
//  ╚═════╝ ╚══════╝ ╚═════╝  ╚═════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═╝      ╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝     ╚═╝
//

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract PepeFlokiEth is ERC20, Ownable {
    using SafeERC20 for IERC20;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;
    uint256 public marketingTaxTransfer;

    uint256 public buyBackTaxBuy;
    uint256 public buyBackTaxSell;
    uint256 public buyBackTaxTransfer;

    uint256 public immutable antiBotTax;

    uint256 public immutable denominator;

    uint256 public marketingTokenAmount;
    uint256 public buyBackTokenAmount;

    address public marketingWallet;
    address public immutable buyBackToken;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool public isLiquidityAdded;
    uint256 public antiBotBlockAmount;
    uint256 public antiBotBlockEnd;

    bool public isTokenLeftEnabled;
    uint256 public immutable tokenLeftAmount;

    mapping(address => bool) private _isAutomatedMarketMakerPair;
    mapping(address => bool) private _isExcludedFromFees;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    event UpdateBuyTax(uint256 marketingTaxBuy, uint256 buyBackTaxBuy);
    event UpdateSellTax(uint256 marketingTaxSell, uint256 buyBackTaxSell);
    event UpdateTransferTax(
        uint256 marketingTaxTransfer,
        uint256 buyBackTaxTransfer
    );
    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event TriggerLiquidityAdded(uint256 antiBotBlockEnd);
    event UpdateAntiBotBlockAmount(uint256 antiBotBlockAmount);
    event UpdateTokenLeftStatus(bool status);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("PepeFlokiEth", "PPeth") {
        _transferOwnership(0x62c3153302f15A356805a308DbCaD41f725443e6);
        address tokenHolder = 0x699BA90D8ACd7AD3220E53c92EED034E1c6Ddf39;

        _mint(tokenHolder, 1_000_000_000 * (10 ** 18));

        marketingTaxBuy = 0;
        marketingTaxSell = 300;
        marketingTaxTransfer = 200;

        buyBackTaxBuy = 0;
        buyBackTaxSell = 200;
        buyBackTaxTransfer = 0;

        antiBotTax = 2_500;

        denominator = 10_000;

        marketingWallet = 0x7f8bfB5661498a35b9Ebb629addD9240f3E42ead;
        buyBackToken = 0xcf0C122c6b73ff809C693DB761e7BaeBe62b6a2E;

        swapTokensAtAmount = (totalSupply() * 1) / 10_000;
        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        antiBotBlockAmount = 2;

        isTokenLeftEnabled = true;
        tokenLeftAmount = 1 * (10 ** 18);

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;

        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(owner())] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;
        _isExcludedFromFees[address(tokenHolder)] = true;
    }

    receive() external payable {}

    fallback() external payable {}

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Cannot found router on this network");
        }
    }

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function SetBuyTax(
        uint256 _marketingTaxBuy,
        uint256 _buyBackTaxBuy
    ) external onlyOwner {
        require(
            marketingTaxBuy != _marketingTaxBuy ||
                buyBackTaxBuy != _buyBackTaxBuy,
            "Buy Tax already on that value"
        );
        require(
            _marketingTaxBuy +
                _buyBackTaxBuy +
                marketingTaxSell +
                buyBackTaxSell <=
                2_500,
            "Buy Tax and Sell Tax cannot be more than 25%"
        );

        marketingTaxBuy = _marketingTaxBuy;
        buyBackTaxBuy = _buyBackTaxBuy;

        emit UpdateBuyTax(_marketingTaxBuy, _buyBackTaxBuy);
    }

    function SetSellTax(
        uint256 _marketingTaxSell,
        uint256 _buyBackTaxSell
    ) external onlyOwner {
        require(
            marketingTaxSell != _marketingTaxSell ||
                buyBackTaxSell != _buyBackTaxSell,
            "Sell Tax already on that value"
        );
        require(
            marketingTaxBuy +
                buyBackTaxBuy +
                _marketingTaxSell +
                _buyBackTaxSell <=
                2_500,
            "Buy Tax and Sell Tax cannot be more than 25%"
        );

        marketingTaxSell = _marketingTaxSell;
        buyBackTaxSell = _buyBackTaxSell;

        emit UpdateSellTax(_marketingTaxSell, _buyBackTaxSell);
    }

    function SetTransferTax(
        uint256 _marketingTaxTransfer,
        uint256 _buyBackTaxTransfer
    ) external onlyOwner {
        require(
            marketingTaxTransfer != _marketingTaxTransfer ||
                buyBackTaxTransfer != _buyBackTaxTransfer,
            "Transfer Tax already on that value"
        );
        require(
            marketingTaxBuy +
                buyBackTaxBuy +
                _marketingTaxTransfer +
                _buyBackTaxTransfer <=
                2_500,
            "Buy Tax and Transfer Tax cannot be more than 25%"
        );

        marketingTaxTransfer = _marketingTaxTransfer;
        buyBackTaxTransfer = _buyBackTaxTransfer;

        emit UpdateTransferTax(_marketingTaxTransfer, _buyBackTaxTransfer);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(amount >= 1, "Amount must be equal or greater than 1 Wei");

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setAntiBotBlockAmount(uint256 amount) external onlyOwner {
        require(
            !isLiquidityAdded,
            "Cannot modify AntiBot block amount after liquidity added"
        );
        require(
            antiBotBlockAmount != amount,
            "antiBotBlockAmount already on that amount"
        );
        require(amount <= 5, "Block amount must be below 5 block");

        antiBotBlockAmount = amount;

        emit UpdateAntiBotBlockAmount(amount);
    }

    function toggleTokenLeft(bool status) external onlyOwner {
        require(isTokenLeftEnabled != status, "TokenLeft already on status");

        isTokenLeftEnabled = status;
        emit UpdateTokenLeftStatus(status);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) external onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) external view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

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

        if (!isLiquidityAdded && _isAutomatedMarketMakerPair[to]) {
            isLiquidityAdded = true;
            antiBotBlockEnd = block.number + antiBotBlockAmount;
            emit TriggerLiquidityAdded(antiBotBlockEnd);
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !_isAutomatedMarketMakerPair[from] &&
            isSwapBackEnabled
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            takeFee = false;
        }

        if (takeFee) {
            if (!_isAutomatedMarketMakerPair[from] && isTokenLeftEnabled) {
                require(
                    amount > tokenLeftAmount,
                    "PepeFlokiEth: amount must be greater than tokenLeftAmount"
                );
                amount -= tokenLeftAmount;
            }

            uint256 tempAntiBotAmount;
            uint256 tempMarketingAmount;
            uint256 tempBuyBackAmount;

            if (_isAutomatedMarketMakerPair[from]) {
                if (block.number <= antiBotBlockEnd) {
                    tempAntiBotAmount = (amount * antiBotTax) / denominator;
                } else {
                    tempMarketingAmount =
                        (amount * marketingTaxBuy) /
                        denominator;
                    marketingTokenAmount += tempMarketingAmount;
                    tempBuyBackAmount = (amount * buyBackTaxBuy) / denominator;
                    buyBackTokenAmount += tempBuyBackAmount;
                }
            } else if (_isAutomatedMarketMakerPair[to]) {
                tempMarketingAmount = (amount * marketingTaxSell) / denominator;
                marketingTokenAmount += tempMarketingAmount;
                tempBuyBackAmount = (amount * buyBackTaxSell) / denominator;
                buyBackTokenAmount += tempBuyBackAmount;
            } else {
                tempMarketingAmount =
                    (amount * marketingTaxTransfer) /
                    denominator;
                marketingTokenAmount += tempMarketingAmount;
                tempBuyBackAmount = (amount * buyBackTaxTransfer) / denominator;
                buyBackTokenAmount += tempBuyBackAmount;
            }

            uint256 fees = tempAntiBotAmount +
                tempMarketingAmount +
                tempBuyBackAmount;

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

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

    function swapBack() internal inSwap {
        address[] memory swapBackPath = new address[](2);
        swapBackPath[0] = address(this);
        swapBackPath[1] = uniswapV2Router.WETH();

        address[] memory buyBackPath = new address[](3);
        buyBackPath[0] = address(this);
        buyBackPath[1] = uniswapV2Router.WETH();
        buyBackPath[2] = address(buyBackToken);

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 totalTax = marketingTokenAmount + buyBackTokenAmount;

        uint256 buyBackAmount = (contractTokenBalance * buyBackTokenAmount) /
            totalTax;

        uint256 swapBackAmount = contractTokenBalance - buyBackAmount;

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapBackAmount,
            0,
            swapBackPath,
            address(marketingWallet),
            block.timestamp
        );

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            buyBackAmount,
            0,
            buyBackPath,
            address(0xdead),
            block.timestamp
        );

        marketingTokenAmount = 0;
        buyBackTokenAmount = 0;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }
}

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":"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"antiBotBlockEnd","type":"uint256"}],"name":"TriggerLiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"antiBotBlockAmount","type":"uint256"}],"name":"UpdateAntiBotBlockAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateTokenLeftStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingTaxTransfer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackTaxTransfer","type":"uint256"}],"name":"UpdateTransferTax","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_buyBackTaxBuy","type":"uint256"}],"name":"SetBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"},{"internalType":"uint256","name":"_buyBackTaxSell","type":"uint256"}],"name":"SetSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingTaxTransfer","type":"uint256"},{"internalType":"uint256","name":"_buyBackTaxTransfer","type":"uint256"}],"name":"SetTransferTax","outputs":[],"stateMutability":"nonpayable","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":[],"name":"antiBotBlockAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotBlockEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotTax","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":"buyBackTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackTaxTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTokenLeftEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setAntiBotBlockAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleTokenLeft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenLeftAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101406040523480156200001257600080fd5b506040518060400160405280600c81526020016b0a0cae0ca8cd8ded6d28ae8d60a31b815250604051806040016040528060058152602001640a0a0cae8d60db1b8152508160039081620000679190620007ce565b506004620000768282620007ce565b505050620000936200008d6200041660201b60201c565b6200041a565b620000b27362c3153302f15a356805a308dbcad41f725443e66200041a565b73699ba90d8acd7ad3220e53c92eed034e1c6ddf39620000df816b033b2e3c9fd0803ce80000006200046c565b6000600681905561012c60075560c860088190556009829055600a55600b556109c460805261271060a0819052600e80546001600160a01b031916737f8bfb5661498a35b9ebb629addd9240f3e42ead17905573cf0c122c6b73ff809c693db761e7baebe62b6a2e60c0526200015460025490565b62000161906001620008b0565b6200016d9190620008d0565b600f556010805460ff1916600117905560006200018962000533565b9050806001600160a01b031660e0816001600160a01b03168152505060e0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020c9190620008f3565b6001600160a01b031663c9c653963060e0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002829190620008f3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f69190620008f3565b6001600160a01b03166101005260e05162000316903090600019620005fd565b600260115560138054600160ff199182168117909255670de0b6b3a764000061012052610100516001600160a01b031660009081526014602090815260408220805484168517905561dead82526015908190527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e580549093168417909255620003a76005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601590935281832080548516600190811790915560e0518216845282842080548616821790559516825290208054909116909217909155506200093b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620004c85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620004dc919062000925565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000466038036200055757507310ed43c718714eb63d5aa57b78b54704e256024e90565b4660610362000579575073d99d1c33f9fc3444f8101754abc46c52416550d190565b4660011480620005895750466005145b15620005a85750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401620004bf565b6001600160a01b038316620006615760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004bf565b6001600160a01b038216620006c45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004bf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075557607f821691505b6020821081036200077657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200072557600081815260208120601f850160051c81016020861015620007a55750805b601f850160051c820191505b81811015620007c657828155600101620007b1565b505050505050565b81516001600160401b03811115620007ea57620007ea6200072a565b6200080281620007fb845462000740565b846200077c565b602080601f8311600181146200083a5760008415620008215750858301515b600019600386901b1c1916600185901b178555620007c6565b600085815260208120601f198616915b828110156200086b578886015182559484019460019091019084016200084a565b50858210156200088a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008ca57620008ca6200089a565b92915050565b600082620008ee57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200090657600080fd5b81516001600160a01b03811681146200091e57600080fd5b9392505050565b80820180821115620008ca57620008ca6200089a565b60805160a05160c05160e05161010051610120516131db620009f4600039600081816103de0152818161205e01526120f6015260006104dd0152600081816103730152818161247d015281816125820152818161270401526127a30152600081816107c8015261263701526000818161071e0152818161214e015281816121aa015281816121ff01528181612275015281816122ca015281816122f6015261234b015260008181610919015261217201526131db6000f3fe6080604052600436106102fd5760003560e01c80637949a4031161018d578063b535d353116100e0578063e2f456051161008f578063f2fde38b1161006c578063f2fde38b1461093b578063f69eaf201461095b578063f97eb83b14610971578063f9d0831a1461099157005b8063e2f45605146108d1578063ecbb1797146108e7578063ef78236d1461090757005b8063d54f7d5e116100bd578063d54f7d5e14610856578063d63cad221461086b578063dd62ed3e1461088b57005b8063b535d3531461080a578063cb4903e914610820578063d5129bb61461083657005b80639a7a23d61161013c578063a9059cbb11610119578063a9059cbb14610796578063ab68dd19146107b6578063afa4f3b2146107ea57005b80639a7a23d614610740578063a457c2d714610760578063a7bc13a91461078057005b806395afa6181161016a57806395afa618146106d757806395d89b41146106f757806396ce07951461070c57005b80637949a4031461066a57806384ec44d2146106a35780638da5cb5b146106b957005b806349bd5a5e1161025057806366e1f48e116101ff578063715018a6116101dc578063715018a61461060957806371afc7131461061e578063721e62331461063457806375f0a8741461064a57005b806366e1f48e146105a857806366eb3785146105be57806370a08231146105d357005b80634fff60be1161022d5780634fff60be1461055857806352dfc8d01461056e5780635d098b381461058857005b806349bd5a5e146104cb5780634aaa98e9146104ff5780634fbee1931461051f57005b80631f88a23e116102ac578063313ce56711610289578063313ce56714610479578063395093511461049557806342d0b0bc146104b557005b80631f88a23e1461041f57806323b872dd1461043f5780632ffb888a1461045f57005b806318160ddd116102da57806318160ddd146103ad5780631a8e27b9146103cc5780631e17ba391461040057005b806306fdde0314610306578063095ea7b3146103315780631694505e1461036157005b3661030457005b005b34801561031257600080fd5b5061031b6109b1565b6040516103289190612dd8565b60405180910390f35b34801561033d57600080fd5b5061035161034c366004612e3e565b610a43565b6040519015158152602001610328565b34801561036d57600080fd5b506103957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610328565b3480156103b957600080fd5b506002545b604051908152602001610328565b3480156103d857600080fd5b506103be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040c57600080fd5b5060105461035190610100900460ff1681565b34801561042b57600080fd5b5061030461043a366004612e78565b610a5d565b34801561044b57600080fd5b5061035161045a366004612e9c565b610b2a565b34801561046b57600080fd5b506013546103519060ff1681565b34801561048557600080fd5b5060405160128152602001610328565b3480156104a157600080fd5b506103516104b0366004612e3e565b610b4e565b3480156104c157600080fd5b506103be60075481565b3480156104d757600080fd5b506103957f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061030461051a366004612edd565b610b8d565b34801561052b57600080fd5b5061035161053a366004612ef6565b6001600160a01b031660009081526015602052604090205460ff1690565b34801561056457600080fd5b506103be600a5481565b34801561057a57600080fd5b506010546103519060ff1681565b34801561059457600080fd5b506103046105a3366004612ef6565b610d36565b3480156105b457600080fd5b506103be60125481565b3480156105ca57600080fd5b50610304610f1e565b3480156105df57600080fd5b506103be6105ee366004612ef6565b6001600160a01b031660009081526020819052604090205490565b34801561061557600080fd5b50610304610f86565b34801561062a57600080fd5b506103be600c5481565b34801561064057600080fd5b506103be60065481565b34801561065657600080fd5b50600e54610395906001600160a01b031681565b34801561067657600080fd5b50610351610685366004612ef6565b6001600160a01b031660009081526014602052604090205460ff1690565b3480156106af57600080fd5b506103be60085481565b3480156106c557600080fd5b506005546001600160a01b0316610395565b3480156106e357600080fd5b506103046106f2366004612f13565b610f9a565b34801561070357600080fd5b5061031b6110e6565b34801561071857600080fd5b506103be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561074c57600080fd5b5061030461075b366004612f35565b6110f5565b34801561076c57600080fd5b5061035161077b366004612e3e565b611211565b34801561078c57600080fd5b506103be60095481565b3480156107a257600080fd5b506103516107b1366004612e3e565b6112bb565b3480156107c257600080fd5b506103957f000000000000000000000000000000000000000000000000000000000000000081565b3480156107f657600080fd5b50610304610805366004612edd565b6112c9565b34801561081657600080fd5b506103be60115481565b34801561082c57600080fd5b506103be600d5481565b34801561084257600080fd5b50610304610851366004612f13565b6113f4565b34801561086257600080fd5b50610395611538565b34801561087757600080fd5b50610304610886366004612f35565b611617565b34801561089757600080fd5b506103be6108a6366004612f6e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dd57600080fd5b506103be600f5481565b3480156108f357600080fd5b50610304610902366004612f13565b61172b565b34801561091357600080fd5b506103be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561094757600080fd5b50610304610956366004612ef6565b611895565b34801561096757600080fd5b506103be600b5481565b34801561097d57600080fd5b5061030461098c366004612e78565b611922565b34801561099d57600080fd5b506103046109ac366004612ef6565b6119e3565b6060600380546109c090612f9c565b80601f01602080910402602001604051908101604052809291908181526020018280546109ec90612f9c565b8015610a395780601f10610a0e57610100808354040283529160200191610a39565b820191906000526020600020905b815481529060010190602001808311610a1c57829003601f168201915b5050505050905090565b600033610a51818585611b22565b60019150505b92915050565b610a65611c7a565b60105481151560ff909116151503610ac45760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e2073746174757300000000000060448201526064015b60405180910390fd5b601080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610b38858285611cd4565b610b43858585611d84565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610a519082908690610b8890879061301e565b611b22565b610b95611c7a565b601054610100900460ff1615610c135760405162461bcd60e51b815260206004820152603860248201527f43616e6e6f74206d6f6469667920416e7469426f7420626c6f636b20616d6f7560448201527f6e74206166746572206c697175696469747920616464656400000000000000006064820152608401610abb565b8060115403610c8a5760405162461bcd60e51b815260206004820152602960248201527f616e7469426f74426c6f636b416d6f756e7420616c7265616479206f6e20746860448201527f617420616d6f756e7400000000000000000000000000000000000000000000006064820152608401610abb565b6005811115610d015760405162461bcd60e51b815260206004820152602260248201527f426c6f636b20616d6f756e74206d7573742062652062656c6f77203520626c6f60448201527f636b0000000000000000000000000000000000000000000000000000000000006064820152608401610abb565b60118190556040518181527f2be270cc1630e720949b735805885698c726ad79e8a4998005b012832f4c739a90602001610b1f565b610d3e611c7a565b600e546001600160a01b0390811690821603610dc25760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b038116610e3e5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b0381163b15610ebc5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610abb565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526020819052604090205480610f7b5760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610abb565b610f836123e7565b50565b610f8e611c7a565b610f986000612851565b565b610fa2611c7a565b81600654141580610fb557508060095414155b6110015760405162461bcd60e51b815260206004820152601d60248201527f4275792054617820616c7265616479206f6e20746861742076616c75650000006044820152606401610abb565b6109c4600a546007548385611016919061301e565b611020919061301e565b61102a919061301e565b111561109e5760405162461bcd60e51b815260206004820152602c60248201527f4275792054617820616e642053656c6c205461782063616e6e6f74206265206d60448201527f6f7265207468616e2032352500000000000000000000000000000000000000006064820152608401610abb565b6006829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600480546109c090612f9c565b6110fd611c7a565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036111935760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201527f65206f66202773746174757327000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b03821660008181526014602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320591015b60405180910390a25050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156112ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610abb565b610b438286868403611b22565b600033610a51818585611d84565b6112d1611c7a565b80600f54036113485760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860448201527f617420616d6f756e7400000000000000000000000000000000000000000000006064820152608401610abb565b60018110156113bf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e203120576569000000000000000000000000000000000000000000006064820152608401610abb565b600f8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610b1f565b6113fc611c7a565b8160075414158061140f575080600a5414155b61145b5760405162461bcd60e51b815260206004820152601e60248201527f53656c6c2054617820616c7265616479206f6e20746861742076616c756500006044820152606401610abb565b6109c48183600954600654611470919061301e565b61147a919061301e565b611484919061301e565b11156114f85760405162461bcd60e51b815260206004820152602c60248201527f4275792054617820616e642053656c6c205461782063616e6e6f74206265206d60448201527f6f7265207468616e2032352500000000000000000000000000000000000000006064820152608401610abb565b6007829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e91016110da565b60004660380361155b57507310ed43c718714eb63d5aa57b78b54704e256024e90565b4660610361157c575073d99d1c33f9fc3444f8101754abc46c52416550d190565b466001148061158b5750466005145b156115a95750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760448201527f6f726b00000000000000000000000000000000000000000000000000000000006064820152608401610abb565b61161f611c7a565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036116b55760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b03821660008181526015602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101611205565b611733611c7a565b81600854141580611746575080600b5414155b6117b85760405162461bcd60e51b815260206004820152602260248201527f5472616e736665722054617820616c7265616479206f6e20746861742076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610abb565b6109c481836009546006546117cd919061301e565b6117d7919061301e565b6117e1919061301e565b11156118555760405162461bcd60e51b815260206004820152603060248201527f4275792054617820616e64205472616e73666572205461782063616e6e6f742060448201527f6265206d6f7265207468616e20323525000000000000000000000000000000006064820152608401610abb565b6008829055600b81905560408051838152602081018390527fe7a2cfe4bb087fff5c33eb67f83294cf34b6163457766a10a0e6e9104d8cb42491016110da565b61189d611c7a565b6001600160a01b0381166119195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610abb565b610f8381612851565b61192a611c7a565b60135481151560ff9091161515036119845760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e4c65667420616c7265616479206f6e2073746174757300000000006044820152606401610abb565b601380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fa0a31bfa6b84acdde370897a622ede8ddb9e1814c1d2d22a5805fa280bfa8a0790602001610b1f565b6119eb611c7a565b306001600160a01b03821603611a435760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610abb565b6001600160a01b038116611a815760405133904780156108fc02916000818181858888f19350505050158015611a7d573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613031565b9050611b1d6001600160a01b03831633836128bb565b505050565b6001600160a01b038316611b9d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b038216611c195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abb565b6001600160a01b038381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d7e5781811015611d715760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610abb565b611d7e8484848403611b22565b50505050565b6001600160a01b038316611e005760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b038216611e7c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610abb565b80600003611e9057611b1d8383600061293b565b601054610100900460ff16158015611ec057506001600160a01b03821660009081526014602052604090205460ff165b15611f3757601080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055601154611efe904361301e565b60128190556040519081527f34d885bdf06596d4aef8d4a385c7ec2afb42ad1053f9cf9b7ce938e02e76ef629060200160405180910390a15b30600090815260208190526040902054600f5481108015908190611f765750600e5474010000000000000000000000000000000000000000900460ff16155b8015611f9b57506001600160a01b03851660009081526014602052604090205460ff16155b8015611fa9575060105460ff165b15611fb657611fb66123e7565b6001600160a01b03851660009081526015602052604090205460019060ff1680611ff857506001600160a01b03851660009081526015602052604090205460ff165b8061201d5750600e5474010000000000000000000000000000000000000000900460ff165b15612026575060005b80156123d4576001600160a01b03861660009081526014602052604090205460ff16158015612057575060135460ff165b1561211e577f000000000000000000000000000000000000000000000000000000000000000084116120f15760405162461bcd60e51b815260206004820152603960248201527f50657065466c6f6b694574683a20616d6f756e74206d7573742062652067726560448201527f61746572207468616e20746f6b656e4c656674416d6f756e74000000000000006064820152608401610abb565b61211b7f00000000000000000000000000000000000000000000000000000000000000008561304a565b93505b6001600160a01b0386166000908152601460205260408120548190819060ff16156122525760125443116121a8577f00000000000000000000000000000000000000000000000000000000000000006121977f00000000000000000000000000000000000000000000000000000000000000008961305d565b6121a19190613074565b9250612399565b7f0000000000000000000000000000000000000000000000000000000000000000600654886121d7919061305d565b6121e19190613074565b915081600c60008282546121f5919061301e565b90915550506009547f000000000000000000000000000000000000000000000000000000000000000090612229908961305d565b6122339190613074565b905080600d6000828254612247919061301e565b909155506123999050565b6001600160a01b03881660009081526014602052604090205460ff16156122f4577f0000000000000000000000000000000000000000000000000000000000000000600754886122a2919061305d565b6122ac9190613074565b915081600c60008282546122c0919061301e565b9091555050600a547f000000000000000000000000000000000000000000000000000000000000000090612229908961305d565b7f000000000000000000000000000000000000000000000000000000000000000060085488612323919061305d565b61232d9190613074565b915081600c6000828254612341919061301e565b9091555050600b547f000000000000000000000000000000000000000000000000000000000000000090612375908961305d565b61237f9190613074565b905080600d6000828254612393919061301e565b90915550505b6000816123a6848661301e565b6123b0919061301e565b905080156123cf576123c2818961304a565b97506123cf8a308361293b565b505050505b6123df86868661293b565b505050505050565b600e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061245b5761245b6130af565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fd91906130de565b81600181518110612510576125106130af565b6001600160a01b03929092166020928302919091018201526040805160038082526080820190925260009290919082016060803683370190505090503081600081518110612560576125606130af565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260291906130de565b81600181518110612615576126156130af565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600281518110612669576126696130af565b6001600160a01b0390921660209283029190910182015230600090815290819052604081205490506000600d54600c546126a3919061301e565b9050600081600d54846126b6919061305d565b6126c09190613074565b905060006126ce828561304a565b600e546040517f791ac9470000000000000000000000000000000000000000000000000000000081529192506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263791ac947926127439286926000928d92169042906004016130fb565b600060405180830381600087803b15801561275d57600080fd5b505af1158015612771573d6000803e3d6000fd5b50506040517f5c11d7950000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250635c11d79591506127e59085906000908a9061dead9042906004016130fb565b600060405180830381600087803b1580156127ff57600080fd5b505af1158015612813573d6000803e3d6000fd5b50506000600c819055600d555050600e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055505050505050565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611b1d908490612b28565b6001600160a01b0383166129b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b038216612a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b03831660009081526020819052604090205481811015612ac25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611d7e565b6000612b7d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c0d9092919063ffffffff16565b805190915015611b1d5780806020019051810190612b9b919061316c565b611b1d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610abb565b6060612c1c8484600085612c24565b949350505050565b606082471015612c9c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610abb565b600080866001600160a01b03168587604051612cb89190613189565b60006040518083038185875af1925050503d8060008114612cf5576040519150601f19603f3d011682016040523d82523d6000602084013e612cfa565b606091505b5091509150612d0b87838387612d16565b979650505050505050565b60608315612d85578251600003612d7e576001600160a01b0385163b612d7e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610abb565b5081612c1c565b612c1c8383815115612d9a5781518083602001fd5b8060405162461bcd60e51b8152600401610abb9190612dd8565b60005b83811015612dcf578181015183820152602001612db7565b50506000910152565b6020815260008251806020840152612df7816040850160208701612db4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114610f8357600080fd5b60008060408385031215612e5157600080fd5b8235612e5c81612e29565b946020939093013593505050565b8015158114610f8357600080fd5b600060208284031215612e8a57600080fd5b8135612e9581612e6a565b9392505050565b600080600060608486031215612eb157600080fd5b8335612ebc81612e29565b92506020840135612ecc81612e29565b929592945050506040919091013590565b600060208284031215612eef57600080fd5b5035919050565b600060208284031215612f0857600080fd5b8135612e9581612e29565b60008060408385031215612f2657600080fd5b50508035926020909101359150565b60008060408385031215612f4857600080fd5b8235612f5381612e29565b91506020830135612f6381612e6a565b809150509250929050565b60008060408385031215612f8157600080fd5b8235612f8c81612e29565b91506020830135612f6381612e29565b600181811c90821680612fb057607f821691505b602082108103612fe9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a5757610a57612fef565b60006020828403121561304357600080fd5b5051919050565b81810381811115610a5757610a57612fef565b8082028115828204841417610a5757610a57612fef565b6000826130aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156130f057600080fd5b8151612e9581612e29565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561314b5784516001600160a01b031683529383019391830191600101613126565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020828403121561317e57600080fd5b8151612e9581612e6a565b6000825161319b818460208701612db4565b919091019291505056fea264697066735822122066326c42436b1260a8e5aca19e9427577de168bab8d4253e62316f241085520564736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102fd5760003560e01c80637949a4031161018d578063b535d353116100e0578063e2f456051161008f578063f2fde38b1161006c578063f2fde38b1461093b578063f69eaf201461095b578063f97eb83b14610971578063f9d0831a1461099157005b8063e2f45605146108d1578063ecbb1797146108e7578063ef78236d1461090757005b8063d54f7d5e116100bd578063d54f7d5e14610856578063d63cad221461086b578063dd62ed3e1461088b57005b8063b535d3531461080a578063cb4903e914610820578063d5129bb61461083657005b80639a7a23d61161013c578063a9059cbb11610119578063a9059cbb14610796578063ab68dd19146107b6578063afa4f3b2146107ea57005b80639a7a23d614610740578063a457c2d714610760578063a7bc13a91461078057005b806395afa6181161016a57806395afa618146106d757806395d89b41146106f757806396ce07951461070c57005b80637949a4031461066a57806384ec44d2146106a35780638da5cb5b146106b957005b806349bd5a5e1161025057806366e1f48e116101ff578063715018a6116101dc578063715018a61461060957806371afc7131461061e578063721e62331461063457806375f0a8741461064a57005b806366e1f48e146105a857806366eb3785146105be57806370a08231146105d357005b80634fff60be1161022d5780634fff60be1461055857806352dfc8d01461056e5780635d098b381461058857005b806349bd5a5e146104cb5780634aaa98e9146104ff5780634fbee1931461051f57005b80631f88a23e116102ac578063313ce56711610289578063313ce56714610479578063395093511461049557806342d0b0bc146104b557005b80631f88a23e1461041f57806323b872dd1461043f5780632ffb888a1461045f57005b806318160ddd116102da57806318160ddd146103ad5780631a8e27b9146103cc5780631e17ba391461040057005b806306fdde0314610306578063095ea7b3146103315780631694505e1461036157005b3661030457005b005b34801561031257600080fd5b5061031b6109b1565b6040516103289190612dd8565b60405180910390f35b34801561033d57600080fd5b5061035161034c366004612e3e565b610a43565b6040519015158152602001610328565b34801561036d57600080fd5b506103957f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610328565b3480156103b957600080fd5b506002545b604051908152602001610328565b3480156103d857600080fd5b506103be7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b34801561040c57600080fd5b5060105461035190610100900460ff1681565b34801561042b57600080fd5b5061030461043a366004612e78565b610a5d565b34801561044b57600080fd5b5061035161045a366004612e9c565b610b2a565b34801561046b57600080fd5b506013546103519060ff1681565b34801561048557600080fd5b5060405160128152602001610328565b3480156104a157600080fd5b506103516104b0366004612e3e565b610b4e565b3480156104c157600080fd5b506103be60075481565b3480156104d757600080fd5b506103957f000000000000000000000000a2cd87e42cea3f010e8dcebc57e943374baa975081565b34801561050b57600080fd5b5061030461051a366004612edd565b610b8d565b34801561052b57600080fd5b5061035161053a366004612ef6565b6001600160a01b031660009081526015602052604090205460ff1690565b34801561056457600080fd5b506103be600a5481565b34801561057a57600080fd5b506010546103519060ff1681565b34801561059457600080fd5b506103046105a3366004612ef6565b610d36565b3480156105b457600080fd5b506103be60125481565b3480156105ca57600080fd5b50610304610f1e565b3480156105df57600080fd5b506103be6105ee366004612ef6565b6001600160a01b031660009081526020819052604090205490565b34801561061557600080fd5b50610304610f86565b34801561062a57600080fd5b506103be600c5481565b34801561064057600080fd5b506103be60065481565b34801561065657600080fd5b50600e54610395906001600160a01b031681565b34801561067657600080fd5b50610351610685366004612ef6565b6001600160a01b031660009081526014602052604090205460ff1690565b3480156106af57600080fd5b506103be60085481565b3480156106c557600080fd5b506005546001600160a01b0316610395565b3480156106e357600080fd5b506103046106f2366004612f13565b610f9a565b34801561070357600080fd5b5061031b6110e6565b34801561071857600080fd5b506103be7f000000000000000000000000000000000000000000000000000000000000271081565b34801561074c57600080fd5b5061030461075b366004612f35565b6110f5565b34801561076c57600080fd5b5061035161077b366004612e3e565b611211565b34801561078c57600080fd5b506103be60095481565b3480156107a257600080fd5b506103516107b1366004612e3e565b6112bb565b3480156107c257600080fd5b506103957f000000000000000000000000cf0c122c6b73ff809c693db761e7baebe62b6a2e81565b3480156107f657600080fd5b50610304610805366004612edd565b6112c9565b34801561081657600080fd5b506103be60115481565b34801561082c57600080fd5b506103be600d5481565b34801561084257600080fd5b50610304610851366004612f13565b6113f4565b34801561086257600080fd5b50610395611538565b34801561087757600080fd5b50610304610886366004612f35565b611617565b34801561089757600080fd5b506103be6108a6366004612f6e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dd57600080fd5b506103be600f5481565b3480156108f357600080fd5b50610304610902366004612f13565b61172b565b34801561091357600080fd5b506103be7f00000000000000000000000000000000000000000000000000000000000009c481565b34801561094757600080fd5b50610304610956366004612ef6565b611895565b34801561096757600080fd5b506103be600b5481565b34801561097d57600080fd5b5061030461098c366004612e78565b611922565b34801561099d57600080fd5b506103046109ac366004612ef6565b6119e3565b6060600380546109c090612f9c565b80601f01602080910402602001604051908101604052809291908181526020018280546109ec90612f9c565b8015610a395780601f10610a0e57610100808354040283529160200191610a39565b820191906000526020600020905b815481529060010190602001808311610a1c57829003601f168201915b5050505050905090565b600033610a51818585611b22565b60019150505b92915050565b610a65611c7a565b60105481151560ff909116151503610ac45760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e2073746174757300000000000060448201526064015b60405180910390fd5b601080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610b38858285611cd4565b610b43858585611d84565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610a519082908690610b8890879061301e565b611b22565b610b95611c7a565b601054610100900460ff1615610c135760405162461bcd60e51b815260206004820152603860248201527f43616e6e6f74206d6f6469667920416e7469426f7420626c6f636b20616d6f7560448201527f6e74206166746572206c697175696469747920616464656400000000000000006064820152608401610abb565b8060115403610c8a5760405162461bcd60e51b815260206004820152602960248201527f616e7469426f74426c6f636b416d6f756e7420616c7265616479206f6e20746860448201527f617420616d6f756e7400000000000000000000000000000000000000000000006064820152608401610abb565b6005811115610d015760405162461bcd60e51b815260206004820152602260248201527f426c6f636b20616d6f756e74206d7573742062652062656c6f77203520626c6f60448201527f636b0000000000000000000000000000000000000000000000000000000000006064820152608401610abb565b60118190556040518181527f2be270cc1630e720949b735805885698c726ad79e8a4998005b012832f4c739a90602001610b1f565b610d3e611c7a565b600e546001600160a01b0390811690821603610dc25760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b038116610e3e5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b0381163b15610ebc5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610abb565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526020819052604090205480610f7b5760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610abb565b610f836123e7565b50565b610f8e611c7a565b610f986000612851565b565b610fa2611c7a565b81600654141580610fb557508060095414155b6110015760405162461bcd60e51b815260206004820152601d60248201527f4275792054617820616c7265616479206f6e20746861742076616c75650000006044820152606401610abb565b6109c4600a546007548385611016919061301e565b611020919061301e565b61102a919061301e565b111561109e5760405162461bcd60e51b815260206004820152602c60248201527f4275792054617820616e642053656c6c205461782063616e6e6f74206265206d60448201527f6f7265207468616e2032352500000000000000000000000000000000000000006064820152608401610abb565b6006829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600480546109c090612f9c565b6110fd611c7a565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036111935760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201527f65206f66202773746174757327000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b03821660008181526014602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320591015b60405180910390a25050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156112ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610abb565b610b438286868403611b22565b600033610a51818585611d84565b6112d1611c7a565b80600f54036113485760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860448201527f617420616d6f756e7400000000000000000000000000000000000000000000006064820152608401610abb565b60018110156113bf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e203120576569000000000000000000000000000000000000000000006064820152608401610abb565b600f8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610b1f565b6113fc611c7a565b8160075414158061140f575080600a5414155b61145b5760405162461bcd60e51b815260206004820152601e60248201527f53656c6c2054617820616c7265616479206f6e20746861742076616c756500006044820152606401610abb565b6109c48183600954600654611470919061301e565b61147a919061301e565b611484919061301e565b11156114f85760405162461bcd60e51b815260206004820152602c60248201527f4275792054617820616e642053656c6c205461782063616e6e6f74206265206d60448201527f6f7265207468616e2032352500000000000000000000000000000000000000006064820152608401610abb565b6007829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e91016110da565b60004660380361155b57507310ed43c718714eb63d5aa57b78b54704e256024e90565b4660610361157c575073d99d1c33f9fc3444f8101754abc46c52416550d190565b466001148061158b5750466005145b156115a95750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760448201527f6f726b00000000000000000000000000000000000000000000000000000000006064820152608401610abb565b61161f611c7a565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036116b55760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b03821660008181526015602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101611205565b611733611c7a565b81600854141580611746575080600b5414155b6117b85760405162461bcd60e51b815260206004820152602260248201527f5472616e736665722054617820616c7265616479206f6e20746861742076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610abb565b6109c481836009546006546117cd919061301e565b6117d7919061301e565b6117e1919061301e565b11156118555760405162461bcd60e51b815260206004820152603060248201527f4275792054617820616e64205472616e73666572205461782063616e6e6f742060448201527f6265206d6f7265207468616e20323525000000000000000000000000000000006064820152608401610abb565b6008829055600b81905560408051838152602081018390527fe7a2cfe4bb087fff5c33eb67f83294cf34b6163457766a10a0e6e9104d8cb42491016110da565b61189d611c7a565b6001600160a01b0381166119195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610abb565b610f8381612851565b61192a611c7a565b60135481151560ff9091161515036119845760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e4c65667420616c7265616479206f6e2073746174757300000000006044820152606401610abb565b601380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fa0a31bfa6b84acdde370897a622ede8ddb9e1814c1d2d22a5805fa280bfa8a0790602001610b1f565b6119eb611c7a565b306001600160a01b03821603611a435760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610abb565b6001600160a01b038116611a815760405133904780156108fc02916000818181858888f19350505050158015611a7d573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613031565b9050611b1d6001600160a01b03831633836128bb565b505050565b6001600160a01b038316611b9d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b038216611c195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abb565b6001600160a01b038381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d7e5781811015611d715760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610abb565b611d7e8484848403611b22565b50505050565b6001600160a01b038316611e005760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b038216611e7c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610abb565b80600003611e9057611b1d8383600061293b565b601054610100900460ff16158015611ec057506001600160a01b03821660009081526014602052604090205460ff165b15611f3757601080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055601154611efe904361301e565b60128190556040519081527f34d885bdf06596d4aef8d4a385c7ec2afb42ad1053f9cf9b7ce938e02e76ef629060200160405180910390a15b30600090815260208190526040902054600f5481108015908190611f765750600e5474010000000000000000000000000000000000000000900460ff16155b8015611f9b57506001600160a01b03851660009081526014602052604090205460ff16155b8015611fa9575060105460ff165b15611fb657611fb66123e7565b6001600160a01b03851660009081526015602052604090205460019060ff1680611ff857506001600160a01b03851660009081526015602052604090205460ff165b8061201d5750600e5474010000000000000000000000000000000000000000900460ff165b15612026575060005b80156123d4576001600160a01b03861660009081526014602052604090205460ff16158015612057575060135460ff165b1561211e577f0000000000000000000000000000000000000000000000000de0b6b3a764000084116120f15760405162461bcd60e51b815260206004820152603960248201527f50657065466c6f6b694574683a20616d6f756e74206d7573742062652067726560448201527f61746572207468616e20746f6b656e4c656674416d6f756e74000000000000006064820152608401610abb565b61211b7f0000000000000000000000000000000000000000000000000de0b6b3a76400008561304a565b93505b6001600160a01b0386166000908152601460205260408120548190819060ff16156122525760125443116121a8577f00000000000000000000000000000000000000000000000000000000000027106121977f00000000000000000000000000000000000000000000000000000000000009c48961305d565b6121a19190613074565b9250612399565b7f0000000000000000000000000000000000000000000000000000000000002710600654886121d7919061305d565b6121e19190613074565b915081600c60008282546121f5919061301e565b90915550506009547f000000000000000000000000000000000000000000000000000000000000271090612229908961305d565b6122339190613074565b905080600d6000828254612247919061301e565b909155506123999050565b6001600160a01b03881660009081526014602052604090205460ff16156122f4577f0000000000000000000000000000000000000000000000000000000000002710600754886122a2919061305d565b6122ac9190613074565b915081600c60008282546122c0919061301e565b9091555050600a547f000000000000000000000000000000000000000000000000000000000000271090612229908961305d565b7f000000000000000000000000000000000000000000000000000000000000271060085488612323919061305d565b61232d9190613074565b915081600c6000828254612341919061301e565b9091555050600b547f000000000000000000000000000000000000000000000000000000000000271090612375908961305d565b61237f9190613074565b905080600d6000828254612393919061301e565b90915550505b6000816123a6848661301e565b6123b0919061301e565b905080156123cf576123c2818961304a565b97506123cf8a308361293b565b505050505b6123df86868661293b565b505050505050565b600e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061245b5761245b6130af565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fd91906130de565b81600181518110612510576125106130af565b6001600160a01b03929092166020928302919091018201526040805160038082526080820190925260009290919082016060803683370190505090503081600081518110612560576125606130af565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260291906130de565b81600181518110612615576126156130af565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000cf0c122c6b73ff809c693db761e7baebe62b6a2e81600281518110612669576126696130af565b6001600160a01b0390921660209283029190910182015230600090815290819052604081205490506000600d54600c546126a3919061301e565b9050600081600d54846126b6919061305d565b6126c09190613074565b905060006126ce828561304a565b600e546040517f791ac9470000000000000000000000000000000000000000000000000000000081529192506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263791ac947926127439286926000928d92169042906004016130fb565b600060405180830381600087803b15801561275d57600080fd5b505af1158015612771573d6000803e3d6000fd5b50506040517f5c11d7950000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169250635c11d79591506127e59085906000908a9061dead9042906004016130fb565b600060405180830381600087803b1580156127ff57600080fd5b505af1158015612813573d6000803e3d6000fd5b50506000600c819055600d555050600e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055505050505050565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611b1d908490612b28565b6001600160a01b0383166129b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b038216612a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b03831660009081526020819052604090205481811015612ac25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610abb565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611d7e565b6000612b7d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c0d9092919063ffffffff16565b805190915015611b1d5780806020019051810190612b9b919061316c565b611b1d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610abb565b6060612c1c8484600085612c24565b949350505050565b606082471015612c9c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610abb565b600080866001600160a01b03168587604051612cb89190613189565b60006040518083038185875af1925050503d8060008114612cf5576040519150601f19603f3d011682016040523d82523d6000602084013e612cfa565b606091505b5091509150612d0b87838387612d16565b979650505050505050565b60608315612d85578251600003612d7e576001600160a01b0385163b612d7e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610abb565b5081612c1c565b612c1c8383815115612d9a5781518083602001fd5b8060405162461bcd60e51b8152600401610abb9190612dd8565b60005b83811015612dcf578181015183820152602001612db7565b50506000910152565b6020815260008251806020840152612df7816040850160208701612db4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114610f8357600080fd5b60008060408385031215612e5157600080fd5b8235612e5c81612e29565b946020939093013593505050565b8015158114610f8357600080fd5b600060208284031215612e8a57600080fd5b8135612e9581612e6a565b9392505050565b600080600060608486031215612eb157600080fd5b8335612ebc81612e29565b92506020840135612ecc81612e29565b929592945050506040919091013590565b600060208284031215612eef57600080fd5b5035919050565b600060208284031215612f0857600080fd5b8135612e9581612e29565b60008060408385031215612f2657600080fd5b50508035926020909101359150565b60008060408385031215612f4857600080fd5b8235612f5381612e29565b91506020830135612f6381612e6a565b809150509250929050565b60008060408385031215612f8157600080fd5b8235612f8c81612e29565b91506020830135612f6381612e29565b600181811c90821680612fb057607f821691505b602082108103612fe9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a5757610a57612fef565b60006020828403121561304357600080fd5b5051919050565b81810381811115610a5757610a57612fef565b8082028115828204841417610a5757610a57612fef565b6000826130aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156130f057600080fd5b8151612e9581612e29565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561314b5784516001600160a01b031683529383019391830191600101613126565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020828403121561317e57600080fd5b8151612e9581612e6a565b6000825161319b818460208701612db4565b919091019291505056fea264697066735822122066326c42436b1260a8e5aca19e9427577de168bab8d4253e62316f241085520564736f6c63430008130033

Deployed Bytecode Sourcemap

25447:14578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19075:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20073:226;;;;;;;;;;-1:-1:-1;20073:226:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;20073:226:0;1208:187:1;26123:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1590:55:1;;;1572:74;;1560:2;1545:18;26123:51:0;1400:252:1;19396:108:0;;;;;;;;;;-1:-1:-1;19484:12:0;;19396:108;;;1803:25:1;;;1791:2;1776:18;19396:108:0;1657:177:1;26379:40:0;;;;;;;;;;;;;;;26228:28;;;;;;;;;;-1:-1:-1;26228:28:0;;;;;;;;;;;33349:224;;;;;;;;;;-1:-1:-1;33349:224:0;;;;;:::i;:::-;;:::i;20307:295::-;;;;;;;;;;-1:-1:-1;20307:295:0;;;;;:::i;:::-;;:::i;26342:30::-;;;;;;;;;;-1:-1:-1;26342:30:0;;;;;;;;19295:93;;;;;;;;;;-1:-1:-1;19295:93:0;;19378:2;2811:36:1;;2799:2;2784:18;19295:93:0;2669:184:1;20610:263:0;;;;;;;;;;-1:-1:-1;20610:263:0;;;;;:::i;:::-;;:::i;25566:31::-;;;;;;;;;;;;;;;;26181:38;;;;;;;;;;;;;;;33581:497;;;;;;;;;;-1:-1:-1;33581:497:0;;;;;:::i;:::-;;:::i;35244:128::-;;;;;;;;;;-1:-1:-1;35244:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;35336:28:0;35312:4;35336:28;;;:19;:28;;;;;;;;;35244:128;25683:29;;;;;;;;;;;;;;;;26085;;;;;;;;;;-1:-1:-1;26085:29:0;;;;;;;;32382:580;;;;;;;;;;-1:-1:-1;32382:580:0;;;;;:::i;:::-;;:::i;26303:30::-;;;;;;;;;;;;;;;;39817:205;;;;;;;;;;;;;:::i;19512:143::-;;;;;;;;;;-1:-1:-1;19512:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19629:18:0;19602:7;19629:18;;;;;;;;;;;;19512:143;24892:103;;;;;;;;;;;;;:::i;25850:35::-;;;;;;;;;;;;;;;;25529:30;;;;;;;;;;;;;;;;25934;;;;;;;;;;-1:-1:-1;25934:30:0;;;;-1:-1:-1;;;;;25934:30:0;;;34711:154;;;;;;;;;;-1:-1:-1;34711:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;34824:33:0;34800:4;34824:33;;;:27;:33;;;;;;;;;34711:154;25604:35;;;;;;;;;;;;;;;;24657:87;;;;;;;;;;-1:-1:-1;24730:6:0;;-1:-1:-1;;;;;24730:6:0;24657:87;;30153:701;;;;;;;;;;-1:-1:-1;30153:701:0;;;;;:::i;:::-;;:::i;19183:104::-;;;;;;;;;;;;;:::i;25805:36::-;;;;;;;;;;;;;;;34323:380;;;;;;;;;;-1:-1:-1;34323:380:0;;;;;:::i;:::-;;:::i;20881:498::-;;;;;;;;;;-1:-1:-1;20881:498:0;;;;;:::i;:::-;;:::i;25648:28::-;;;;;;;;;;;;;;;;19663:218;;;;;;;;;;-1:-1:-1;19663:218:0;;;;;:::i;:::-;;:::i;25971:37::-;;;;;;;;;;;;;;;32970:371;;;;;;;;;;-1:-1:-1;32970:371:0;;;;;:::i;:::-;;:::i;26263:33::-;;;;;;;;;;;;;;;;25892;;;;;;;;;;;;;;;;30862:716;;;;;;;;;;-1:-1:-1;30862:716:0;;;;;:::i;:::-;;:::i;29077:490::-;;;;;;;;;;;;;:::i;34873:363::-;;;;;;;;;;-1:-1:-1;34873:363:0;;;;;:::i;:::-;;:::i;19889:176::-;;;;;;;;;;-1:-1:-1;19889:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;20030:18:0;;;20003:7;20030:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19889:176;26045:33;;;;;;;;;;;;;;;;31586:788;;;;;;;;;;-1:-1:-1;31586:788:0;;;;;:::i;:::-;;:::i;25761:35::-;;;;;;;;;;;;;;;25003:238;;;;;;;;;;-1:-1:-1;25003:238:0;;;;;:::i;:::-;;:::i;25719:33::-;;;;;;;;;;;;;;;;34086:229;;;;;;;;;;-1:-1:-1;34086:229:0;;;;;:::i;:::-;;:::i;29698:447::-;;;;;;;;;;-1:-1:-1;29698:447:0;;;;;:::i;:::-;;:::i;19075:100::-;19129:13;19162:5;19155:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19075:100;:::o;20073:226::-;20181:4;18535:10;20237:32;18535:10;20253:7;20262:6;20237:8;:32::i;:::-;20287:4;20280:11;;;20073:226;;;;;:::o;33349:224::-;24616:13;:11;:13::i;:::-;33424:17:::1;::::0;:27;::::1;;:17;::::0;;::::1;:27;;::::0;33416:66:::1;;;::::0;-1:-1:-1;;;33416:66:0;;5203:2:1;33416:66:0::1;::::0;::::1;5185:21:1::0;5242:2;5222:18;;;5215:30;5281:28;5261:18;;;5254:56;5327:18;;33416:66:0::1;;;;;;;;;33495:17;:26:::0;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;33537:28:::1;::::0;1348:41:1;;;33537:28:0::1;::::0;1336:2:1;1321:18;33537:28:0::1;;;;;;;;33349:224:::0;:::o;20307:295::-;20438:4;18535:10;20496:38;20512:4;18535:10;20527:6;20496:15;:38::i;:::-;20545:27;20555:4;20561:2;20565:6;20545:9;:27::i;:::-;-1:-1:-1;20590:4:0;;20307:295;-1:-1:-1;;;;20307:295:0:o;20610:263::-;18535:10;20723:4;20030:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;20030:27:0;;;;;;;;;;20723:4;;18535:10;20779:64;;18535:10;;20030:27;;20804:38;;20832:10;;20804:38;:::i;:::-;20779:8;:64::i;33581:497::-;24616:13;:11;:13::i;:::-;33681:16:::1;::::0;::::1;::::0;::::1;;;33680:17;33658:123;;;::::0;-1:-1:-1;;;33658:123:0;;5877:2:1;33658:123:0::1;::::0;::::1;5859:21:1::0;5916:2;5896:18;;;5889:30;5955:34;5935:18;;;5928:62;6026:26;6006:18;;;5999:54;6070:19;;33658:123:0::1;5675:420:1::0;33658:123:0::1;33836:6;33814:18;;:28:::0;33792:119:::1;;;::::0;-1:-1:-1;;;33792:119:0;;6302:2:1;33792:119:0::1;::::0;::::1;6284:21:1::0;6341:2;6321:18;;;6314:30;6380:34;6360:18;;;6353:62;6451:11;6431:18;;;6424:39;6480:19;;33792:119:0::1;6100:405:1::0;33792:119:0::1;33940:1;33930:6;:11;;33922:58;;;::::0;-1:-1:-1;;;33922:58:0;;6712:2:1;33922:58:0::1;::::0;::::1;6694:21:1::0;6751:2;6731:18;;;6724:30;6790:34;6770:18;;;6763:62;6861:4;6841:18;;;6834:32;6883:19;;33922:58:0::1;6510:398:1::0;33922:58:0::1;33993:18;:27:::0;;;34038:32:::1;::::0;1803:25:1;;;34038:32:0::1;::::0;1791:2:1;1776:18;34038:32:0::1;1657:177:1::0;32382:580:0;24616:13;:11;:13::i;:::-;32508:15:::1;::::0;-1:-1:-1;;;;;32508:15:0;;::::1;32488:35:::0;;::::1;::::0;32466:125:::1;;;::::0;-1:-1:-1;;;32466:125:0;;7115:2:1;32466:125:0::1;::::0;::::1;7097:21:1::0;7154:2;7134:18;;;7127:30;7193:34;7173:18;;;7166:62;7264:10;7244:18;;;7237:38;7292:19;;32466:125:0::1;6913:404:1::0;32466:125:0::1;-1:-1:-1::0;;;;;32624:30:0;::::1;32602:123;;;::::0;-1:-1:-1;;;32602:123:0;;7524:2:1;32602:123:0::1;::::0;::::1;7506:21:1::0;7563:2;7543:18;;;7536:30;7602:34;7582:18;;;7575:62;7673:13;7653:18;;;7646:41;7704:19;;32602:123:0::1;7322:407:1::0;32602:123:0::1;-1:-1:-1::0;;;;;29659:19:0;;;:23;32736:116:::1;;;::::0;-1:-1:-1;;;32736:116:0;;7936:2:1;32736:116:0::1;::::0;::::1;7918:21:1::0;7975:2;7955:18;;;7948:30;8014:34;7994:18;;;7987:62;8085:7;8065:18;;;8058:35;8110:19;;32736:116:0::1;7734:401:1::0;32736:116:0::1;32865:15;:34:::0;;;::::1;-1:-1:-1::0;;;;;32865:34:0;::::1;::::0;;::::1;::::0;;;32915:39:::1;::::0;::::1;::::0;-1:-1:-1;;32915:39:0::1;32382:580:::0;:::o;39817:205::-;39912:4;39863:28;19629:18;;;;;;;;;;;39939:24;39931:60;;;;-1:-1:-1;;;39931:60:0;;8342:2:1;39931:60:0;;;8324:21:1;8381:2;8361:18;;;8354:30;8420:25;8400:18;;;8393:53;8463:18;;39931:60:0;8140:347:1;39931:60:0;40004:10;:8;:10::i;:::-;39852:170;39817:205::o;24892:103::-;24616:13;:11;:13::i;:::-;24957:30:::1;24984:1;24957:18;:30::i;:::-;24892:103::o:0;30153:701::-;24616:13;:11;:13::i;:::-;30318:16:::1;30299:15;;:35;;:87;;;;30372:14;30355:13;;:31;;30299:87;30277:166;;;::::0;-1:-1:-1;;;30277:166:0;;8694:2:1;30277:166:0::1;::::0;::::1;8676:21:1::0;8733:2;8713:18;;;8706:30;8772:31;8752:18;;;8745:59;8821:18;;30277:166:0::1;8492:353:1::0;30277:166:0::1;30617:5;30582:14;;30546:16;;30512:14;30476:16;:50;;;;:::i;:::-;:86;;;;:::i;:::-;:120;;;;:::i;:::-;:146;;30454:240;;;::::0;-1:-1:-1;;;30454:240:0;;9052:2:1;30454:240:0::1;::::0;::::1;9034:21:1::0;9091:2;9071:18;;;9064:30;9130:34;9110:18;;;9103:62;9201:14;9181:18;;;9174:42;9233:19;;30454:240:0::1;8850:408:1::0;30454:240:0::1;30707:15;:34:::0;;;30752:13:::1;:30:::0;;;30800:46:::1;::::0;;9437:25:1;;;9493:2;9478:18;;9471:34;;;30800:46:0::1;::::0;9410:18:1;30800:46:0::1;;;;;;;;30153:701:::0;;:::o;19183:104::-;19239:13;19272:7;19265:14;;;;;:::i;34323:380::-;24616:13;:11;:13::i;:::-;-1:-1:-1;;;;;34464:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;:43;::::1;;:33;::::0;;::::1;:43;;::::0;34442:138:::1;;;::::0;-1:-1:-1;;;34442:138:0;;9718:2:1;34442:138:0::1;::::0;::::1;9700:21:1::0;9757:2;9737:18;;;9730:30;9796:34;9776:18;;;9769:62;9867:15;9847:18;;;9840:43;9900:19;;34442:138:0::1;9516:409:1::0;34442:138:0::1;-1:-1:-1::0;;;;;34591:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;;;;:42;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;34651:44;;1348:41:1;;;34651:44:0::1;::::0;1321:18:1;34651:44:0::1;;;;;;;;34323:380:::0;;:::o;20881:498::-;18535:10;20999:4;20030:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;20030:27:0;;;;;;;;;;20999:4;;18535:10;21160:15;21140:16;:35;;21118:122;;;;-1:-1:-1;;;21118:122:0;;10132:2:1;21118:122:0;;;10114:21:1;10171:2;10151:18;;;10144:30;10210:34;10190:18;;;10183:62;10281:7;10261:18;;;10254:35;10306:19;;21118:122:0;9930:401:1;21118:122:0;21276:60;21285:5;21292:7;21320:15;21301:16;:34;21276:8;:60::i;19663:218::-;19767:4;18535:10;19823:28;18535:10;19840:2;19844:6;19823:9;:28::i;32970:371::-;24616:13;:11;:13::i;:::-;33091:6:::1;33069:18;;:28:::0;33047:119:::1;;;::::0;-1:-1:-1;;;33047:119:0;;10538:2:1;33047:119:0::1;::::0;::::1;10520:21:1::0;10577:2;10557:18;;;10550:30;10616:34;10596:18;;;10589:62;10687:11;10667:18;;;10660:39;10716:19;;33047:119:0::1;10336:405:1::0;33047:119:0::1;33195:1;33185:6;:11;;33177:66;;;::::0;-1:-1:-1;;;33177:66:0;;10948:2:1;33177:66:0::1;::::0;::::1;10930:21:1::0;10987:2;10967:18;;;10960:30;11026:34;11006:18;;;10999:62;11097:12;11077:18;;;11070:40;11127:19;;33177:66:0::1;10746:406:1::0;33177:66:0::1;33256:18;:27:::0;;;33301:32:::1;::::0;1803:25:1;;;33301:32:0::1;::::0;1791:2:1;1776:18;33301:32:0::1;1657:177:1::0;30862:716:0;24616:13;:11;:13::i;:::-;31031:17:::1;31011:16;;:37;;:91;;;;31087:15;31069:14;;:33;;31011:91;30989:171;;;::::0;-1:-1:-1;;;30989:171:0;;11359:2:1;30989:171:0::1;::::0;::::1;11341:21:1::0;11398:2;11378:18;;;11371:30;11437:32;11417:18;;;11410:60;11487:18;;30989:171:0::1;11157:354:1::0;30989:171:0::1;31334:5;31298:15;31261:17;31228:13;;31193:15;;:48;;;;:::i;:::-;:85;;;;:::i;:::-;:120;;;;:::i;:::-;:146;;31171:240;;;::::0;-1:-1:-1;;;31171:240:0;;9052:2:1;31171:240:0::1;::::0;::::1;9034:21:1::0;9091:2;9071:18;;;9064:30;9130:34;9110:18;;;9103:62;9201:14;9181:18;;;9174:42;9233:19;;31171:240:0::1;8850:408:1::0;31171:240:0::1;31424:16;:36:::0;;;31471:14:::1;:32:::0;;;31521:49:::1;::::0;;9437:25:1;;;9493:2;9478:18;;9471:34;;;31521:49:0::1;::::0;9410:18:1;31521:49:0::1;9263:248:1::0;29077:490:0;29126:7;29150:13;29167:2;29150:19;29146:414;;-1:-1:-1;29193:42:0;;29077:490::o;29146:414::-;29257:13;29274:2;29257:19;29253:307;;-1:-1:-1;29300:42:0;;29077:490::o;29253:307::-;29364:13;29381:1;29364:18;:40;;;;29386:13;29403:1;29386:18;29364:40;29360:200;;;-1:-1:-1;29428:42:0;;29077:490::o;29360:200::-;29503:45;;-1:-1:-1;;;29503:45:0;;11718:2:1;29503:45:0;;;11700:21:1;11757:2;11737:18;;;11730:30;11796:34;11776:18;;;11769:62;11867:5;11847:18;;;11840:33;11890:19;;29503:45:0;11516:399:1;34873:363:0;24616:13;:11;:13::i;:::-;-1:-1:-1;;;;;35010:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;34988:132:::1;;;::::0;-1:-1:-1;;;34988:132:0;;12122:2:1;34988:132:0::1;::::0;::::1;12104:21:1::0;12161:2;12141:18;;;12134:30;12200:34;12180:18;;;12173:62;12271:12;12251:18;;;12244:40;12301:19;;34988:132:0::1;11920:406:1::0;34988:132:0::1;-1:-1:-1::0;;;;;35131:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;35188:40;;1348:41:1;;;35188:40:0::1;::::0;1321:18:1;35188:40:0::1;1208:187:1::0;31586:788:0;24616:13;:11;:13::i;:::-;31771:21:::1;31747:20;;:45;;:107;;;;31835:19;31813:18;;:41;;31747:107;31725:191;;;::::0;-1:-1:-1;;;31725:191:0;;12533:2:1;31725:191:0::1;::::0;::::1;12515:21:1::0;12572:2;12552:18;;;12545:30;12611:34;12591:18;;;12584:62;12682:4;12662:18;;;12655:32;12704:19;;31725:191:0::1;12331:398:1::0;31725:191:0::1;32098:5;32058:19;32017:21;31984:13;;31949:15;;:48;;;;:::i;:::-;:89;;;;:::i;:::-;:128;;;;:::i;:::-;:154;;31927:252;;;::::0;-1:-1:-1;;;31927:252:0;;12936:2:1;31927:252:0::1;::::0;::::1;12918:21:1::0;12975:2;12955:18;;;12948:30;13014:34;12994:18;;;12987:62;13085:18;13065;;;13058:46;13121:19;;31927:252:0::1;12734:412:1::0;31927:252:0::1;32192:20;:44:::0;;;32247:18:::1;:40:::0;;;32305:61:::1;::::0;;9437:25:1;;;9493:2;9478:18;;9471:34;;;32305:61:0::1;::::0;9410:18:1;32305:61:0::1;9263:248:1::0;25003:238:0;24616:13;:11;:13::i;:::-;-1:-1:-1;;;;;25106:22:0;::::1;25084:110;;;::::0;-1:-1:-1;;;25084:110:0;;13353:2:1;25084:110:0::1;::::0;::::1;13335:21:1::0;13392:2;13372:18;;;13365:30;13431:34;13411:18;;;13404:62;13502:8;13482:18;;;13475:36;13528:19;;25084:110:0::1;13151:402:1::0;25084:110:0::1;25205:28;25224:8;25205:18;:28::i;34086:229::-:0;24616:13;:11;:13::i;:::-;34162:18:::1;::::0;:28;::::1;;:18;::::0;;::::1;:28;;::::0;34154:68:::1;;;::::0;-1:-1:-1;;;34154:68:0;;13760:2:1;34154:68:0::1;::::0;::::1;13742:21:1::0;13799:2;13779:18;;;13772:30;13838:29;13818:18;;;13811:57;13885:18;;34154:68:0::1;13558:351:1::0;34154:68:0::1;34235:18;:27:::0;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;34278:29:::1;::::0;1348:41:1;;;34278:29:0::1;::::0;1336:2:1;1321:18;34278:29:0::1;1208:187:1::0;29698:447:0;24616:13;:11;:13::i;:::-;29794:4:::1;-1:-1:-1::0;;;;;29777:22:0;::::1;::::0;29769:67:::1;;;::::0;-1:-1:-1;;;29769:67:0;;14116:2:1;29769:67:0::1;::::0;::::1;14098:21:1::0;;;14135:18;;;14128:30;14194:34;14174:18;;;14167:62;14246:18;;29769:67:0::1;13914:356:1::0;29769:67:0::1;-1:-1:-1::0;;;;;29853:21:0;::::1;29849:126;;29891:51;::::0;29899:10:::1;::::0;29920:21:::1;29891:51:::0;::::1;;;::::0;::::1;::::0;;;29920:21;29899:10;29891:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;39852:170:::0;39817:205::o;29849:126::-:1;30047:35;::::0;;;;30076:4:::1;30047:35;::::0;::::1;1572:74:1::0;30012:5:0;;29985:17:::1;::::0;-1:-1:-1;;;;;30047:20:0;::::1;::::0;::::1;::::0;1545:18:1;;30047:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30029:53:::0;-1:-1:-1;30093:44:0::1;-1:-1:-1::0;;;;;30093:23:0;::::1;30117:10;30029:53:::0;30093:23:::1;:44::i;:::-;29758:387;;29698:447:::0;:::o;23157:380::-;-1:-1:-1;;;;;23293:19:0;;23285:68;;;;-1:-1:-1;;;23285:68:0;;14666:2:1;23285:68:0;;;14648:21:1;14705:2;14685:18;;;14678:30;14744:34;14724:18;;;14717:62;14815:6;14795:18;;;14788:34;14839:19;;23285:68:0;14464:400:1;23285:68:0;-1:-1:-1;;;;;23372:21:0;;23364:68;;;;-1:-1:-1;;;23364:68:0;;15071:2:1;23364:68:0;;;15053:21:1;15110:2;15090:18;;;15083:30;15149:34;15129:18;;;15122:62;15220:4;15200:18;;;15193:32;15242:19;;23364:68:0;14869:398:1;23364:68:0;-1:-1:-1;;;;;23445:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23497:32;;1803:25:1;;;23497:32:0;;1776:18:1;23497:32:0;;;;;;;23157:380;;;:::o;24752:132::-;24730:6;;-1:-1:-1;;;;;24730:6:0;18535:10;24816:23;24808:68;;;;-1:-1:-1;;;24808:68:0;;15474:2:1;24808:68:0;;;15456:21:1;;;15493:18;;;15486:30;15552:34;15532:18;;;15525:62;15604:18;;24808:68:0;15272:356:1;23545:502:0;-1:-1:-1;;;;;20030:18:0;;;23680:24;20030:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;23767:17;23747:37;;23743:297;;23847:6;23827:16;:26;;23801:117;;;;-1:-1:-1;;;23801:117:0;;15835:2:1;23801:117:0;;;15817:21:1;15874:2;15854:18;;;15847:30;15913:31;15893:18;;;15886:59;15962:18;;23801:117:0;15633:353:1;23801:117:0;23962:51;23971:5;23978:7;24006:6;23987:16;:25;23962:8;:51::i;:::-;23669:378;23545:502;;;:::o;35380:3182::-;-1:-1:-1;;;;;35512:18:0;;35504:68;;;;-1:-1:-1;;;35504:68:0;;16193:2:1;35504:68:0;;;16175:21:1;16232:2;16212:18;;;16205:30;16271:34;16251:18;;;16244:62;16342:7;16322:18;;;16315:35;16367:19;;35504:68:0;15991:401:1;35504:68:0;-1:-1:-1;;;;;35591:16:0;;35583:64;;;;-1:-1:-1;;;35583:64:0;;16599:2:1;35583:64:0;;;16581:21:1;16638:2;16618:18;;;16611:30;16677:34;16657:18;;;16650:62;16748:5;16728:18;;;16721:33;16771:19;;35583:64:0;16397:399:1;35583:64:0;35664:6;35674:1;35664:11;35660:93;;35692:28;35708:4;35714:2;35718:1;35692:15;:28::i;35660:93::-;35770:16;;;;;;;35769:17;:52;;;;-1:-1:-1;;;;;;35790:31:0;;;;;;:27;:31;;;;;;;;35769:52;35765:232;;;35838:16;:23;;;;;;;;35909:18;;35894:33;;:12;:33;:::i;:::-;35876:15;:51;;;35947:38;;1803:25:1;;;35947:38:0;;1791:2:1;1776:18;35947:38:0;;;;;;;35765:232;36058:4;36009:28;19629:18;;;;;;;;;;;36116;;36092:42;;;;;;;36165:33;;-1:-1:-1;36190:8:0;;;;;;;36189:9;36165:33;:84;;;;-1:-1:-1;;;;;;36216:33:0;;;;;;:27;:33;;;;;;;;36215:34;36165:84;:118;;;;-1:-1:-1;36266:17:0;;;;36165:118;36147:185;;;36310:10;:8;:10::i;:::-;-1:-1:-1;;;;;36380:25:0;;36344:12;36380:25;;;:19;:25;;;;;;36359:4;;36380:25;;;:52;;-1:-1:-1;;;;;;36409:23:0;;;;;;:19;:23;;;;;;;;36380:52;:64;;;-1:-1:-1;36436:8:0;;;;;;;36380:64;36376:112;;;-1:-1:-1;36471:5:0;36376:112;36504:7;36500:2009;;;-1:-1:-1;;;;;36533:33:0;;;;;;:27;:33;;;;;;;;36532:34;:56;;;;-1:-1:-1;36570:18:0;;;;36532:56;36528:296;;;36648:15;36639:6;:24;36609:155;;;;-1:-1:-1;;;36609:155:0;;17003:2:1;36609:155:0;;;16985:21:1;17042:2;17022:18;;;17015:30;17081:34;17061:18;;;17054:62;17152:27;17132:18;;;17125:55;17197:19;;36609:155:0;16801:421:1;36609:155:0;36783:25;36793:15;36783:25;;:::i;:::-;;;36528:296;-1:-1:-1;;;;;36968:33:0;;36840:25;36968:33;;;:27;:33;;;;;;36840:25;;;;36968:33;;36964:1269;;;37042:15;;37026:12;:31;37022:505;;37126:11;37103:19;37112:10;37103:6;:19;:::i;:::-;37102:35;;;;:::i;:::-;37082:55;;36964:1269;;37022:505;37287:11;37243:15;;37234:6;:24;;;;:::i;:::-;37233:65;;;;:::i;:::-;37186:112;;37345:19;37321:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;37417:13:0;;37434:11;;37408:22;;:6;:22;:::i;:::-;37407:38;;;;:::i;:::-;37387:58;;37490:17;37468:18;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;36964:1269:0;;-1:-1:-1;36964:1269:0;;-1:-1:-1;;;;;37552:31:0;;;;;;:27;:31;;;;;;;;37548:685;;;37656:11;37636:16;;37627:6;:25;;;;:::i;:::-;37626:41;;;;:::i;:::-;37604:63;;37710:19;37686:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;37778:14:0;;37796:11;;37769:23;;:6;:23;:::i;37548:685::-;38004:11;37959:20;;37950:6;:29;;;;:::i;:::-;37949:66;;;;:::i;:::-;37906:109;;38058:19;38034:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;38126:18:0;;38148:11;;38117:27;;:6;:27;:::i;:::-;38116:43;;;;:::i;:::-;38096:63;;38200:17;38178:18;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;37548:685:0;38249:12;38340:17;38264:56;38301:19;38264:17;:56;:::i;:::-;:93;;;;:::i;:::-;38249:108;-1:-1:-1;38378:8:0;;38374:124;;38407:14;38417:4;38407:14;;:::i;:::-;;;38440:42;38456:4;38470;38477;38440:15;:42::i;:::-;36513:1996;;;;36500:2009;38521:33;38537:4;38543:2;38547:6;38521:15;:33::i;:::-;35493:3069;;;35380:3182;;;:::o;38570:1239::-;26585:8;:15;;;;;;;;38649:16:::1;::::0;;38663:1:::1;38649:16:::0;;;;;::::1;::::0;;-1:-1:-1;;38649:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;38649:16:0::1;38617:48;;38702:4;38676:12;38689:1;38676:15;;;;;;;;:::i;:::-;;;;;;:31;-1:-1:-1::0;;;;;38676:31:0::1;;;-1:-1:-1::0;;;;;38676:31:0::1;;;::::0;::::1;38736:15;-1:-1:-1::0;;;;;38736:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38718:12;38731:1;38718:15;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38718:40:0;;;::::1;:15;::::0;;::::1;::::0;;;;;;:40;38802:16:::1;::::0;;38816:1:::1;38802:16:::0;;;;;::::1;::::0;;;38771:28:::1;::::0;38802:16;;38816:1;38802:16;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;38802:16:0::1;38771:47;;38854:4;38829:11;38841:1;38829:14;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1::0;;;;;38829:30:0::1;;;-1:-1:-1::0;;;;;38829:30:0::1;;;::::0;::::1;38887:15;-1:-1:-1::0;;;;;38887:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38870:11;38882:1;38870:14;;;;;;;;:::i;:::-;;;;;;:39;-1:-1:-1::0;;;;;38870:39:0::1;;;-1:-1:-1::0;;;;;38870:39:0::1;;;::::0;::::1;38945:12;38920:11;38932:1;38920:14;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38920:38:0;;::::1;:14;::::0;;::::1;::::0;;;;;;:38;39020:4:::1;38971:28;19629:18:::0;;;;;;;;;;;38971:55:::1;;39039:16;39081:18;;39058:20;;:41;;;;:::i;:::-;39039:60;;39112:21;39195:8;39160:18;;39137:20;:41;;;;:::i;:::-;39136:67;;;;:::i;:::-;39112:91:::0;-1:-1:-1;39216:22:0::1;39241:36;39112:91:::0;39241:20;:36:::1;:::i;:::-;39451:15;::::0;39290:218:::1;::::0;;;;39216:61;;-1:-1:-1;;;;;;39290:15:0::1;:66:::0;::::1;::::0;::::1;::::0;:218:::1;::::0;39216:61;;39400:1:::1;::::0;39416:12;;39451:15:::1;::::0;39482::::1;::::0;39290:218:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39521:210:0::1;::::0;;;;-1:-1:-1;;;;;39521:15:0::1;:69;::::0;-1:-1:-1;39521:69:0::1;::::0;-1:-1:-1;39521:210:0::1;::::0;39605:13;;39633:1:::1;::::0;39649:11;;39683:6:::1;::::0;39705:15:::1;::::0;39521:210:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39767:1:0::1;39744:20;:24:::0;;;39779:18:::1;:22:::0;-1:-1:-1;;26623:8:0;:16;;;;;;-1:-1:-1;;;;;;38570:1239:0:o;25249:191::-;25342:6;;;-1:-1:-1;;;;;25359:17:0;;;;;;;;;;;25392:40;;25342:6;;;25359:17;25342:6;;25392:40;;25323:16;;25392:40;25312:128;25249:191;:::o;15171:214::-;15308:58;;;-1:-1:-1;;;;;19669:55:1;;15308:58:0;;;19651:74:1;19741:18;;;;19734:34;;;15308:58:0;;;;;;;;;;19624:18:1;;;;15308:58:0;;;;;;;;;;15331:23;15308:58;;;15254:123;;15288:5;;15254:19;:123::i;21387:714::-;-1:-1:-1;;;;;21518:18:0;;21510:68;;;;-1:-1:-1;;;21510:68:0;;16193:2:1;21510:68:0;;;16175:21:1;16232:2;16212:18;;;16205:30;16271:34;16251:18;;;16244:62;16342:7;16322:18;;;16315:35;16367:19;;21510:68:0;15991:401:1;21510:68:0;-1:-1:-1;;;;;21597:16:0;;21589:64;;;;-1:-1:-1;;;21589:64:0;;16599:2:1;21589:64:0;;;16581:21:1;16638:2;16618:18;;;16611:30;16677:34;16657:18;;;16650:62;16748:5;16728:18;;;16721:33;16771:19;;21589:64:0;16397:399:1;21589:64:0;-1:-1:-1;;;;;21739:15:0;;21717:19;21739:15;;;;;;;;;;;21787:21;;;;21765:109;;;;-1:-1:-1;;;21765:109:0;;19981:2:1;21765:109:0;;;19963:21:1;20020:2;20000:18;;;19993:30;20059:34;20039:18;;;20032:62;20130:8;20110:18;;;20103:36;20156:19;;21765:109:0;19779:402:1;21765:109:0;-1:-1:-1;;;;;21910:15:0;;;:9;:15;;;;;;;;;;;21928:20;;;21910:38;;21965:13;;;;;;;;;;:23;;;;;;22017:26;;1803:25:1;;;21965:13:0;;22017:26;;1776:18:1;22017:26:0;;;;;;;22056:37;29698:447;17771:419;17852:23;17878:106;17920:4;17878:106;;;;;;;;;;;;;;;;;17886:5;-1:-1:-1;;;;;17878:27:0;;;:106;;;;;:::i;:::-;17999:17;;17852:132;;-1:-1:-1;17999:21:0;17995:188;;18074:10;18063:30;;;;;;;;;;;;:::i;:::-;18037:134;;;;-1:-1:-1;;;18037:134:0;;20638:2:1;18037:134:0;;;20620:21:1;20677:2;20657:18;;;20650:30;20716:34;20696:18;;;20689:62;20787:12;20767:18;;;20760:40;20817:19;;18037:134:0;20436:406:1;9976:229:0;10113:12;10145:52;10167:6;10175:4;10181:1;10184:12;10145:21;:52::i;:::-;10138:59;9976:229;-1:-1:-1;;;;9976:229:0:o;10577:612::-;10747:12;10819:5;10794:21;:30;;10772:118;;;;-1:-1:-1;;;10772:118:0;;21049:2:1;10772:118:0;;;21031:21:1;21088:2;21068:18;;;21061:30;21127:34;21107:18;;;21100:62;21198:8;21178:18;;;21171:36;21224:19;;10772:118:0;20847:402:1;10772:118:0;10902:12;10916:23;10943:6;-1:-1:-1;;;;;10943:11:0;10962:5;10983:4;10943:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10901:97;;;;11029:152;11074:6;11099:7;11125:10;11154:12;11029:26;:152::i;:::-;11009:172;10577:612;-1:-1:-1;;;;;;;10577:612:0:o;12693:477::-;12878:12;12907:7;12903:260;;;12935:10;:17;12956:1;12935:22;12931:123;;-1:-1:-1;;;;;29659:19:0;;;12978:60;;;;-1:-1:-1;;;12978:60:0;;21748:2:1;12978:60:0;;;21730:21:1;21787:2;21767:18;;;21760:30;21826:31;21806:18;;;21799:59;21875:18;;12978:60:0;21546:353:1;12978:60:0;-1:-1:-1;13075:10:0;13068:17;;12903:260;13118:33;13126:10;13138:12;13614:17;;:21;13610:299;;13757:10;13751:17;13814:15;13801:10;13797:2;13793:19;13786:44;13610:299;13884:12;13877:20;;-1:-1:-1;;;13877:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:455::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;640:2;628:15;645:66;624:88;609:104;;;;715:2;605:113;;269:455;-1:-1:-1;;269:455:1:o;729:154::-;-1:-1:-1;;;;;808:5:1;804:54;797:5;794:65;784:93;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1839:118::-;1925:5;1918:13;1911:21;1904:5;1901:32;1891:60;;1947:1;1944;1937:12;1962:241;2018:6;2071:2;2059:9;2050:7;2046:23;2042:32;2039:52;;;2087:1;2084;2077:12;2039:52;2126:9;2113:23;2145:28;2167:5;2145:28;:::i;:::-;2192:5;1962:241;-1:-1:-1;;;1962:241:1:o;2208:456::-;2285:6;2293;2301;2354:2;2342:9;2333:7;2329:23;2325:32;2322:52;;;2370:1;2367;2360:12;2322:52;2409:9;2396:23;2428:31;2453:5;2428:31;:::i;:::-;2478:5;-1:-1:-1;2535:2:1;2520:18;;2507:32;2548:33;2507:32;2548:33;:::i;:::-;2208:456;;2600:7;;-1:-1:-1;;;2654:2:1;2639:18;;;;2626:32;;2208:456::o;3089:180::-;3148:6;3201:2;3189:9;3180:7;3176:23;3172:32;3169:52;;;3217:1;3214;3207:12;3169:52;-1:-1:-1;3240:23:1;;3089:180;-1:-1:-1;3089:180:1:o;3274:247::-;3333:6;3386:2;3374:9;3365:7;3361:23;3357:32;3354:52;;;3402:1;3399;3392:12;3354:52;3441:9;3428:23;3460:31;3485:5;3460:31;:::i;3526:248::-;3594:6;3602;3655:2;3643:9;3634:7;3630:23;3626:32;3623:52;;;3671:1;3668;3661:12;3623:52;-1:-1:-1;;3694:23:1;;;3764:2;3749:18;;;3736:32;;-1:-1:-1;3526:248:1:o;3779:382::-;3844:6;3852;3905:2;3893:9;3884:7;3880:23;3876:32;3873:52;;;3921:1;3918;3911:12;3873:52;3960:9;3947:23;3979:31;4004:5;3979:31;:::i;:::-;4029:5;-1:-1:-1;4086:2:1;4071:18;;4058:32;4099:30;4058:32;4099:30;:::i;:::-;4148:7;4138:17;;;3779:382;;;;;:::o;4166:388::-;4234:6;4242;4295:2;4283:9;4274:7;4270:23;4266:32;4263:52;;;4311:1;4308;4301:12;4263:52;4350:9;4337:23;4369:31;4394:5;4369:31;:::i;:::-;4419:5;-1:-1:-1;4476:2:1;4461:18;;4448:32;4489:33;4448:32;4489:33;:::i;4559:437::-;4638:1;4634:12;;;;4681;;;4702:61;;4756:4;4748:6;4744:17;4734:27;;4702:61;4809:2;4801:6;4798:14;4778:18;4775:38;4772:218;;4846:77;4843:1;4836:88;4947:4;4944:1;4937:15;4975:4;4972:1;4965:15;4772:218;;4559:437;;;:::o;5356:184::-;5408:77;5405:1;5398:88;5505:4;5502:1;5495:15;5529:4;5526:1;5519:15;5545:125;5610:9;;;5631:10;;;5628:36;;;5644:18;;:::i;14275:184::-;14345:6;14398:2;14386:9;14377:7;14373:23;14369:32;14366:52;;;14414:1;14411;14404:12;14366:52;-1:-1:-1;14437:16:1;;14275:184;-1:-1:-1;14275:184:1:o;17227:128::-;17294:9;;;17315:11;;;17312:37;;;17329:18;;:::i;17360:168::-;17433:9;;;17464;;17481:15;;;17475:22;;17461:37;17451:71;;17502:18;;:::i;17533:274::-;17573:1;17599;17589:189;;17634:77;17631:1;17624:88;17735:4;17732:1;17725:15;17763:4;17760:1;17753:15;17589:189;-1:-1:-1;17792:9:1;;17533:274::o;18001:184::-;18053:77;18050:1;18043:88;18150:4;18147:1;18140:15;18174:4;18171:1;18164:15;18190:251;18260:6;18313:2;18301:9;18292:7;18288:23;18284:32;18281:52;;;18329:1;18326;18319:12;18281:52;18361:9;18355:16;18380:31;18405:5;18380:31;:::i;18446:1026::-;18708:4;18756:3;18745:9;18741:19;18787:6;18776:9;18769:25;18813:2;18851:6;18846:2;18835:9;18831:18;18824:34;18894:3;18889:2;18878:9;18874:18;18867:31;18918:6;18953;18947:13;18984:6;18976;18969:22;19022:3;19011:9;19007:19;19000:26;;19061:2;19053:6;19049:15;19035:29;;19082:1;19092:218;19106:6;19103:1;19100:13;19092:218;;;19171:13;;-1:-1:-1;;;;;19167:62:1;19155:75;;19285:15;;;;19250:12;;;;19128:1;19121:9;19092:218;;;-1:-1:-1;;;;;;;19366:55:1;;;;19361:2;19346:18;;19339:83;-1:-1:-1;;;19453:3:1;19438:19;19431:35;19327:3;18446:1026;-1:-1:-1;;;18446:1026:1:o;20186:245::-;20253:6;20306:2;20294:9;20285:7;20281:23;20277:32;20274:52;;;20322:1;20319;20312:12;20274:52;20354:9;20348:16;20373:28;20395:5;20373:28;:::i;21254:287::-;21383:3;21421:6;21415:13;21437:66;21496:6;21491:3;21484:4;21476:6;21472:17;21437:66;:::i;:::-;21519:16;;;;;21254:287;-1:-1:-1;;21254:287:1:o

Swarm Source

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