ETH Price: $3,338.88 (-1.14%)

Token

MIA.finance (MIA)
 

Overview

Max Total Supply

547,970.830308928 MIA

Holders

26

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Binance 10
Balance
722.212500531 MIA

Value
$0.00
0x85b931a32a0725be14285b66f1a22178c672d69b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MIA

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-06
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
                 .                                                    ▄
              .▄▓╙                                                    ╙█▄,
             ▄█▀                        ╓,    ╓▄                        ╙█▓,
           ▄█▀                          ╙█▄  ╓█▌                          ▀█▄
          ▓█▀                            ▀█▄┌██                            ╙█▌
         ██▀                              ████-                             ╙██
        ▐██                               ▐██▌                               ██▌
        ██▌                                ██⌐                               ║██
        ██▌         .▄#½æ,                 ██                 .æ½╗▄          ║██
        ███        ┌█Ö╓▄⌐ ▄               ╓██▄               ╓  ▄▄└█▄        ███
        ╙██▌       ╙█▌▄╙.▄▌              ┌████▄              ║▌,╙▄▄█Γ       ▐██▌
         ▀██▄        ▀▀▀▀╙              ▄██▌▀██▄              ╙▀▀▀▀        ▄██▀
          ▀███▄                       ▄███▀  ╙███▄                       ▄███▀
            ▀███▓▄,               .▄▓███▀'     ▀███▓▄,               .▄▓███▀'
              ╙▀█████▓▄▄▄▄▄▄▄▄▄▓▓████▀╙          ╙▀█████▓▄▄▄▄▄▄▄▄▄▓█████▀╙
                  └╙▀▀▀▀██████▀▀▀▀╙                  └▀▀▀▀▀█████▀▀▀▀╙└
     




                   ██████████████████████████████████████████████████
                   █░░░░░░██████████░░░░░░█░░░░░░░░░░█░░░░░░░░░░░░░░█
                   █░░▄▀░░░░░░░░░░░░░░▄▀░░█░░▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█
                   █░░▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀░░█░░░░▄▀░░░░█░░▄▀░░░░░░▄▀░░█
                   █░░▄▀░░░░░░▄▀░░░░░░▄▀░░███░░▄▀░░███░░▄▀░░██░░▄▀░░█
                   █░░▄▀░░██░░▄▀░░██░░▄▀░░███░░▄▀░░███░░▄▀░░░░░░▄▀░░█
                   █░░▄▀░░██░░▄▀░░██░░▄▀░░███░░▄▀░░███░░▄▀▄▀▄▀▄▀▄▀░░█
                   █░░▄▀░░██░░░░░░██░░▄▀░░███░░▄▀░░███░░▄▀░░░░░░▄▀░░█
                   █░░▄▀░░██████████░░▄▀░░███░░▄▀░░███░░▄▀░░██░░▄▀░░█
                   █░░▄▀░░██████████░░▄▀░░█░░░░▄▀░░░░█░░▄▀░░██░░▄▀░░█
                   █░░▄▀░░██████████░░▄▀░░█░░▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀░░█
                   █░░░░░░██████████░░░░░░█░░░░░░░░░░█░░░░░░██░░░░░░█
                   ██████████████████████████████████████████████████
                                        
                                        
*/
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;
    }
}



