ETH Price: $3,901.38 (+0.45%)

Token

orion.stargazeprotocol.com (STGO)
 

Overview

Max Total Supply

16,573,618.55160779 STGO

Holders

289

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.095871755 STGO

Value
$0.00
0x581149399022fbd7c9f86f6e7aed90aa847a2974
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Stargaze offers deflationary yield farm without staking. Users can hold and earn from transactions fees from others selling, and burning tokens.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
StargazeOrionToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-15
*/

/* orion.stargazeprotocol.com
 *         _..._
 *       .'     '.      _
 *      /    .-""-\   _/ \
 *    .-|   /:.   |  |   |
 *    |  \  |:.   /.-'-./
 *    | .-'-;:__.'    =/
 *    .'=  *=|STGO _.='
 *   /   _.  |    ;
 *  ;-.-'|    \   |
 * /   | \    _\  _\
 * \__/'._;.  ==' ==\
 *          \    \   |
 *          /    /   /
 *          /-._/-._/
 *          \   `\  \
 *           `-._/._/
 */
// SPDX-License-Identifier: MIT
// File @openzeppelin/contracts/GSN/[email protected]


pragma solidity ^0.6.0;

/*
 * @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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]


pragma solidity ^0.6.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);
}


// File @openzeppelin/contracts/math/[email protected]


pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/access/[email protected]


pragma solidity ^0.6.0;

/**
 * @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.
 */
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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


// File @uniswap/v2-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


// File contracts/uniswapv2/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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


// File contracts/uniswapv2/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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


// File contracts/uniswapv2/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;

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

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


// File contracts/uniswapv2/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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


// File contracts/StargazeOrionToken.sol

pragma solidity ^0.6.0;

contract StargazeOrionToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 17 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;

    string private _name = 'orion.stargazeprotocol.com';
    string private _symbol = 'STGO';
    uint8 private _decimals = 9;
    
    uint256 private _taxFee = 250;
    uint256 private _ecosystemFee = 70;
    uint256 private _burnFee = 40;
    uint256 private _maxTxAmount = 6e14;
    address public ecosystemAddr;
    bool public tradingEnabled;

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

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromProtocol(_rOwned[account]);
    }

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function protocolFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromProtocol(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromProtocol(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(sender != owner() && recipient != owner()) {
            require(amount <= _maxTxAmount, "Anti-whale period is active, please reduce your size until period is over");
            require(tradingEnabled, "Anti-bot period is active, please wait until human trading is enabled");
        }

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _protocolFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _protocolFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _protocolFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _protocolFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _protocolFee(uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn) private {
        uint256 rEcosystem = rFee.mul(_ecosystemFee).div(_taxFee);
        uint256 tEcosystem = tFee.mul(_ecosystemFee).div(_taxFee);
        _rOwned[ecosystemAddr] = _rOwned[ecosystemAddr].add(rEcosystem);       
        _rTotal = _rTotal.sub(rFee).sub(rBurn).add(rEcosystem);
        _tFeeTotal = _tFeeTotal.add(tFee).sub(tEcosystem);
        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tTotal = _tTotal.sub(tBurn);
    }

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

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 burnFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(10000);
        uint256 tBurn = tAmount.mul(burnFee).div(10000);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn);
        return (tTransferAmount, tFee, tBurn);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 100 && taxFee <= 1000, 'taxFee should be in 1% - 10%');
        _taxFee = taxFee;
    }

    function _getBurnFee() private view returns(uint256) {
        return _burnFee;
    }

    function _setBurnFee(uint256 burnFee) external onlyOwner() {
        require(burnFee < _taxFee, 'burnFee should be less than taxFee');
        _burnFee = burnFee;
    }

    function _getEcosystemFee() private view returns(uint256) {
        return _ecosystemFee;
    }

    function _setEcosystemFee(uint256 ecosystemFee) external onlyOwner() {
        require(ecosystemFee < _taxFee, 'ecosystemFee should be less than taxFee');
        _ecosystemFee = ecosystemFee;
    }
    
    function setEcosystem(address _ecosystemAddr) public onlyOwner() {
        ecosystemAddr = _ecosystemAddr;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }
    
    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 100000e9 , 'maxTxAmount should be greater than 100000e9');
        _maxTxAmount = maxTxAmount;
    }

    function _enableTrading() external onlyOwner() {
        tradingEnabled = true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"_setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ecosystemFee","type":"uint256"}],"name":"_setEcosystemFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ecosystemAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"protocolFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ecosystemAddr","type":"address"}],"name":"setEcosystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromProtocol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