/**
 * @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);
}



/**
 * @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;
    }
}

/**
 * @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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @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);
            }
        }
    }
}

/**
 * @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;
    }
}

contract MIA 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 = 620000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;

    string private _name = 'MIA.finance';
    string private _symbol = 'MIA';
    uint8 private _decimals = 9;
    
    uint256 private _taxFee = 0;
    uint256 private _burnFee = 0;
    uint256 private _maxTxAmount = 620000e9;

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        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 tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _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 reflectionFromToken(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 tokenFromReflection(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] = tokenFromReflection(_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, "Transfer amount exceeds the maxTxAmount.");
        
        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);       
        _reflectFee(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);           
        _reflectFee(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);   
        _reflectFee(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);        
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn) private {
        _rTotal = _rTotal.sub(rFee).sub(rBurn);
        _tFeeTotal = _tFeeTotal.add(tFee);
        _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(100);
        uint256 tBurn = tAmount.mul(burnFee).div(100);
        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() public view returns(uint256) {
        return _taxFee;
    }

    function _getBurnFee() public view returns(uint256) {
        return _burnFee;
    }
    
    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }
    
    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 0 && taxFee <= 10, 'taxFee should be in 0 - 10');
        _taxFee = taxFee;
    }
    
    function _setBurnFee(uint256 burnFee) external onlyOwner() {
        require(burnFee >= 0 && burnFee <= 10, 'burnFee should be in 0 - 10');
        _burnFee = burnFee;
    }
    
    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 550000e9 , 'maxTxAmount should be greater than 550000e9');
        _maxTxAmount = maxTxAmount;
    }
}

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":"_getBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"_setBurnFee","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":[{"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":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"tokenFromReflection","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":[{"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"}]

660233e2ffc2c0006006556601cdf1bdab3fff1960075560c0604052600b60808190526a4d49412e66696e616e636560a81b60a09081526200004591600a919062000185565b50604080518082019091526003808252624d494160e81b60209092019182526200007291600b9162000185565b50600c805460ff191660091790556000600d819055600e55660233e2ffc2c000600f55348015620000a257600080fd5b506000620000af62000181565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600754600160006200010a62000181565b6001600160a01b031681526020810191909152604001600020556200012e62000181565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a362000221565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001c857805160ff1916838001178555620001f8565b82800160010185558215620001f8579182015b82811115620001f8578251825591602001919060010190620001db565b50620002069291506200020a565b5090565b5b808211156200020657600081556001016200020b565b611fcd80620002316000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80634549b039116100f9578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e146104b5578063f2cc0c18146104e3578063f2fde38b14610509578063f84354f11461052f576101a9565b8063a457c2d714610437578063a9059cbb14610463578063cba0e9961461048f576101a9565b806370a08231116100d357806370a08231146103dd578063715018a6146104035780638da5cb5b1461040b57806395d89b411461042f576101a9565b80634549b039146103935780635880b873146103b85780636a39d32c146103d5576101a9565b80632d83811911610166578063395093511161014057806339509351146103255780633b6b1961146103515780633bd5d1731461036e5780633c9f861d1461038b576101a9565b80632d838119146102e25780632fbff030146102ff578063313ce56714610307576101a9565b806306fdde03146101ae578063095ea7b31461022b57806313114a9d1461026b57806318160ddd146102855780631bbae6e01461028d57806323b872dd146102ac575b600080fd5b6101b6610555565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356105eb565b604080519115158252519081900360200190f35b610273610609565b60408051918252519081900360200190f35b61027361060f565b6102aa600480360360208110156102a357600080fd5b5035610615565b005b610257600480360360608110156102c257600080fd5b506001600160a01b038135811691602081013590911690604001356106b8565b610273600480360360208110156102f857600080fd5b503561073f565b6102736107a1565b61030f6107a7565b6040805160ff9092168252519081900360200190f35b6102576004803603604081101561033b57600080fd5b506001600160a01b0381351690602001356107b0565b6102aa6004803603602081101561036757600080fd5b50356107fe565b6102aa6004803603602081101561038457600080fd5b50356108b1565b61027361098b565b610273600480360360408110156103a957600080fd5b50803590602001351515610991565b6102aa600480360360208110156103ce57600080fd5b5035610a23565b610273610ad6565b610273600480360360208110156103f357600080fd5b50356001600160a01b0316610adc565b6102aa610b3e565b610413610be0565b604080516001600160a01b039092168252519081900360200190f35b6101b6610bef565b6102576004803603604081101561044d57600080fd5b506001600160a01b038135169060200135610c50565b6102576004803603604081101561047957600080fd5b506001600160a01b038135169060200135610cb8565b610257600480360360208110156104a557600080fd5b50356001600160a01b0316610ccc565b610273600480360360408110156104cb57600080fd5b506001600160a01b0381358116916020013516610cea565b6102aa600480360360208110156104f957600080fd5b50356001600160a01b0316610d15565b6102aa6004803603602081101561051f57600080fd5b50356001600160a01b0316610ef7565b6102aa6004803603602081101561054557600080fd5b50356001600160a01b0316610fef565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105e15780601f106105b6576101008083540402835291602001916105e1565b820191906000526020600020905b8154815290600101906020018083116105c457829003601f168201915b5050505050905090565b60006105ff6105f86111b0565b84846111b4565b5060015b92915050565b60085490565b60065490565b61061d6111b0565b6000546001600160a01b0390811691161461066d576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b6601f438daa060008110156106b35760405162461bcd60e51b815260040180806020018281038252602b815260200180611efa602b913960400191505060405180910390fd5b600f55565b60006106c58484846112a0565b610735846106d16111b0565b61073085604051806060016040528060288152602001611e40602891396001600160a01b038a1660009081526003602052604081209061070f6111b0565b6001600160a01b03168152602081019190915260400160002054919061154a565b6111b4565b5060019392505050565b60006007548211156107825760405162461bcd60e51b815260040180806020018281038252602a815260200180611d85602a913960400191505060405180910390fd5b600061078c6115e1565b90506107988382611604565b9150505b919050565b600d5490565b600c5460ff1690565b60006105ff6107bd6111b0565b8461073085600360006107ce6111b0565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061164d565b6108066111b0565b6000546001600160a01b03908116911614610856576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b600a8111156108ac576040805162461bcd60e51b815260206004820152601b60248201527f6275726e4665652073686f756c6420626520696e2030202d2031300000000000604482015290519081900360640190fd5b600e55565b60006108bb6111b0565b6001600160a01b03811660009081526004602052604090205490915060ff16156109165760405162461bcd60e51b815260040180806020018281038252602c815260200180611f47602c913960400191505060405180910390fd5b6000610921836116a7565b505050506001600160a01b03841660009081526001602052604090205491925061094d91905082611704565b6001600160a01b0383166000908152600160205260409020556007546109739082611704565b600755600854610983908461164d565b600855505050565b60095490565b60006006548311156109ea576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a095760006109fa846116a7565b50939550610603945050505050565b6000610a14846116a7565b50929550610603945050505050565b610a2b6111b0565b6000546001600160a01b03908116911614610a7b576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b600a811115610ad1576040805162461bcd60e51b815260206004820152601a60248201527f7461784665652073686f756c6420626520696e2030202d203130000000000000604482015290519081900360640190fd5b600d55565b600e5490565b6001600160a01b03811660009081526004602052604081205460ff1615610b1c57506001600160a01b03811660009081526002602052604090205461079c565b6001600160a01b0382166000908152600160205260409020546106039061073f565b610b466111b0565b6000546001600160a01b03908116911614610b96576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105e15780601f106105b6576101008083540402835291602001916105e1565b60006105ff610c5d6111b0565b8461073085604051806060016040528060258152602001611f736025913960036000610c876111b0565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061154a565b60006105ff610cc56111b0565b84846112a0565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610d1d6111b0565b6000546001600160a01b03908116911614610d6d576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610dc95760405162461bcd60e51b8152600401808060200182810382526022815260200180611f256022913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff1615610e37576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415610e91576001600160a01b038116600090815260016020526040902054610e779061073f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b610eff6111b0565b6000546001600160a01b03908116911614610f4f576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b6001600160a01b038116610f945760405162461bcd60e51b8152600401808060200182810382526026815260200180611daf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610ff76111b0565b6000546001600160a01b03908116911614611047576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff166110b4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b6005548110156111ac57816001600160a01b0316600582815481106110d857fe5b6000918252602090912001546001600160a01b031614156111a45760058054600019810190811061110557fe5b600091825260209091200154600580546001600160a01b03909216918390811061112b57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061117d57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556111ac565b6001016110b7565b5050565b3390565b6001600160a01b0383166111f95760405162461bcd60e51b8152600401808060200182810382526024815260200180611ed66024913960400191505060405180910390fd5b6001600160a01b03821661123e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611dd56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166112e55760405162461bcd60e51b8152600401808060200182810382526025815260200180611eb16025913960400191505060405180910390fd5b6001600160a01b03821661132a5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d626023913960400191505060405180910390fd5b600081116113695760405162461bcd60e51b8152600401808060200182810382526029815260200180611e886029913960400191505060405180910390fd5b611371610be0565b6001600160a01b0316836001600160a01b0316141580156113ab5750611395610be0565b6001600160a01b0316826001600160a01b031614155b156113f157600f548111156113f15760405162461bcd60e51b8152600401808060200182810382526028815260200180611df76028913960400191505060405180910390fd5b6001600160a01b03831660009081526004602052604090205460ff16801561143257506001600160a01b03821660009081526004602052604090205460ff16155b1561144757611442838383611746565b611545565b6001600160a01b03831660009081526004602052604090205460ff1615801561148857506001600160a01b03821660009081526004602052604090205460ff165b1561149857611442838383611886565b6001600160a01b03831660009081526004602052604090205460ff161580156114da57506001600160a01b03821660009081526004602052604090205460ff16155b156114ea57611442838383611950565b6001600160a01b03831660009081526004602052604090205460ff16801561152a57506001600160a01b03821660009081526004602052604090205460ff165b1561153a576114428383836119b5565b611545838383611950565b505050565b600081848411156115d95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561159e578181015183820152602001611586565b50505050905090810190601f1680156115cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006115ee611a49565b90925090506115fd8282611604565b9250505090565b600061164683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bac565b9392505050565b600082820183811015611646576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006116c48a600d54600e54611c11565b92509250925060006116d46115e1565b905060008060006116e78e878787611c66565b919e509c509a509598509396509194505050505091939550919395565b600061164683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061154a565b60006117506115e1565b9050600080600080600080611764886116a7565b95509550955095509550955060006117858883611cb690919063ffffffff16565b6001600160a01b038c166000908152600260205260409020549091506117ab908a611704565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546117da9088611704565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611809908761164d565b6001600160a01b038b1660009081526001602052604090205561182e85828585611d0f565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006118906115e1565b90506000806000806000806118a4886116a7565b95509550955095509550955060006118c58883611cb690919063ffffffff16565b6001600160a01b038c166000908152600160205260409020549091506118eb9088611704565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611921908561164d565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611809908761164d565b600061195a6115e1565b905060008060008060008061196e886116a7565b955095509550955095509550600061198f8883611cb690919063ffffffff16565b6001600160a01b038c166000908152600160205260409020549091506117da9088611704565b60006119bf6115e1565b90506000806000806000806119d3886116a7565b95509550955095509550955060006119f48883611cb690919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611a1a908a611704565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546118eb9088611704565b6007546006546000918291825b600554811015611b7a57826001600060058481548110611a7257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ad75750816002600060058481548110611ab057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611aee5760075460065494509450505050611ba8565b611b2e6001600060058481548110611b0257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611704565b9250611b706002600060058481548110611b4457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611704565b9150600101611a56565b50600654600754611b8a91611604565b821015611ba257600754600654935093505050611ba8565b90925090505b9091565b60008183611bfb5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561159e578181015183820152602001611586565b506000838581611c0757fe5b0495945050505050565b6000808080611c2b6064611c258989611cb6565b90611604565b90506000611c3e6064611c258a89611cb6565b90506000611c5682611c508b86611704565b90611704565b9992985090965090945050505050565b6000808080611c758886611cb6565b90506000611c838887611cb6565b90506000611c918888611cb6565b90506000611ca382611c508686611704565b939b939a50919850919650505050505050565b600082611cc557506000610603565b82820282848281611cd257fe5b04146116465760405162461bcd60e51b8152600401808060200182810382526021815260200180611e1f6021913960400191505060405180910390fd5b611d2883611c508660075461170490919063ffffffff16565b600755600854611d38908361164d565b600855600954611d48908261164d565b600955600654611d589082611704565b6006555050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736d61785478416d6f756e742073686f756c642062652067726561746572207468616e20353530303030653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d0f281c43cbe370c84f33dfa2190a77a39fc838e693e2abe98fc4bbe875b220c64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80634549b039116100f9578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e146104b5578063f2cc0c18146104e3578063f2fde38b14610509578063f84354f11461052f576101a9565b8063a457c2d714610437578063a9059cbb14610463578063cba0e9961461048f576101a9565b806370a08231116100d357806370a08231146103dd578063715018a6146104035780638da5cb5b1461040b57806395d89b411461042f576101a9565b80634549b039146103935780635880b873146103b85780636a39d32c146103d5576101a9565b80632d83811911610166578063395093511161014057806339509351146103255780633b6b1961146103515780633bd5d1731461036e5780633c9f861d1461038b576101a9565b80632d838119146102e25780632fbff030146102ff578063313ce56714610307576101a9565b806306fdde03146101ae578063095ea7b31461022b57806313114a9d1461026b57806318160ddd146102855780631bbae6e01461028d57806323b872dd146102ac575b600080fd5b6101b6610555565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356105eb565b604080519115158252519081900360200190f35b610273610609565b60408051918252519081900360200190f35b61027361060f565b6102aa600480360360208110156102a357600080fd5b5035610615565b005b610257600480360360608110156102c257600080fd5b506001600160a01b038135811691602081013590911690604001356106b8565b610273600480360360208110156102f857600080fd5b503561073f565b6102736107a1565b61030f6107a7565b6040805160ff9092168252519081900360200190f35b6102576004803603604081101561033b57600080fd5b506001600160a01b0381351690602001356107b0565b6102aa6004803603602081101561036757600080fd5b50356107fe565b6102aa6004803603602081101561038457600080fd5b50356108b1565b61027361098b565b610273600480360360408110156103a957600080fd5b50803590602001351515610991565b6102aa600480360360208110156103ce57600080fd5b5035610a23565b610273610ad6565b610273600480360360208110156103f357600080fd5b50356001600160a01b0316610adc565b6102aa610b3e565b610413610be0565b604080516001600160a01b039092168252519081900360200190f35b6101b6610bef565b6102576004803603604081101561044d57600080fd5b506001600160a01b038135169060200135610c50565b6102576004803603604081101561047957600080fd5b506001600160a01b038135169060200135610cb8565b610257600480360360208110156104a557600080fd5b50356001600160a01b0316610ccc565b610273600480360360408110156104cb57600080fd5b506001600160a01b0381358116916020013516610cea565b6102aa600480360360208110156104f957600080fd5b50356001600160a01b0316610d15565b6102aa6004803603602081101561051f57600080fd5b50356001600160a01b0316610ef7565b6102aa6004803603602081101561054557600080fd5b50356001600160a01b0316610fef565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105e15780601f106105b6576101008083540402835291602001916105e1565b820191906000526020600020905b8154815290600101906020018083116105c457829003601f168201915b5050505050905090565b60006105ff6105f86111b0565b84846111b4565b5060015b92915050565b60085490565b60065490565b61061d6111b0565b6000546001600160a01b0390811691161461066d576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b6601f438daa060008110156106b35760405162461bcd60e51b815260040180806020018281038252602b815260200180611efa602b913960400191505060405180910390fd5b600f55565b60006106c58484846112a0565b610735846106d16111b0565b61073085604051806060016040528060288152602001611e40602891396001600160a01b038a1660009081526003602052604081209061070f6111b0565b6001600160a01b03168152602081019190915260400160002054919061154a565b6111b4565b5060019392505050565b60006007548211156107825760405162461bcd60e51b815260040180806020018281038252602a815260200180611d85602a913960400191505060405180910390fd5b600061078c6115e1565b90506107988382611604565b9150505b919050565b600d5490565b600c5460ff1690565b60006105ff6107bd6111b0565b8461073085600360006107ce6111b0565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061164d565b6108066111b0565b6000546001600160a01b03908116911614610856576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b600a8111156108ac576040805162461bcd60e51b815260206004820152601b60248201527f6275726e4665652073686f756c6420626520696e2030202d2031300000000000604482015290519081900360640190fd5b600e55565b60006108bb6111b0565b6001600160a01b03811660009081526004602052604090205490915060ff16156109165760405162461bcd60e51b815260040180806020018281038252602c815260200180611f47602c913960400191505060405180910390fd5b6000610921836116a7565b505050506001600160a01b03841660009081526001602052604090205491925061094d91905082611704565b6001600160a01b0383166000908152600160205260409020556007546109739082611704565b600755600854610983908461164d565b600855505050565b60095490565b60006006548311156109ea576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610a095760006109fa846116a7565b50939550610603945050505050565b6000610a14846116a7565b50929550610603945050505050565b610a2b6111b0565b6000546001600160a01b03908116911614610a7b576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b600a811115610ad1576040805162461bcd60e51b815260206004820152601a60248201527f7461784665652073686f756c6420626520696e2030202d203130000000000000604482015290519081900360640190fd5b600d55565b600e5490565b6001600160a01b03811660009081526004602052604081205460ff1615610b1c57506001600160a01b03811660009081526002602052604090205461079c565b6001600160a01b0382166000908152600160205260409020546106039061073f565b610b466111b0565b6000546001600160a01b03908116911614610b96576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105e15780601f106105b6576101008083540402835291602001916105e1565b60006105ff610c5d6111b0565b8461073085604051806060016040528060258152602001611f736025913960036000610c876111b0565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061154a565b60006105ff610cc56111b0565b84846112a0565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610d1d6111b0565b6000546001600160a01b03908116911614610d6d576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610dc95760405162461bcd60e51b8152600401808060200182810382526022815260200180611f256022913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff1615610e37576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205415610e91576001600160a01b038116600090815260016020526040902054610e779061073f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b610eff6111b0565b6000546001600160a01b03908116911614610f4f576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b6001600160a01b038116610f945760405162461bcd60e51b8152600401808060200182810382526026815260200180611daf6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610ff76111b0565b6000546001600160a01b03908116911614611047576040805162461bcd60e51b81526020600482018190526024820152600080516020611e68833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff166110b4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b6005548110156111ac57816001600160a01b0316600582815481106110d857fe5b6000918252602090912001546001600160a01b031614156111a45760058054600019810190811061110557fe5b600091825260209091200154600580546001600160a01b03909216918390811061112b57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600580548061117d57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556111ac565b6001016110b7565b5050565b3390565b6001600160a01b0383166111f95760405162461bcd60e51b8152600401808060200182810382526024815260200180611ed66024913960400191505060405180910390fd5b6001600160a01b03821661123e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611dd56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166112e55760405162461bcd60e51b8152600401808060200182810382526025815260200180611eb16025913960400191505060405180910390fd5b6001600160a01b03821661132a5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d626023913960400191505060405180910390fd5b600081116113695760405162461bcd60e51b8152600401808060200182810382526029815260200180611e886029913960400191505060405180910390fd5b611371610be0565b6001600160a01b0316836001600160a01b0316141580156113ab5750611395610be0565b6001600160a01b0316826001600160a01b031614155b156113f157600f548111156113f15760405162461bcd60e51b8152600401808060200182810382526028815260200180611df76028913960400191505060405180910390fd5b6001600160a01b03831660009081526004602052604090205460ff16801561143257506001600160a01b03821660009081526004602052604090205460ff16155b1561144757611442838383611746565b611545565b6001600160a01b03831660009081526004602052604090205460ff1615801561148857506001600160a01b03821660009081526004602052604090205460ff165b1561149857611442838383611886565b6001600160a01b03831660009081526004602052604090205460ff161580156114da57506001600160a01b03821660009081526004602052604090205460ff16155b156114ea57611442838383611950565b6001600160a01b03831660009081526004602052604090205460ff16801561152a57506001600160a01b03821660009081526004602052604090205460ff165b1561153a576114428383836119b5565b611545838383611950565b505050565b600081848411156115d95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561159e578181015183820152602001611586565b50505050905090810190601f1680156115cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006115ee611a49565b90925090506115fd8282611604565b9250505090565b600061164683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bac565b9392505050565b600082820183811015611646576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006116c48a600d54600e54611c11565b92509250925060006116d46115e1565b905060008060006116e78e878787611c66565b919e509c509a509598509396509194505050505091939550919395565b600061164683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061154a565b60006117506115e1565b9050600080600080600080611764886116a7565b95509550955095509550955060006117858883611cb690919063ffffffff16565b6001600160a01b038c166000908152600260205260409020549091506117ab908a611704565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546117da9088611704565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054611809908761164d565b6001600160a01b038b1660009081526001602052604090205561182e85828585611d0f565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006118906115e1565b90506000806000806000806118a4886116a7565b95509550955095509550955060006118c58883611cb690919063ffffffff16565b6001600160a01b038c166000908152600160205260409020549091506118eb9088611704565b6001600160a01b03808d16600090815260016020908152604080832094909455918d16815260029091522054611921908561164d565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611809908761164d565b600061195a6115e1565b905060008060008060008061196e886116a7565b955095509550955095509550600061198f8883611cb690919063ffffffff16565b6001600160a01b038c166000908152600160205260409020549091506117da9088611704565b60006119bf6115e1565b90506000806000806000806119d3886116a7565b95509550955095509550955060006119f48883611cb690919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150611a1a908a611704565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546118eb9088611704565b6007546006546000918291825b600554811015611b7a57826001600060058481548110611a7257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ad75750816002600060058481548110611ab057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611aee5760075460065494509450505050611ba8565b611b2e6001600060058481548110611b0257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611704565b9250611b706002600060058481548110611b4457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611704565b9150600101611a56565b50600654600754611b8a91611604565b821015611ba257600754600654935093505050611ba8565b90925090505b9091565b60008183611bfb5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561159e578181015183820152602001611586565b506000838581611c0757fe5b0495945050505050565b6000808080611c2b6064611c258989611cb6565b90611604565b90506000611c3e6064611c258a89611cb6565b90506000611c5682611c508b86611704565b90611704565b9992985090965090945050505050565b6000808080611c758886611cb6565b90506000611c838887611cb6565b90506000611c918888611cb6565b90506000611ca382611c508686611704565b939b939a50919850919650505050505050565b600082611cc557506000610603565b82820282848281611cd257fe5b04146116465760405162461bcd60e51b8152600401808060200182810382526021815260200180611e1f6021913960400191505060405180910390fd5b611d2883611c508660075461170490919063ffffffff16565b600755600854611d38908361164d565b600855600954611d48908261164d565b600955600654611d589082611704565b6006555050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736d61785478416d6f756e742073686f756c642062652067726561746572207468616e20353530303030653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d0f281c43cbe370c84f33dfa2190a77a39fc838e693e2abe98fc4bbe875b220c64736f6c634300060c0033

Deployed Bytecode Sourcemap

21000:12426:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21983:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22895:161;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22895:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;24006:87;;;:::i;:::-;;;;;;;;;;;;;;;;22260:95;;;:::i;33220:203::-;;;;;;;;;;;;;;;;-1:-1:-1;33220:203:0;;:::i;:::-;;23064:313;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23064:313:0;;;;;;;;;;;;;;;;;:::i;25030:253::-;;;;;;;;;;;;;;;;-1:-1:-1;25030:253:0;;:::i;32554:84::-;;;:::i;22169:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23385:218;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23385:218:0;;;;;;;;:::i;33032:176::-;;;;;;;;;;;;;;;;-1:-1:-1;33032:176:0;;:::i;24201:377::-;;;;;;;;;;;;;;;;-1:-1:-1;24201:377:0;;:::i;24105:88::-;;;:::i;24586:436::-;;;;;;;;;;;;;;;;-1:-1:-1;24586:436:0;;;;;;;;;:::i;32851:169::-;;;;;;;;;;;;;;;;-1:-1:-1;32851:169:0;;:::i;32646:86::-;;;:::i;22363:198::-;;;;;;;;;;;;;;;;-1:-1:-1;22363:198:0;-1:-1:-1;;;;;22363:198:0;;:::i;20446:148::-;;;:::i;19804:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;19804:79:0;;;;;;;;;;;;;;22074:87;;;:::i;23611:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23611:269:0;;;;;;;;:::i;22569:167::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22569:167:0;;;;;;;;:::i;23888:110::-;;;;;;;;;;;;;;;;-1:-1:-1;23888:110:0;-1:-1:-1;;;;;23888:110:0;;:::i;22744:143::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22744:143:0;;;;;;;;;;:::i;25291:443::-;;;;;;;;;;;;;;;;-1:-1:-1;25291:443:0;-1:-1:-1;;;;;25291:443:0;;:::i;20749:244::-;;;;;;;;;;;;;;;;-1:-1:-1;20749:244:0;-1:-1:-1;;;;;20749:244:0;;:::i;25742:478::-;;;;;;;;;;;;;;;;-1:-1:-1;25742:478:0;-1:-1:-1;;;;;25742:478:0;;:::i;21983:83::-;22053:5;22046:12;;;;;;;;-1:-1:-1;;22046:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22020:13;;22046:12;;22053:5;;22046:12;;22053:5;22046:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21983:83;:::o;22895:161::-;22970:4;22987:39;22996:12;:10;:12::i;:::-;23010:7;23019:6;22987:8;:39::i;:::-;-1:-1:-1;23044:4:0;22895:161;;;;;:::o;24006:87::-;24075:10;;24006:87;:::o;22260:95::-;22340:7;;22260:95;:::o;33220:203::-;20026:12;:10;:12::i;:::-;20016:6;;-1:-1:-1;;;;;20016:6:0;;;:22;;;20008:67;;;;;-1:-1:-1;;;20008:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20008:67:0;;;;;;;;;;;;;;;33321:8:::1;33306:11;:23;;33298:80;;;;-1:-1:-1::0;;;33298:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33389:12;:26:::0;33220:203::o;23064:313::-;23162:4;23179:36;23189:6;23197:9;23208:6;23179:9;:36::i;:::-;23226:121;23235:6;23243:12;:10;:12::i;:::-;23257:89;23295:6;23257:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23257:19:0;;;;;;:11;:19;;;;;;23277:12;:10;:12::i;:::-;-1:-1:-1;;;;;23257:33:0;;;;;;;;;;;;-1:-1:-1;23257:33:0;;;:89;:37;:89::i;:::-;23226:8;:121::i;:::-;-1:-1:-1;23365:4:0;23064:313;;;;;:::o;25030:253::-;25096:7;25135;;25124;:18;;25116:73;;;;-1:-1:-1;;;25116:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25200:19;25223:10;:8;:10::i;:::-;25200:33;-1:-1:-1;25251:24:0;:7;25200:33;25251:11;:24::i;:::-;25244:31;;;25030:253;;;;:::o;32554:84::-;32623:7;;32554:84;:::o;22169:83::-;22235:9;;;;22169:83;:::o;23385:218::-;23473:4;23490:83;23499:12;:10;:12::i;:::-;23513:7;23522:50;23561:10;23522:11;:25;23534:12;:10;:12::i;:::-;-1:-1:-1;;;;;23522:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;23522:25:0;;;:34;;;;;;;;;;;:38;:50::i;33032:176::-;20026:12;:10;:12::i;:::-;20016:6;;-1:-1:-1;;;;;20016:6:0;;;:22;;;20008:67;;;;;-1:-1:-1;;;20008:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20008:67:0;;;;;;;;;;;;;;;33137:2:::1;33126:7;:13;;33102:69;;;::::0;;-1:-1:-1;;;33102:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33182:8;:18:::0;33032:176::o;24201:377::-;24253:14;24270:12;:10;:12::i;:::-;-1:-1:-1;;;;;24302:19:0;;;;;;:11;:19;;;;;;24253:29;;-1:-1:-1;24302:19:0;;24301:20;24293:77;;;;-1:-1:-1;;;24293:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24382:15;24406:19;24417:7;24406:10;:19::i;:::-;-1:-1:-1;;;;;;;;;24454:15:0;;;;;;:7;:15;;;;;;24381:44;;-1:-1:-1;24454:28:0;;:15;-1:-1:-1;24381:44:0;24454:19;:28::i;:::-;-1:-1:-1;;;;;24436:15:0;;;;;;:7;:15;;;;;:46;24503:7;;:20;;24515:7;24503:11;:20::i;:::-;24493:7;:30;24547:10;;:23;;24562:7;24547:14;:23::i;:::-;24534:10;:36;-1:-1:-1;;;24201:377:0:o;24105:88::-;24174:11;;24105:88;:::o;24586:436::-;24676:7;24715;;24704;:18;;24696:62;;;;;-1:-1:-1;;;24696:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24774:17;24769:246;;24809:15;24833:19;24844:7;24833:10;:19::i;:::-;-1:-1:-1;24808:44:0;;-1:-1:-1;24867:14:0;;-1:-1:-1;;;;;24867:14:0;24769:246;24916:23;24947:19;24958:7;24947:10;:19::i;:::-;-1:-1:-1;24914:52:0;;-1:-1:-1;24981:22:0;;-1:-1:-1;;;;;24981:22:0;32851:169;20026:12;:10;:12::i;:::-;20016:6;;-1:-1:-1;;;;;20016:6:0;;;:22;;;20008:67;;;;;-1:-1:-1;;;20008:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20008:67:0;;;;;;;;;;;;;;;32952:2:::1;32942:6;:12;;32919:66;;;::::0;;-1:-1:-1;;;32919:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32996:7;:16:::0;32851:169::o;32646:86::-;32716:8;;32646:86;:::o;22363:198::-;-1:-1:-1;;;;;22453:20:0;;22429:7;22453:20;;;:11;:20;;;;;;;;22449:49;;;-1:-1:-1;;;;;;22482:16:0;;;;;;:7;:16;;;;;;22475:23;;22449:49;-1:-1:-1;;;;;22536:16:0;;;;;;:7;:16;;;;;;22516:37;;:19;:37::i;20446:148::-;20026:12;:10;:12::i;:::-;20016:6;;-1:-1:-1;;;;;20016:6:0;;;:22;;;20008:67;;;;;-1:-1:-1;;;20008:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20008:67:0;;;;;;;;;;;;;;;20553:1:::1;20537:6:::0;;20516:40:::1;::::0;-1:-1:-1;;;;;20537:6:0;;::::1;::::0;20516:40:::1;::::0;20553:1;;20516:40:::1;20584:1;20567:19:::0;;-1:-1:-1;;;;;;20567:19:0::1;::::0;;20446:148::o;19804:79::-;19842:7;19869:6;-1:-1:-1;;;;;19869:6:0;19804:79;:::o;22074:87::-;22146:7;22139:14;;;;;;;;-1:-1:-1;;22139:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22113:13;;22139:14;;22146:7;;22139:14;;22146:7;22139:14;;;;;;;;;;;;;;;;;;;;;;;;23611:269;23704:4;23721:129;23730:12;:10;:12::i;:::-;23744:7;23753:96;23792:15;23753:96;;;;;;;;;;;;;;;;;:11;:25;23765:12;:10;:12::i;:::-;-1:-1:-1;;;;;23753:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;23753:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;22569:167::-;22647:4;22664:42;22674:12;:10;:12::i;:::-;22688:9;22699:6;22664:9;:42::i;23888:110::-;-1:-1:-1;;;;;23970:20:0;23946:4;23970:20;;;:11;:20;;;;;;;;;23888:110::o;22744:143::-;-1:-1:-1;;;;;22852:18:0;;;22825:7;22852:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22744:143::o;25291:443::-;20026:12;:10;:12::i;:::-;20016:6;;-1:-1:-1;;;;;20016:6:0;;;:22;;;20008:67;;;;;-1:-1:-1;;;20008:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20008:67:0;;;;;;;;;;;;;;;25383:42:::1;-1:-1:-1::0;;;;;25372:53:0;::::1;;;25364:100;;;;-1:-1:-1::0;;;25364:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;25484:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25483:21;25475:61;;;::::0;;-1:-1:-1;;;25475:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25550:16:0;::::1;25569:1;25550:16:::0;;;:7:::1;:16;::::0;;;;;:20;25547:108:::1;;-1:-1:-1::0;;;;;25626:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25606:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25587:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25547:108:::1;-1:-1:-1::0;;;;;25665:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25665:27:0::1;25688:4;25665:27:::0;;::::1;::::0;;;25703:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25703:23:0::1;::::0;;::::1;::::0;;25291:443::o;20749:244::-;20026:12;:10;:12::i;:::-;20016:6;;-1:-1:-1;;;;;20016:6:0;;;:22;;;20008:67;;;;;-1:-1:-1;;;20008:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20008:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20838:22:0;::::1;20830:73;;;;-1:-1:-1::0;;;20830:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20940:6;::::0;;20919:38:::1;::::0;-1:-1:-1;;;;;20919:38:0;;::::1;::::0;20940:6;::::1;::::0;20919:38:::1;::::0;::::1;20968:6;:17:::0;;-1:-1:-1;;;;;;20968:17:0::1;-1:-1:-1::0;;;;;20968:17:0;;;::::1;::::0;;;::::1;::::0;;20749:244::o;25742:478::-;20026:12;:10;:12::i;:::-;20016:6;;-1:-1:-1;;;;;20016:6:0;;;:22;;;20008:67;;;;;-1:-1:-1;;;20008:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20008:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25823:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25815:60;;;::::0;;-1:-1:-1;;;25815:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25891:9;25886:327;25910:9;:16:::0;25906:20;::::1;25886:327;;;25968:7;-1:-1:-1::0;;;;;25952:23:0::1;:9;25962:1;25952:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25952:12:0::1;:23;25948:254;;;26011:9;26021:16:::0;;-1:-1:-1;;26021:20:0;;;26011:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25996:9:::1;:12:::0;;-1:-1:-1;;;;;26011:31:0;;::::1;::::0;26006:1;;25996:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25996:46:0::1;-1:-1:-1::0;;;;;25996:46:0;;::::1;;::::0;;26061:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;26100:11:::1;:20:::0;;;;:28;;-1:-1:-1;;26100:28:0::1;::::0;;26147:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26147:15:0;;;;;-1:-1:-1;;;;;;26147:15:0::1;::::0;;;;;26181:5:::1;;25948:254;25928:3;;25886:327;;;;25742:478:::0;:::o;4262:106::-;4350:10;4262:106;:::o;26228:337::-;-1:-1:-1;;;;;26321:19:0;;26313:68;;;;-1:-1:-1;;;26313:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26400:21:0;;26392:68;;;;-1:-1:-1;;;26392:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26473:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26525:32;;;;;;;;;;;;;;;;;26228:337;;;:::o;26573:1096::-;-1:-1:-1;;;;;26670:20:0;;26662:70;;;;-1:-1:-1;;;26662:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26751:23:0;;26743:71;;;;-1:-1:-1;;;26743:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26842:1;26833:6;:10;26825:64;;;;-1:-1:-1;;;26825:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26923:7;:5;:7::i;:::-;-1:-1:-1;;;;;26913:17:0;:6;-1:-1:-1;;;;;26913:17:0;;;:41;;;;;26947:7;:5;:7::i;:::-;-1:-1:-1;;;;;26934:20:0;:9;-1:-1:-1;;;;;26934:20:0;;;26913:41;26910:134;;;26987:12;;26977:6;:22;;26969:75;;;;-1:-1:-1;;;26969:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27069:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27093:22:0;;;;;;:11;:22;;;;;;;;27092:23;27069:46;27065:597;;;27132:48;27154:6;27162:9;27173:6;27132:21;:48::i;:::-;27065:597;;;-1:-1:-1;;;;;27203:19:0;;;;;;:11;:19;;;;;;;;27202:20;:46;;;;-1:-1:-1;;;;;;27226:22:0;;;;;;:11;:22;;;;;;;;27202:46;27198:464;;;27265:46;27285:6;27293:9;27304:6;27265:19;:46::i;27198:464::-;-1:-1:-1;;;;;27334:19:0;;;;;;:11;:19;;;;;;;;27333:20;:47;;;;-1:-1:-1;;;;;;27358:22:0;;;;;;:11;:22;;;;;;;;27357:23;27333:47;27329:333;;;27397:44;27415:6;27423:9;27434:6;27397:17;:44::i;27329:333::-;-1:-1:-1;;;;;27463:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27486:22:0;;;;;;:11;:22;;;;;;;;27463:45;27459:203;;;27525:48;27547:6;27555:9;27566:6;27525:21;:48::i;27459:203::-;27606:44;27624:6;27632:9;27643:6;27606:17;:44::i;:::-;26573:1096;;;:::o;9080:192::-;9166:7;9202:12;9194:6;;;;9186:29;;;;-1:-1:-1;;;9186:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9238:5:0;;;9080:192::o;31810:163::-;31851:7;31872:15;31889;31908:19;:17;:19::i;:::-;31871:56;;-1:-1:-1;31871:56:0;-1:-1:-1;31945:20:0;31871:56;;31945:11;:20::i;:::-;31938:27;;;;31810:163;:::o;10478:132::-;10536:7;10563:39;10567:1;10570;10563:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10556:46;10478:132;-1:-1:-1;;;10478:132:0:o;8177:181::-;8235:7;8267:5;;;8291:6;;;;8283:46;;;;;-1:-1:-1;;;8283:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30558:468;30617:7;30626;30635;30644;30653;30662;30683:23;30708:12;30722:13;30739:39;30751:7;30760;;30769:8;;30739:11;:39::i;:::-;30682:96;;;;;;30789:19;30812:10;:8;:10::i;:::-;30789:33;;30834:15;30851:23;30876:12;30892:46;30904:7;30913:4;30919:5;30926:11;30892;:46::i;:::-;30833:105;;-1:-1:-1;30833:105:0;-1:-1:-1;30833:105:0;-1:-1:-1;30989:15:0;;-1:-1:-1;31006:4:0;;-1:-1:-1;31012:5:0;;-1:-1:-1;;;;;30558:468:0;;;;;;;:::o;8641:136::-;8699:7;8726:43;8730:1;8733;8726:43;;;;;;;;;;;;;;;;;:3;:43::i;28920:632::-;29022:19;29045:10;:8;:10::i;:::-;29022:33;;29067:15;29084:23;29109:12;29123:23;29148:12;29162:13;29179:19;29190:7;29179:10;:19::i;:::-;29066:132;;;;;;;;;;;;29209:13;29226:22;29236:11;29226:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;29277:15:0;;;;;;:7;:15;;;;;;29209:39;;-1:-1:-1;29277:28:0;;29297:7;29277:19;:28::i;:::-;-1:-1:-1;;;;;29259:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29334:7;:15;;;;:28;;29354:7;29334:19;:28::i;:::-;-1:-1:-1;;;;;29316:15:0;;;;;;;:7;:15;;;;;;:46;;;;29394:18;;;;;;;:39;;29417:15;29394:22;:39::i;:::-;-1:-1:-1;;;;;29373:18:0;;;;;;:7;:18;;;;;:60;29447:37;29459:4;29465:5;29472:4;29478:5;29447:11;:37::i;:::-;29517:9;-1:-1:-1;;;;;29500:44:0;29509:6;-1:-1:-1;;;;;29500:44:0;;29528:15;29500:44;;;;;;;;;;;;;;;;;;28920:632;;;;;;;;;;;:::o;28260:652::-;28360:19;28383:10;:8;:10::i;:::-;28360:33;;28405:15;28422:23;28447:12;28461:23;28486:12;28500:13;28517:19;28528:7;28517:10;:19::i;:::-;28404:132;;;;;;;;;;;;28547:13;28564:22;28574:11;28564:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;28615:15:0;;;;;;:7;:15;;;;;;28547:39;;-1:-1:-1;28615:28:0;;28635:7;28615:19;:28::i;:::-;-1:-1:-1;;;;;28597:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28675:18;;;;;:7;:18;;;;;:39;;28698:15;28675:22;:39::i;:::-;-1:-1:-1;;;;;28654:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28746:7;:18;;;;:39;;28769:15;28746:22;:39::i;27677:575::-;27775:19;27798:10;:8;:10::i;:::-;27775:33;;27820:15;27837:23;27862:12;27876:23;27901:12;27915:13;27932:19;27943:7;27932:10;:19::i;:::-;27819:132;;;;;;;;;;;;27962:13;27979:22;27989:11;27979:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;28030:15:0;;;;;;:7;:15;;;;;;27962:39;;-1:-1:-1;28030:28:0;;28050:7;28030:19;:28::i;29560:708::-;29662:19;29685:10;:8;:10::i;:::-;29662:33;;29707:15;29724:23;29749:12;29763:23;29788:12;29802:13;29819:19;29830:7;29819:10;:19::i;:::-;29706:132;;;;;;;;;;;;29849:13;29866:22;29876:11;29866:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;29917:15:0;;;;;;:7;:15;;;;;;29849:39;;-1:-1:-1;29917:28:0;;29937:7;29917:19;:28::i;:::-;-1:-1:-1;;;;;29899:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29974:7;:15;;;;:28;;29994:7;29974:19;:28::i;31981:561::-;32078:7;;32114;;32031;;;;;32138:289;32162:9;:16;32158:20;;32138:289;;;32228:7;32204;:21;32212:9;32222:1;32212:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32212:12:0;32204:21;;;;;;;;;;;;;:31;;:66;;;32263:7;32239;:21;32247:9;32257:1;32247:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32247:12:0;32239:21;;;;;;;;;;;;;:31;32204:66;32200:97;;;32280:7;;32289;;32272:25;;;;;;;;;32200:97;32322:34;32334:7;:21;32342:9;32352:1;32342:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32342:12:0;32334:21;;;;;;;;;;;;;32322:7;;:11;:34::i;:::-;32312:44;;32381:34;32393:7;:21;32401:9;32411:1;32401:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32401:12:0;32393:21;;;;;;;;;;;;;32381:7;;:11;:34::i;:::-;32371:44;-1:-1:-1;32180:3:0;;32138:289;;;-1:-1:-1;32463:7:0;;32451;;:20;;:11;:20::i;:::-;32441:7;:30;32437:61;;;32481:7;;32490;;32473:25;;;;;;;;32437:61;32517:7;;-1:-1:-1;32526:7:0;-1:-1:-1;31981:561:0;;;:::o;11106:278::-;11192:7;11227:12;11220:5;11212:28;;;;-1:-1:-1;;;11212:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11251:9;11267:1;11263;:5;;;;;;;11106:278;-1:-1:-1;;;;;11106:278:0:o;31034:351::-;31127:7;;;;31180:28;31204:3;31180:19;:7;31192:6;31180:11;:19::i;:::-;:23;;:28::i;:::-;31165:43;-1:-1:-1;31219:13:0;31235:29;31260:3;31235:20;:7;31247;31235:11;:20::i;:29::-;31219:45;-1:-1:-1;31275:23:0;31301:28;31219:45;31301:17;:7;31313:4;31301:11;:17::i;:::-;:21;;:28::i;:::-;31275:54;31365:4;;-1:-1:-1;31371:5:0;;-1:-1:-1;31034:351:0;;-1:-1:-1;;;;;31034:351:0:o;31393:409::-;31503:7;;;;31559:24;:7;31571:11;31559;:24::i;:::-;31541:42;-1:-1:-1;31594:12:0;31609:21;:4;31618:11;31609:8;:21::i;:::-;31594:36;-1:-1:-1;31641:13:0;31657:22;:5;31667:11;31657:9;:22::i;:::-;31641:38;-1:-1:-1;31690:23:0;31716:28;31641:38;31716:17;:7;31728:4;31716:11;:17::i;:28::-;31763:7;;;;-1:-1:-1;31789:4:0;;-1:-1:-1;31393:409:0;;-1:-1:-1;;;;;;;31393:409:0:o;9531:471::-;9589:7;9834:6;9830:47;;-1:-1:-1;9864:1:0;9857:8;;9830:47;9901:5;;;9905:1;9901;:5;:1;9925:5;;;;;:10;9917:56;;;;-1:-1:-1;;;9917:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30276:274;30384:28;30406:5;30384:17;30396:4;30384:7;;:11;;:17;;;;:::i;:28::-;30374:7;:38;30436:10;;:20;;30451:4;30436:14;:20::i;:::-;30423:10;:33;30481:11;;:22;;30497:5;30481:15;:22::i;:::-;30467:11;:36;30524:7;;:18;;30536:5;30524:11;:18::i;:::-;30514:7;:28;-1:-1:-1;;;;30276:274:0:o

Swarm Source

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