663c6568f12e8000600655662e36a0c95c7fff1960075560c0604052601a60808190527f6f72696f6e2e7374617267617a6570726f746f636f6c2e636f6d00000000000060a09081526200005791600a9190620001c7565b50604080518082019091526004808252635354474f60e01b60209092019182526200008591600b91620001c7565b50600c805460ff1916600917905560fa600d556046600e556028600f55660221b262dd8000601055348015620000ba57600080fd5b506000620000c7620001c3565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506007546001600062000122620001c3565b6001600160a01b0316815260208101919091526040016000205562000146620001c3565b601180546001600160a01b0319166001600160a01b039290921691909117905562000170620001c3565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a362000263565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200020a57805160ff19168380011785556200023a565b828001600101855582156200023a579182015b828111156200023a5782518255916020019190600101906200021d565b50620002489291506200024c565b5090565b5b808211156200024857600081556001016200024d565b61235c80620002736000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806371d3b52311610104578063a9059cbb116100a2578063e895c51411610071578063e895c51414610539578063f2cc0c181461055f578063f2fde38b14610585578063f84354f1146105ab576101da565b8063a9059cbb1461049c578063cba0e996146104c8578063d7b03c6a146104ee578063dd62ed3e1461050b576101da565b806395d89b41116100de57806395d89b411461043b5780639e20f9a314610443578063a0ac5e1914610468578063a457c2d714610470576101da565b806371d3b523146103f25780638da5cb5b1461040f57806393ed013d14610433576101da565b8063395093511161017c5780634ada218b1161014b5780634ada218b1461039f5780635880b873146103a757806370a08231146103c4578063715018a6146103ea576101da565b806339509351146103315780633b6b19611461035d5780633bd5d1731461037a5780633c9f861d14610397576101da565b806318160ddd116101b857806318160ddd146102b65780631bbae6e0146102be57806323b872dd146102dd578063313ce56714610313576101da565b806306fdde03146101df578063095ea7b31461025c57806313114a9d1461029c575b600080fd5b6101e76105d1565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610221578181015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102886004803603604081101561027257600080fd5b506001600160a01b038135169060200135610667565b604080519115158252519081900360200190f35b6102a4610685565b60408051918252519081900360200190f35b6102a461068b565b6102db600480360360208110156102d457600080fd5b5035610691565b005b610288600480360360608110156102f357600080fd5b506001600160a01b03813581169160208101359091169060400135610733565b61031b6107ba565b6040805160ff9092168252519081900360200190f35b6102886004803603604081101561034757600080fd5b506001600160a01b0381351690602001356107c3565b6102db6004803603602081101561037357600080fd5b5035610811565b6102db6004803603602081101561039057600080fd5b50356108ae565b6102a4610988565b61028861098e565b6102db600480360360208110156103bd57600080fd5b503561099e565b6102a4600480360360208110156103da57600080fd5b50356001600160a01b0316610a5f565b6102db610ac9565b6102db6004803603602081101561040857600080fd5b5035610b6b565b610417610c08565b604080516001600160a01b039092168252519081900360200190f35b610417610c17565b6101e7610c26565b6102a46004803603604081101561045957600080fd5b50803590602001351515610c87565b6102db610d19565b6102886004803603604081101561048657600080fd5b506001600160a01b038135169060200135610d86565b610288600480360360408110156104b257600080fd5b506001600160a01b038135169060200135610dee565b610288600480360360208110156104de57600080fd5b50356001600160a01b0316610e02565b6102a46004803603602081101561050457600080fd5b5035610e20565b6102a46004803603604081101561052157600080fd5b506001600160a01b0381358116916020013516610e80565b6102db6004803603602081101561054f57600080fd5b50356001600160a01b0316610eab565b6102db6004803603602081101561057557600080fd5b50356001600160a01b0316610f25565b6102db6004803603602081101561059b57600080fd5b50356001600160a01b0316611107565b6102db600480360360208110156105c157600080fd5b50356001600160a01b03166111ff565b600a8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561065d5780601f106106325761010080835404028352916020019161065d565b820191906000526020600020905b81548152906001019060200180831161064057829003601f168201915b5050505050905090565b600061067b6106746113c0565b84846113c4565b5060015b92915050565b60085490565b60065490565b6106996113c0565b6000546001600160a01b039081169116146106e9576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b655af3107a400081101561072e5760405162461bcd60e51b815260040180806020018281038252602b8152602001806120fe602b913960400191505060405180910390fd5b601055565b60006107408484846114b0565b6107b08461074c6113c0565b6107ab8560405180606001604052806028815260200161214a602891396001600160a01b038a1660009081526003602052604081209061078a6113c0565b6001600160a01b0316815260208101919091526040016000205491906117a2565b6113c4565b5060019392505050565b600c5460ff1690565b600061067b6107d06113c0565b846107ab85600360006107e16113c0565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611839565b6108196113c0565b6000546001600160a01b03908116911614610869576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b600d5481106108a95760405162461bcd60e51b81526004018080602001828103825260228152602001806122256022913960400191505060405180910390fd5b600f55565b60006108b86113c0565b6001600160a01b03811660009081526004602052604090205490915060ff16156109135760405162461bcd60e51b815260040180806020018281038252602c8152602001806122d6602c913960400191505060405180910390fd5b600061091e83611893565b505050506001600160a01b03841660009081526001602052604090205491925061094a919050826118f0565b6001600160a01b03831660009081526001602052604090205560075461097090826118f0565b6007556008546109809084611839565b600855505050565b60095490565b601154600160a01b900460ff1681565b6109a66113c0565b6000546001600160a01b039081169116146109f6576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b60648110158015610a0957506103e88111155b610a5a576040805162461bcd60e51b815260206004820152601c60248201527f7461784665652073686f756c6420626520696e203125202d2031302500000000604482015290519081900360640190fd5b600d55565b6001600160a01b03811660009081526004602052604081205460ff1615610a9f57506001600160a01b038116600090815260026020526040902054610ac4565b6001600160a01b038216600090815260016020526040902054610ac190610e20565b90505b919050565b610ad16113c0565b6000546001600160a01b03908116911614610b21576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610b736113c0565b6000546001600160a01b03908116911614610bc3576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b600d548110610c035760405162461bcd60e51b81526004018080602001828103825260278152602001806120d76027913960400191505060405180910390fd5b600e55565b6000546001600160a01b031690565b6011546001600160a01b031681565b600b8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561065d5780601f106106325761010080835404028352916020019161065d565b6000600654831115610ce0576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610cff576000610cf084611893565b5093955061067f945050505050565b6000610d0a84611893565b5092955061067f945050505050565b610d216113c0565b6000546001600160a01b03908116911614610d71576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b6011805460ff60a01b1916600160a01b179055565b600061067b610d936113c0565b846107ab856040518060600160405280602581526020016123026025913960036000610dbd6113c0565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906117a2565b600061067b610dfb6113c0565b84846114b0565b6001600160a01b031660009081526004602052604090205460ff1690565b6000600754821115610e635760405162461bcd60e51b815260040180806020018281038252602a815260200180612065602a913960400191505060405180910390fd5b6000610e6d611932565b9050610e798382611955565b9392505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610eb36113c0565b6000546001600160a01b03908116911614610f03576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610f2d6113c0565b6000546001600160a01b03908116911614610f7d576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610fd95760405162461bcd60e51b81526004018080602001828103825260228152602001806122b46022913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff1615611047576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260016020526040902054156110a1576001600160a01b03811660009081526001602052604090205461108790610e20565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b61110f6113c0565b6000546001600160a01b0390811691161461115f576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b6001600160a01b0381166111a45760405162461bcd60e51b815260040180806020018281038252602681526020018061208f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6112076113c0565b6000546001600160a01b03908116911614611257576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff166112c4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b6005548110156113bc57816001600160a01b0316600582815481106112e857fe5b6000918252602090912001546001600160a01b031614156113b45760058054600019810190811061131557fe5b600091825260209091200154600580546001600160a01b03909216918390811061133b57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061138d57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556113bc565b6001016112c7565b5050565b3390565b6001600160a01b0383166114095760405162461bcd60e51b81526004018080602001828103825260248152602001806122476024913960400191505060405180910390fd5b6001600160a01b03821661144e5760405162461bcd60e51b81526004018080602001828103825260228152602001806120b56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114f55760405162461bcd60e51b81526004018080602001828103825260258152602001806122006025913960400191505060405180910390fd5b6001600160a01b03821661153a5760405162461bcd60e51b81526004018080602001828103825260238152602001806120426023913960400191505060405180910390fd5b600081116115795760405162461bcd60e51b81526004018080602001828103825260298152602001806121926029913960400191505060405180910390fd5b611581610c08565b6001600160a01b0316836001600160a01b0316141580156115bb57506115a5610c08565b6001600160a01b0316826001600160a01b031614155b15611649576010548111156116015760405162461bcd60e51b815260040180806020018281038252604981526020018061226b6049913960600191505060405180910390fd5b601154600160a01b900460ff166116495760405162461bcd60e51b81526004018080602001828103825260458152602001806121bb6045913960600191505060405180910390fd5b6001600160a01b03831660009081526004602052604090205460ff16801561168a57506001600160a01b03821660009081526004602052604090205460ff16155b1561169f5761169a838383611997565b61179d565b6001600160a01b03831660009081526004602052604090205460ff161580156116e057506001600160a01b03821660009081526004602052604090205460ff165b156116f05761169a838383611ad7565b6001600160a01b03831660009081526004602052604090205460ff1615801561173257506001600160a01b03821660009081526004602052604090205460ff16155b156117425761169a838383611ba1565b6001600160a01b03831660009081526004602052604090205460ff16801561178257506001600160a01b03821660009081526004602052604090205460ff165b156117925761169a838383611c06565b61179d838383611ba1565b505050565b600081848411156118315760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117f65781810151838201526020016117de565b50505050905090810190601f1680156118235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610e79576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006118b08a600d54600f54611c9a565b92509250925060006118c0611932565b905060008060006118d38e878787611cf1565b919e509c509a509598509396509194505050505091939550919395565b6000610e7983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117a2565b600080600061193f611d41565b909250905061194e8282611955565b9250505090565b6000610e7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ea4565b60006119a1611932565b90506000806000806000806119b588611893565b95509550955095509550955060006119d68883611f0990919063ffffffff16565b6001600160a01b038c166000908152600260205260409020549091506119fc908a6118f0565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611a2b90886118f0565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611a5a9087611839565b6001600160a01b038b16600090815260016020526040902055611a7f85828585611f62565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000611ae1611932565b9050600080600080600080611af588611893565b9550955095509550955095506000611b168883611f0990919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611b3c90886118f0565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611b729085611839565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611a5a9087611839565b6000611bab611932565b9050600080600080600080611bbf88611893565b9550955095509550955095506000611be08883611f0990919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611a2b90886118f0565b6000611c10611932565b9050600080600080600080611c2488611893565b9550955095509550955095506000611c458883611f0990919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611c6b908a6118f0565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611b3c90886118f0565b6000808080611cb5612710611caf8989611f09565b90611955565b90506000611cc9612710611caf8a89611f09565b90506000611ce182611cdb8b866118f0565b906118f0565b9992985090965090945050505050565b6000808080611d008886611f09565b90506000611d0e8887611f09565b90506000611d1c8888611f09565b90506000611d2e82611cdb86866118f0565b939b939a50919850919650505050505050565b6007546006546000918291825b600554811015611e7257826001600060058481548110611d6a57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611dcf5750816002600060058481548110611da857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611de65760075460065494509450505050611ea0565b611e266001600060058481548110611dfa57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906118f0565b9250611e686002600060058481548110611e3c57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906118f0565b9150600101611d4e565b50600654600754611e8291611955565b821015611e9a57600754600654935093505050611ea0565b90925090505b9091565b60008183611ef35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156117f65781810151838201526020016117de565b506000838581611eff57fe5b0495945050505050565b600082611f185750600061067f565b82820282848281611f2557fe5b0414610e795760405162461bcd60e51b81526004018080602001828103825260218152602001806121296021913960400191505060405180910390fd5b6000611f7f600d54611caf600e5488611f0990919063ffffffff16565b90506000611f9e600d54611caf600e5487611f0990919063ffffffff16565b6011546001600160a01b0316600090815260016020526040902054909150611fc69083611839565b6011546001600160a01b0316600090815260016020526040902055600754612000908390611ffa908890611cdb908b6118f0565b90611839565b600755600854612016908290611cdb9087611839565b6008556009546120269084611839565b60095560065461203690846118f0565b60065550505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737365636f73797374656d4665652073686f756c64206265206c657373207468616e207461784665656d61785478416d6f756e742073686f756c642062652067726561746572207468616e203130303030306539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f416e74692d626f7420706572696f64206973206163746976652c20706c65617365207761697420756e74696c2068756d616e2074726164696e6720697320656e61626c656445524332303a207472616e736665722066726f6d20746865207a65726f20616464726573736275726e4665652073686f756c64206265206c657373207468616e2074617846656545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373416e74692d7768616c6520706572696f64206973206163746976652c20706c656173652072656475636520796f75722073697a6520756e74696c20706572696f64206973206f76657257652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122048a8d77fd628b9da2e480114c828f550037765ead2934e1abafe03e28d2231f264736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806371d3b52311610104578063a9059cbb116100a2578063e895c51411610071578063e895c51414610539578063f2cc0c181461055f578063f2fde38b14610585578063f84354f1146105ab576101da565b8063a9059cbb1461049c578063cba0e996146104c8578063d7b03c6a146104ee578063dd62ed3e1461050b576101da565b806395d89b41116100de57806395d89b411461043b5780639e20f9a314610443578063a0ac5e1914610468578063a457c2d714610470576101da565b806371d3b523146103f25780638da5cb5b1461040f57806393ed013d14610433576101da565b8063395093511161017c5780634ada218b1161014b5780634ada218b1461039f5780635880b873146103a757806370a08231146103c4578063715018a6146103ea576101da565b806339509351146103315780633b6b19611461035d5780633bd5d1731461037a5780633c9f861d14610397576101da565b806318160ddd116101b857806318160ddd146102b65780631bbae6e0146102be57806323b872dd146102dd578063313ce56714610313576101da565b806306fdde03146101df578063095ea7b31461025c57806313114a9d1461029c575b600080fd5b6101e76105d1565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610221578181015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102886004803603604081101561027257600080fd5b506001600160a01b038135169060200135610667565b604080519115158252519081900360200190f35b6102a4610685565b60408051918252519081900360200190f35b6102a461068b565b6102db600480360360208110156102d457600080fd5b5035610691565b005b610288600480360360608110156102f357600080fd5b506001600160a01b03813581169160208101359091169060400135610733565b61031b6107ba565b6040805160ff9092168252519081900360200190f35b6102886004803603604081101561034757600080fd5b506001600160a01b0381351690602001356107c3565b6102db6004803603602081101561037357600080fd5b5035610811565b6102db6004803603602081101561039057600080fd5b50356108ae565b6102a4610988565b61028861098e565b6102db600480360360208110156103bd57600080fd5b503561099e565b6102a4600480360360208110156103da57600080fd5b50356001600160a01b0316610a5f565b6102db610ac9565b6102db6004803603602081101561040857600080fd5b5035610b6b565b610417610c08565b604080516001600160a01b039092168252519081900360200190f35b610417610c17565b6101e7610c26565b6102a46004803603604081101561045957600080fd5b50803590602001351515610c87565b6102db610d19565b6102886004803603604081101561048657600080fd5b506001600160a01b038135169060200135610d86565b610288600480360360408110156104b257600080fd5b506001600160a01b038135169060200135610dee565b610288600480360360208110156104de57600080fd5b50356001600160a01b0316610e02565b6102a46004803603602081101561050457600080fd5b5035610e20565b6102a46004803603604081101561052157600080fd5b506001600160a01b0381358116916020013516610e80565b6102db6004803603602081101561054f57600080fd5b50356001600160a01b0316610eab565b6102db6004803603602081101561057557600080fd5b50356001600160a01b0316610f25565b6102db6004803603602081101561059b57600080fd5b50356001600160a01b0316611107565b6102db600480360360208110156105c157600080fd5b50356001600160a01b03166111ff565b600a8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561065d5780601f106106325761010080835404028352916020019161065d565b820191906000526020600020905b81548152906001019060200180831161064057829003601f168201915b5050505050905090565b600061067b6106746113c0565b84846113c4565b5060015b92915050565b60085490565b60065490565b6106996113c0565b6000546001600160a01b039081169116146106e9576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b655af3107a400081101561072e5760405162461bcd60e51b815260040180806020018281038252602b8152602001806120fe602b913960400191505060405180910390fd5b601055565b60006107408484846114b0565b6107b08461074c6113c0565b6107ab8560405180606001604052806028815260200161214a602891396001600160a01b038a1660009081526003602052604081209061078a6113c0565b6001600160a01b0316815260208101919091526040016000205491906117a2565b6113c4565b5060019392505050565b600c5460ff1690565b600061067b6107d06113c0565b846107ab85600360006107e16113c0565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611839565b6108196113c0565b6000546001600160a01b03908116911614610869576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b600d5481106108a95760405162461bcd60e51b81526004018080602001828103825260228152602001806122256022913960400191505060405180910390fd5b600f55565b60006108b86113c0565b6001600160a01b03811660009081526004602052604090205490915060ff16156109135760405162461bcd60e51b815260040180806020018281038252602c8152602001806122d6602c913960400191505060405180910390fd5b600061091e83611893565b505050506001600160a01b03841660009081526001602052604090205491925061094a919050826118f0565b6001600160a01b03831660009081526001602052604090205560075461097090826118f0565b6007556008546109809084611839565b600855505050565b60095490565b601154600160a01b900460ff1681565b6109a66113c0565b6000546001600160a01b039081169116146109f6576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b60648110158015610a0957506103e88111155b610a5a576040805162461bcd60e51b815260206004820152601c60248201527f7461784665652073686f756c6420626520696e203125202d2031302500000000604482015290519081900360640190fd5b600d55565b6001600160a01b03811660009081526004602052604081205460ff1615610a9f57506001600160a01b038116600090815260026020526040902054610ac4565b6001600160a01b038216600090815260016020526040902054610ac190610e20565b90505b919050565b610ad16113c0565b6000546001600160a01b03908116911614610b21576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610b736113c0565b6000546001600160a01b03908116911614610bc3576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b600d548110610c035760405162461bcd60e51b81526004018080602001828103825260278152602001806120d76027913960400191505060405180910390fd5b600e55565b6000546001600160a01b031690565b6011546001600160a01b031681565b600b8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561065d5780601f106106325761010080835404028352916020019161065d565b6000600654831115610ce0576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610cff576000610cf084611893565b5093955061067f945050505050565b6000610d0a84611893565b5092955061067f945050505050565b610d216113c0565b6000546001600160a01b03908116911614610d71576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b6011805460ff60a01b1916600160a01b179055565b600061067b610d936113c0565b846107ab856040518060600160405280602581526020016123026025913960036000610dbd6113c0565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906117a2565b600061067b610dfb6113c0565b84846114b0565b6001600160a01b031660009081526004602052604090205460ff1690565b6000600754821115610e635760405162461bcd60e51b815260040180806020018281038252602a815260200180612065602a913960400191505060405180910390fd5b6000610e6d611932565b9050610e798382611955565b9392505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610eb36113c0565b6000546001600160a01b03908116911614610f03576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610f2d6113c0565b6000546001600160a01b03908116911614610f7d576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610fd95760405162461bcd60e51b81526004018080602001828103825260228152602001806122b46022913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff1615611047576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260016020526040902054156110a1576001600160a01b03811660009081526001602052604090205461108790610e20565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b61110f6113c0565b6000546001600160a01b0390811691161461115f576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b6001600160a01b0381166111a45760405162461bcd60e51b815260040180806020018281038252602681526020018061208f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6112076113c0565b6000546001600160a01b03908116911614611257576040805162461bcd60e51b81526020600482018190526024820152600080516020612172833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff166112c4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b6005548110156113bc57816001600160a01b0316600582815481106112e857fe5b6000918252602090912001546001600160a01b031614156113b45760058054600019810190811061131557fe5b600091825260209091200154600580546001600160a01b03909216918390811061133b57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061138d57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556113bc565b6001016112c7565b5050565b3390565b6001600160a01b0383166114095760405162461bcd60e51b81526004018080602001828103825260248152602001806122476024913960400191505060405180910390fd5b6001600160a01b03821661144e5760405162461bcd60e51b81526004018080602001828103825260228152602001806120b56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166114f55760405162461bcd60e51b81526004018080602001828103825260258152602001806122006025913960400191505060405180910390fd5b6001600160a01b03821661153a5760405162461bcd60e51b81526004018080602001828103825260238152602001806120426023913960400191505060405180910390fd5b600081116115795760405162461bcd60e51b81526004018080602001828103825260298152602001806121926029913960400191505060405180910390fd5b611581610c08565b6001600160a01b0316836001600160a01b0316141580156115bb57506115a5610c08565b6001600160a01b0316826001600160a01b031614155b15611649576010548111156116015760405162461bcd60e51b815260040180806020018281038252604981526020018061226b6049913960600191505060405180910390fd5b601154600160a01b900460ff166116495760405162461bcd60e51b81526004018080602001828103825260458152602001806121bb6045913960600191505060405180910390fd5b6001600160a01b03831660009081526004602052604090205460ff16801561168a57506001600160a01b03821660009081526004602052604090205460ff16155b1561169f5761169a838383611997565b61179d565b6001600160a01b03831660009081526004602052604090205460ff161580156116e057506001600160a01b03821660009081526004602052604090205460ff165b156116f05761169a838383611ad7565b6001600160a01b03831660009081526004602052604090205460ff1615801561173257506001600160a01b03821660009081526004602052604090205460ff16155b156117425761169a838383611ba1565b6001600160a01b03831660009081526004602052604090205460ff16801561178257506001600160a01b03821660009081526004602052604090205460ff165b156117925761169a838383611c06565b61179d838383611ba1565b505050565b600081848411156118315760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117f65781810151838201526020016117de565b50505050905090810190601f1680156118235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610e79576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006118b08a600d54600f54611c9a565b92509250925060006118c0611932565b905060008060006118d38e878787611cf1565b919e509c509a509598509396509194505050505091939550919395565b6000610e7983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117a2565b600080600061193f611d41565b909250905061194e8282611955565b9250505090565b6000610e7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ea4565b60006119a1611932565b90506000806000806000806119b588611893565b95509550955095509550955060006119d68883611f0990919063ffffffff16565b6001600160a01b038c166000908152600260205260409020549091506119fc908a6118f0565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611a2b90886118f0565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611a5a9087611839565b6001600160a01b038b16600090815260016020526040902055611a7f85828585611f62565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000611ae1611932565b9050600080600080600080611af588611893565b9550955095509550955095506000611b168883611f0990919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611b3c90886118f0565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611b729085611839565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611a5a9087611839565b6000611bab611932565b9050600080600080600080611bbf88611893565b9550955095509550955095506000611be08883611f0990919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150611a2b90886118f0565b6000611c10611932565b9050600080600080600080611c2488611893565b9550955095509550955095506000611c458883611f0990919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611c6b908a6118f0565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054611b3c90886118f0565b6000808080611cb5612710611caf8989611f09565b90611955565b90506000611cc9612710611caf8a89611f09565b90506000611ce182611cdb8b866118f0565b906118f0565b9992985090965090945050505050565b6000808080611d008886611f09565b90506000611d0e8887611f09565b90506000611d1c8888611f09565b90506000611d2e82611cdb86866118f0565b939b939a50919850919650505050505050565b6007546006546000918291825b600554811015611e7257826001600060058481548110611d6a57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611dcf5750816002600060058481548110611da857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611de65760075460065494509450505050611ea0565b611e266001600060058481548110611dfa57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906118f0565b9250611e686002600060058481548110611e3c57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906118f0565b9150600101611d4e565b50600654600754611e8291611955565b821015611e9a57600754600654935093505050611ea0565b90925090505b9091565b60008183611ef35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156117f65781810151838201526020016117de565b506000838581611eff57fe5b0495945050505050565b600082611f185750600061067f565b82820282848281611f2557fe5b0414610e795760405162461bcd60e51b81526004018080602001828103825260218152602001806121296021913960400191505060405180910390fd5b6000611f7f600d54611caf600e5488611f0990919063ffffffff16565b90506000611f9e600d54611caf600e5487611f0990919063ffffffff16565b6011546001600160a01b0316600090815260016020526040902054909150611fc69083611839565b6011546001600160a01b0316600090815260016020526040902055600754612000908390611ffa908890611cdb908b6118f0565b90611839565b600755600854612016908290611cdb9087611839565b6008556009546120269084611839565b60095560065461203690846118f0565b60065550505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737365636f73797374656d4665652073686f756c64206265206c657373207468616e207461784665656d61785478416d6f756e742073686f756c642062652067726561746572207468616e203130303030306539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f416e74692d626f7420706572696f64206973206163746976652c20706c65617365207761697420756e74696c2068756d616e2074726164696e6720697320656e61626c656445524332303a207472616e736665722066726f6d20746865207a65726f20616464726573736275726e4665652073686f756c64206265206c657373207468616e2074617846656545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373416e74692d7768616c6520706572696f64206973206163746976652c20706c656173652072656475636520796f75722073697a6520756e74696c20706572696f64206973206f76657257652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122048a8d77fd628b9da2e480114c828f550037765ead2934e1abafe03e28d2231f264736f6c634300060c0033

Deployed Bytecode Sourcemap

26772:13527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27937:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28847:161;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28847:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;29958:87;;;:::i;:::-;;;;;;;;;;;;;;;;28214:95;;;:::i;39996:203::-;;;;;;;;;;;;;;;;-1:-1:-1;39996:203:0;;:::i;:::-;;29016:313;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29016:313:0;;;;;;;;;;;;;;;;;:::i;28123:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29337:218;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29337:218:0;;;;;;;;:::i;39270:171::-;;;;;;;;;;;;;;;;-1:-1:-1;39270:171:0;;:::i;30153:377::-;;;;;;;;;;;;;;;;-1:-1:-1;30153:377:0;;:::i;30057:88::-;;;:::i;27724:26::-;;;:::i;38992:175::-;;;;;;;;;;;;;;;;-1:-1:-1;38992:175:0;;:::i;28317:196::-;;;;;;;;;;;;;;;;-1:-1:-1;28317:196:0;-1:-1:-1;;;;;28317:196:0;;:::i;17431:148::-;;;:::i;39554:201::-;;;;;;;;;;;;;;;;-1:-1:-1;39554:201:0;;:::i;16789:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16789:79:0;;;;;;;;;;;;;;27689:28;;;:::i;28028:87::-;;;:::i;30538:434::-;;;;;;;;;;;;;;;;-1:-1:-1;30538:434:0;;;;;;;;;:::i;40207:87::-;;;:::i;29563:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29563:269:0;;;;;;;;:::i;28521:167::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28521:167:0;;;;;;;;:::i;29840:110::-;;;;;;;;;;;;;;;;-1:-1:-1;29840:110:0;-1:-1:-1;;;;;29840:110:0;;:::i;30980:251::-;;;;;;;;;;;;;;;;-1:-1:-1;30980:251:0;;:::i;28696:143::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28696:143:0;;;;;;;;;;:::i;39767:114::-;;;;;;;;;;;;;;;;-1:-1:-1;39767:114:0;-1:-1:-1;;;;;39767:114:0;;:::i;31239:441::-;;;;;;;;;;;;;;;;-1:-1:-1;31239:441:0;-1:-1:-1;;;;;31239:441:0;;:::i;17734:244::-;;;;;;;;;;;;;;;;-1:-1:-1;17734:244:0;-1:-1:-1;;;;;17734:244:0;;:::i;31688:478::-;;;;;;;;;;;;;;;;-1:-1:-1;31688:478:0;-1:-1:-1;;;;;31688:478:0;;:::i;27937:83::-;28007:5;28000:12;;;;;;;;-1:-1:-1;;28000:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27974:13;;28000:12;;28007:5;;28000:12;;28007:5;28000:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27937:83;:::o;28847:161::-;28922:4;28939:39;28948:12;:10;:12::i;:::-;28962:7;28971:6;28939:8;:39::i;:::-;-1:-1:-1;28996:4:0;28847:161;;;;;:::o;29958:87::-;30027:10;;29958:87;:::o;28214:95::-;28294:7;;28214:95;:::o;39996:203::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;40097:8:::1;40082:11;:23;;40074:80;;;;-1:-1:-1::0;;;40074:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40165:12;:26:::0;39996:203::o;29016:313::-;29114:4;29131:36;29141:6;29149:9;29160:6;29131:9;:36::i;:::-;29178:121;29187:6;29195:12;:10;:12::i;:::-;29209:89;29247:6;29209:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29209:19:0;;;;;;:11;:19;;;;;;29229:12;:10;:12::i;:::-;-1:-1:-1;;;;;29209:33:0;;;;;;;;;;;;-1:-1:-1;29209:33:0;;;:89;:37;:89::i;:::-;29178:8;:121::i;:::-;-1:-1:-1;29317:4:0;29016:313;;;;;:::o;28123:83::-;28189:9;;;;28123:83;:::o;29337:218::-;29425:4;29442:83;29451:12;:10;:12::i;:::-;29465:7;29474:50;29513:10;29474:11;:25;29486:12;:10;:12::i;:::-;-1:-1:-1;;;;;29474:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;29474:25:0;;;:34;;;;;;;;;;;:38;:50::i;39270:171::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;39358:7:::1;;39348;:17;39340:64;;;;-1:-1:-1::0;;;39340:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39415:8;:18:::0;39270:171::o;30153:377::-;30205:14;30222:12;:10;:12::i;:::-;-1:-1:-1;;;;;30254:19:0;;;;;;:11;:19;;;;;;30205:29;;-1:-1:-1;30254:19:0;;30253:20;30245:77;;;;-1:-1:-1;;;30245:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30334:15;30358:19;30369:7;30358:10;:19::i;:::-;-1:-1:-1;;;;;;;;;30406:15:0;;;;;;:7;:15;;;;;;30333:44;;-1:-1:-1;30406:28:0;;:15;-1:-1:-1;30333:44:0;30406:19;:28::i;:::-;-1:-1:-1;;;;;30388:15:0;;;;;;:7;:15;;;;;:46;30455:7;;:20;;30467:7;30455:11;:20::i;:::-;30445:7;:30;30499:10;;:23;;30514:7;30499:14;:23::i;:::-;30486:10;:36;-1:-1:-1;;;30153:377:0:o;30057:88::-;30126:11;;30057:88;:::o;27724:26::-;;;-1:-1:-1;;;27724:26:0;;;;;:::o;38992:175::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;39078:3:::1;39068:6;:13;;:31;;;;;39095:4;39085:6;:14;;39068:31;39060:72;;;::::0;;-1:-1:-1;;;39060:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;39143:7;:16:::0;38992:175::o;28317:196::-;-1:-1:-1;;;;;28407:20:0;;28383:7;28407:20;;;:11;:20;;;;;;;;28403:49;;;-1:-1:-1;;;;;;28436:16:0;;;;;;:7;:16;;;;;;28429:23;;28403:49;-1:-1:-1;;;;;28488:16:0;;;;;;:7;:16;;;;;;28470:35;;:17;:35::i;:::-;28463:42;;28317:196;;;;:::o;17431:148::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;17538:1:::1;17522:6:::0;;17501:40:::1;::::0;-1:-1:-1;;;;;17522:6:0;;::::1;::::0;17501:40:::1;::::0;17538:1;;17501:40:::1;17569:1;17552:19:::0;;-1:-1:-1;;;;;;17552:19:0::1;::::0;;17431:148::o;39554:201::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;39657:7:::1;;39642:12;:22;39634:74;;;;-1:-1:-1::0;;;39634:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39719:13;:28:::0;39554:201::o;16789:79::-;16827:7;16854:6;-1:-1:-1;;;;;16854:6:0;16789:79;:::o;27689:28::-;;;-1:-1:-1;;;;;27689:28:0;;:::o;28028:87::-;28100:7;28093:14;;;;;;;;-1:-1:-1;;28093:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28067:13;;28093:14;;28100:7;;28093:14;;28100:7;28093:14;;;;;;;;;;;;;;;;;;;;;;;;30538:434;30626:7;30665;;30654;:18;;30646:62;;;;;-1:-1:-1;;;30646:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30724:17;30719:246;;30759:15;30783:19;30794:7;30783:10;:19::i;:::-;-1:-1:-1;30758:44:0;;-1:-1:-1;30817:14:0;;-1:-1:-1;;;;;30817:14:0;30719:246;30866:23;30897:19;30908:7;30897:10;:19::i;:::-;-1:-1:-1;30864:52:0;;-1:-1:-1;30931:22:0;;-1:-1:-1;;;;;30931:22:0;40207:87;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;40265:14:::1;:21:::0;;-1:-1:-1;;;;40265:21:0::1;-1:-1:-1::0;;;40265:21:0::1;::::0;;40207:87::o;29563:269::-;29656:4;29673:129;29682:12;:10;:12::i;:::-;29696:7;29705:96;29744:15;29705:96;;;;;;;;;;;;;;;;;:11;:25;29717:12;:10;:12::i;:::-;-1:-1:-1;;;;;29705:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;29705:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;28521:167::-;28599:4;28616:42;28626:12;:10;:12::i;:::-;28640:9;28651:6;28616:9;:42::i;29840:110::-;-1:-1:-1;;;;;29922:20:0;29898:4;29922:20;;;:11;:20;;;;;;;;;29840:110::o;30980:251::-;31044:7;31083;;31072;:18;;31064:73;;;;-1:-1:-1;;;31064:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31148:19;31171:10;:8;:10::i;:::-;31148:33;-1:-1:-1;31199:24:0;:7;31148:33;31199:11;:24::i;:::-;31192:31;30980:251;-1:-1:-1;;;30980:251:0:o;28696:143::-;-1:-1:-1;;;;;28804:18:0;;;28777:7;28804:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28696:143::o;39767:114::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;39843:13:::1;:30:::0;;-1:-1:-1;;;;;;39843:30:0::1;-1:-1:-1::0;;;;;39843:30:0;;;::::1;::::0;;;::::1;::::0;;39767:114::o;31239:441::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;31331:42:::1;-1:-1:-1::0;;;;;31320:53:0;::::1;;;31312:100;;;;-1:-1:-1::0;;;31312:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31432:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31431:21;31423:61;;;::::0;;-1:-1:-1;;;31423:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;31498:16:0;::::1;31517:1;31498:16:::0;;;:7:::1;:16;::::0;;;;;:20;31495:106:::1;;-1:-1:-1::0;;;;;31572:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31554:35:::1;::::0;:17:::1;:35::i;:::-;-1:-1:-1::0;;;;;31535:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:54;31495:106:::1;-1:-1:-1::0;;;;;31611:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31611:27:0::1;31634:4;31611:27:::0;;::::1;::::0;;;31649:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31649:23:0::1;::::0;;::::1;::::0;;31239:441::o;17734:244::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17823:22:0;::::1;17815:73;;;;-1:-1:-1::0;;;17815:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17925:6;::::0;;17904:38:::1;::::0;-1:-1:-1;;;;;17904:38:0;;::::1;::::0;17925:6;::::1;::::0;17904:38:::1;::::0;::::1;17953:6;:17:::0;;-1:-1:-1;;;;;;17953:17:0::1;-1:-1:-1::0;;;;;17953:17:0;;;::::1;::::0;;;::::1;::::0;;17734:244::o;31688:478::-;17011:12;:10;:12::i;:::-;17001:6;;-1:-1:-1;;;;;17001:6:0;;;:22;;;16993:67;;;;;-1:-1:-1;;;16993:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16993:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31769:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31761:60;;;::::0;;-1:-1:-1;;;31761:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31837:9;31832:327;31856:9;:16:::0;31852:20;::::1;31832:327;;;31914:7;-1:-1:-1::0;;;;;31898:23:0::1;:9;31908:1;31898:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31898:12:0::1;:23;31894:254;;;31957:9;31967:16:::0;;-1:-1:-1;;31967:20:0;;;31957:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;31942:9:::1;:12:::0;;-1:-1:-1;;;;;31957:31:0;;::::1;::::0;31952:1;;31942:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31942:46:0::1;-1:-1:-1::0;;;;;31942:46:0;;::::1;;::::0;;32007:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32046:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32046:28:0::1;::::0;;32093:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32093:15:0;;;;;-1:-1:-1;;;;;;32093:15:0::1;::::0;;;;;32127:5:::1;;31894:254;31874:3;;31832:327;;;;31688:478:::0;:::o;1082:106::-;1170:10;1082:106;:::o;32174:337::-;-1:-1:-1;;;;;32267:19:0;;32259:68;;;;-1:-1:-1;;;32259:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32346:21:0;;32338:68;;;;-1:-1:-1;;;32338:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32419:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32471:32;;;;;;;;;;;;;;;;;32174:337;;;:::o;32519:1237::-;-1:-1:-1;;;;;32616:20:0;;32608:70;;;;-1:-1:-1;;;32608:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32697:23:0;;32689:71;;;;-1:-1:-1;;;32689:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32788:1;32779:6;:10;32771:64;;;;-1:-1:-1;;;32771:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32861:7;:5;:7::i;:::-;-1:-1:-1;;;;;32851:17:0;:6;-1:-1:-1;;;;;32851:17:0;;;:41;;;;;32885:7;:5;:7::i;:::-;-1:-1:-1;;;;;32872:20:0;:9;-1:-1:-1;;;;;32872:20:0;;;32851:41;32848:292;;;32927:12;;32917:6;:22;;32909:108;;;;-1:-1:-1;;;32909:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33040:14;;-1:-1:-1;;;33040:14:0;;;;33032:96;;;;-1:-1:-1;;;33032:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33156:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;33180:22:0;;;;;;:11;:22;;;;;;;;33179:23;33156:46;33152:597;;;33219:48;33241:6;33249:9;33260:6;33219:21;:48::i;:::-;33152:597;;;-1:-1:-1;;;;;33290:19:0;;;;;;:11;:19;;;;;;;;33289:20;:46;;;;-1:-1:-1;;;;;;33313:22:0;;;;;;:11;:22;;;;;;;;33289:46;33285:464;;;33352:46;33372:6;33380:9;33391:6;33352:19;:46::i;33285:464::-;-1:-1:-1;;;;;33421:19:0;;;;;;:11;:19;;;;;;;;33420:20;:47;;;;-1:-1:-1;;;;;;33445:22:0;;;;;;:11;:22;;;;;;;;33444:23;33420:47;33416:333;;;33484:44;33502:6;33510:9;33521:6;33484:17;:44::i;33416:333::-;-1:-1:-1;;;;;33550:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33573:22:0;;;;;;:11;:22;;;;;;;;33550:45;33546:203;;;33612:48;33634:6;33642:9;33653:6;33612:21;:48::i;33546:203::-;33693:44;33711:6;33719:9;33730:6;33693:17;:44::i;:::-;32519:1237;;;:::o;6079:192::-;6165:7;6201:12;6193:6;;;;6185:29;;;;-1:-1:-1;;;6185:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6237:5:0;;;6079:192::o;5176:181::-;5234:7;5266:5;;;5290:6;;;;5282:46;;;;;-1:-1:-1;;;5282:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;36899:468;36958:7;36967;36976;36985;36994;37003;37024:23;37049:12;37063:13;37080:39;37092:7;37101;;37110:8;;37080:11;:39::i;:::-;37023:96;;;;;;37130:19;37153:10;:8;:10::i;:::-;37130:33;;37175:15;37192:23;37217:12;37233:46;37245:7;37254:4;37260:5;37267:11;37233;:46::i;:::-;37174:105;;-1:-1:-1;37174:105:0;-1:-1:-1;37174:105:0;-1:-1:-1;37330:15:0;;-1:-1:-1;37347:4:0;;-1:-1:-1;37353:5:0;;-1:-1:-1;;;;;36899:468:0;;;;;;;:::o;5640:136::-;5698:7;5725:43;5729:1;5732;5725:43;;;;;;;;;;;;;;;;;:3;:43::i;38155:163::-;38196:7;38217:15;38234;38253:19;:17;:19::i;:::-;38216:56;;-1:-1:-1;38216:56:0;-1:-1:-1;38290:20:0;38216:56;;38290:11;:20::i;:::-;38283:27;;;;38155:163;:::o;7477:132::-;7535:7;7562:39;7566:1;7569;7562:39;;;;;;;;;;;;;;;;;:3;:39::i;35009:633::-;35111:19;35134:10;:8;:10::i;:::-;35111:33;;35156:15;35173:23;35198:12;35212:23;35237:12;35251:13;35268:19;35279:7;35268:10;:19::i;:::-;35155:132;;;;;;;;;;;;35298:13;35315:22;35325:11;35315:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;35366:15:0;;;;;;:7;:15;;;;;;35298:39;;-1:-1:-1;35366:28:0;;35386:7;35366:19;:28::i;:::-;-1:-1:-1;;;;;35348:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35423:7;:15;;;;:28;;35443:7;35423:19;:28::i;:::-;-1:-1:-1;;;;;35405:15:0;;;;;;;:7;:15;;;;;;:46;;;;35483:18;;;;;;;:39;;35506:15;35483:22;:39::i;:::-;-1:-1:-1;;;;;35462:18:0;;;;;;:7;:18;;;;;:60;35536:38;35549:4;35555:5;35562:4;35568:5;35536:12;:38::i;:::-;35607:9;-1:-1:-1;;;;;35590:44:0;35599:6;-1:-1:-1;;;;;35590:44:0;;35618:15;35590:44;;;;;;;;;;;;;;;;;;35009:633;;;;;;;;;;;:::o;34348:653::-;34448:19;34471:10;:8;:10::i;:::-;34448:33;;34493:15;34510:23;34535:12;34549:23;34574:12;34588:13;34605:19;34616:7;34605:10;:19::i;:::-;34492:132;;;;;;;;;;;;34635:13;34652:22;34662:11;34652:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;34703:15:0;;;;;;:7;:15;;;;;;34635:39;;-1:-1:-1;34703:28:0;;34723:7;34703:19;:28::i;:::-;-1:-1:-1;;;;;34685:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34763:18;;;;;:7;:18;;;;;:39;;34786:15;34763:22;:39::i;:::-;-1:-1:-1;;;;;34742:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34834:7;:18;;;;:39;;34857:15;34834:22;:39::i;33764:576::-;33862:19;33885:10;:8;:10::i;:::-;33862:33;;33907:15;33924:23;33949:12;33963:23;33988:12;34002:13;34019:19;34030:7;34019:10;:19::i;:::-;33906:132;;;;;;;;;;;;34049:13;34066:22;34076:11;34066:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;34117:15:0;;;;;;:7;:15;;;;;;34049:39;;-1:-1:-1;34117:28:0;;34137:7;34117:19;:28::i;35650:709::-;35752:19;35775:10;:8;:10::i;:::-;35752:33;;35797:15;35814:23;35839:12;35853:23;35878:12;35892:13;35909:19;35920:7;35909:10;:19::i;:::-;35796:132;;;;;;;;;;;;35939:13;35956:22;35966:11;35956:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;36007:15:0;;;;;;:7;:15;;;;;;35939:39;;-1:-1:-1;36007:28:0;;36027:7;36007:19;:28::i;:::-;-1:-1:-1;;;;;35989:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36064:7;:15;;;;:28;;36084:7;36064:19;:28::i;37375:355::-;37468:7;;;;37521:30;37545:5;37521:19;:7;37533:6;37521:11;:19::i;:::-;:23;;:30::i;:::-;37506:45;-1:-1:-1;37562:13:0;37578:31;37603:5;37578:20;:7;37590;37578:11;:20::i;:31::-;37562:47;-1:-1:-1;37620:23:0;37646:28;37562:47;37646:17;:7;37658:4;37646:11;:17::i;:::-;:21;;:28::i;:::-;37620:54;37710:4;;-1:-1:-1;37716:5:0;;-1:-1:-1;37375:355:0;;-1:-1:-1;;;;;37375:355:0:o;37738:409::-;37848:7;;;;37904:24;:7;37916:11;37904;:24::i;:::-;37886:42;-1:-1:-1;37939:12:0;37954:21;:4;37963:11;37954:8;:21::i;:::-;37939:36;-1:-1:-1;37986:13:0;38002:22;:5;38012:11;38002:9;:22::i;:::-;37986:38;-1:-1:-1;38035:23:0;38061:28;37986:38;38061:17;:7;38073:4;38061:11;:17::i;:28::-;38108:7;;;;-1:-1:-1;38134:4:0;;-1:-1:-1;37738:409:0;;-1:-1:-1;;;;;;;37738:409:0:o;38326:561::-;38423:7;;38459;;38376;;;;;38483:289;38507:9;:16;38503:20;;38483:289;;;38573:7;38549;:21;38557:9;38567:1;38557:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38557:12:0;38549:21;;;;;;;;;;;;;:31;;:66;;;38608:7;38584;:21;38592:9;38602:1;38592:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38592:12:0;38584:21;;;;;;;;;;;;;:31;38549:66;38545:97;;;38625:7;;38634;;38617:25;;;;;;;;;38545:97;38667:34;38679:7;:21;38687:9;38697:1;38687:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38687:12:0;38679:21;;;;;;;;;;;;;38667:7;;:11;:34::i;:::-;38657:44;;38726:34;38738:7;:21;38746:9;38756:1;38746:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38746:12:0;38738:21;;;;;;;;;;;;;38726:7;;:11;:34::i;:::-;38716:44;-1:-1:-1;38525:3:0;;38483:289;;;-1:-1:-1;38808:7:0;;38796;;:20;;:11;:20::i;:::-;38786:7;:30;38782:61;;;38826:7;;38835;;38818:25;;;;;;;;38782:61;38862:7;;-1:-1:-1;38871:7:0;-1:-1:-1;38326:561:0;;;:::o;8105:278::-;8191:7;8226:12;8219:5;8211:28;;;;-1:-1:-1;;;8211:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8250:9;8266:1;8262;:5;;;;;;;8105:278;-1:-1:-1;;;;;8105:278:0:o;6530:471::-;6588:7;6833:6;6829:47;;-1:-1:-1;6863:1:0;6856:8;;6829:47;6900:5;;;6904:1;6900;:5;:1;6924:5;;;;;:10;6916:56;;;;-1:-1:-1;;;6916:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36367:524;36466:18;36487:36;36515:7;;36487:23;36496:13;;36487:4;:8;;:23;;;;:::i;:36::-;36466:57;;36534:18;36555:36;36583:7;;36555:23;36564:13;;36555:4;:8;;:23;;;;:::i;:36::-;36635:13;;-1:-1:-1;;;;;36635:13:0;36627:22;;;;:7;:22;;;;;;36534:57;;-1:-1:-1;36627:38:0;;36654:10;36627:26;:38::i;:::-;36610:13;;-1:-1:-1;;;;;36610:13:0;36602:22;;;;:7;:22;;;;;:63;36693:7;;:44;;36726:10;;36693:28;;36715:5;;36693:17;;36705:4;36693:11;:17::i;:28::-;:32;;:44::i;:::-;36683:7;:54;36761:10;;:36;;36786:10;;36761:20;;36776:4;36761:14;:20::i;:36::-;36748:10;:49;36822:11;;:22;;36838:5;36822:15;:22::i;:::-;36808:11;:36;36865:7;;:18;;36877:5;36865:11;:18::i;:::-;36855:7;:28;-1:-1:-1;;;;;;36367:524:0:o

Swarm Source

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