ETH Price: $3,897.20 (+0.34%)

Token

ERC-20: VIKGE (VIKGE)
 

Overview

Max Total Supply

1,000,000,000,000 VIKGE

Holders

131

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 12 Decimals)

Balance
5,858,778,946.817960932699 VIKGE

Value
$0.00
0x91158c497f8ca72e44096bb83511ae2e71189d4f
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:
VIKGE

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 
*/

// VIKGE, Doge the Viking         wow such battle     

//               glory for Wowdin                          much shibehalla

//     such conquer                                                                 glory for unithor

// dogetheviking.com (VIKGE)
// DOGE'S Viking Alter Ego Official ERC 20 Contract
// VIKGE protects doge, it’s doge but Viking
// VIKGE, a brave new wow shibe meme powered token

// Join the chat!

// Website: https://dogetheviking.com
// E-mail: [email protected]
// Telegram: t.me/dogetheviking
// Twitter: https://twitter.com/VikingDogeToken
// Github: https://github.com/DogetheViking
// Medium: https://dogetheviking.medium.com/
// Reddit: https://reddit.com/r/VIKGE
// Discord: https://discord.gg/XPT6N6Afux
// Instagram: https://www.instagram.com/vikge_token/
// YouTube: https://www.youtube.com/channel/UCYc74V7YIeqn_U4FR3StBow

// wow
// so funny
// very informative
// much clear

// wow
// wow

//                      so much viking doge          so, very, wow, much, such,         and many

// Wow! much viking doge game! many tokens         so touchdown       very inclusive              Wow!

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;


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

    function _msgData() internal view virtual returns (bytes calldata) {
        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);
}


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) {
        // This method relies on 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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}


abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        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 VIKGE 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 constant _tTotal = 1000000000000 * 10**12;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'VIKGE';
    string private _symbol = 'VIKGE';
    uint8 private _decimals = 12;
    
    uint256 public _maxTxAmount = 5000000000 * 10**12;

    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 setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function reflect(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(!_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 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _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, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

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

    function _getTValues(uint256 tAmount) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.div(100).mul(2);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        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);
    }
}

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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","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":"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"}]

608060405269d3c21bcecceda10000006000196200001e9190620003f1565b6000196200002d919062000376565b6006556040518060400160405280600581526020017f56494b4745000000000000000000000000000000000000000000000000000000815250600890805190602001906200007d92919062000298565b506040518060400160405280600581526020017f56494b474500000000000000000000000000000000000000000000000000000081525060099080519060200190620000cb92919062000298565b50600c600a60006101000a81548160ff021916908360ff16021790555069010f0cf064dd59200000600b553480156200010357600080fd5b506000620001166200029060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060065460016000620001cb6200029060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002196200029060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda100000060405162000282919062000359565b60405180910390a3620004b6565b600033905090565b828054620002a690620003bb565b90600052602060002090601f016020900481019282620002ca576000855562000316565b82601f10620002e557805160ff191683800117855562000316565b8280016001018555821562000316579182015b8281111562000315578251825591602001919060010190620002f8565b5b50905062000325919062000329565b5090565b5b80821115620003445760008160009055506001016200032a565b5090565b6200035381620003b1565b82525050565b600060208201905062000370600083018462000348565b92915050565b60006200038382620003b1565b91506200039083620003b1565b925082821015620003a657620003a562000429565b5b828203905092915050565b6000819050919050565b60006002820490506001821680620003d457607f821691505b60208210811415620003eb57620003ea62000487565b5b50919050565b6000620003fe82620003b1565b91506200040b83620003b1565b9250826200041e576200041d62000458565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613b8880620004c66000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063cba0e9961161007c578063cba0e996146103ca578063d543dbeb146103fa578063dd62ed3e14610416578063f2cc0c1814610446578063f2fde38b14610462578063f84354f11461047e5761014d565b8063715018a6146103065780637d1db4a5146103105780638da5cb5b1461032e57806395d89b411461034c578063a457c2d71461036a578063a9059cbb1461039a5761014d565b806323b872dd1161011557806323b872dd146101f85780632d83811914610228578063313ce5671461025857806339509351146102765780634549b039146102a657806370a08231146102d65761014d565b8063053ab1821461015257806306fdde031461016e578063095ea7b31461018c57806313114a9d146101bc57806318160ddd146101da575b600080fd5b61016c60048036038101906101679190612f22565b61049a565b005b610176610614565b604051610183919061321c565b60405180910390f35b6101a660048036038101906101a19190612ee6565b6106a6565b6040516101b39190613201565b60405180910390f35b6101c46106c4565b6040516101d191906133fe565b60405180910390f35b6101e26106ce565b6040516101ef91906133fe565b60405180910390f35b610212600480360381019061020d9190612e97565b6106e0565b60405161021f9190613201565b60405180910390f35b610242600480360381019061023d9190612f22565b6107b9565b60405161024f91906133fe565b60405180910390f35b610260610827565b60405161026d9190613419565b60405180910390f35b610290600480360381019061028b9190612ee6565b61083e565b60405161029d9190613201565b60405180910390f35b6102c060048036038101906102bb9190612f4b565b6108f1565b6040516102cd91906133fe565b60405180910390f35b6102f060048036038101906102eb9190612e32565b61097b565b6040516102fd91906133fe565b60405180910390f35b61030e610a66565b005b610318610ba0565b60405161032591906133fe565b60405180910390f35b610336610ba6565b60405161034391906131e6565b60405180910390f35b610354610bcf565b604051610361919061321c565b60405180910390f35b610384600480360381019061037f9190612ee6565b610c61565b6040516103919190613201565b60405180910390f35b6103b460048036038101906103af9190612ee6565b610d2e565b6040516103c19190613201565b60405180910390f35b6103e460048036038101906103df9190612e32565b610d4c565b6040516103f19190613201565b60405180910390f35b610414600480360381019061040f9190612f22565b610da2565b005b610430600480360381019061042b9190612e5b565b610e57565b60405161043d91906133fe565b60405180910390f35b610460600480360381019061045b9190612e32565b610ede565b005b61047c60048036038101906104779190612e32565b611179565b005b61049860048036038101906104939190612e32565b611322565b005b60006104a46116f0565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052a906133de565b60405180910390fd5b600061053e836116f8565b50505050905061059681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506105ee8160065461175090919063ffffffff16565b6006819055506106098360075461179a90919063ffffffff16565b600781905550505050565b606060088054610623906135ed565b80601f016020809104026020016040519081016040528092919081815260200182805461064f906135ed565b801561069c5780601f106106715761010080835404028352916020019161069c565b820191906000526020600020905b81548152906001019060200180831161067f57829003601f168201915b5050505050905090565b60006106ba6106b36116f0565b84846117f8565b6001905092915050565b6000600754905090565b600069d3c21bcecceda1000000905090565b60006106ed8484846119c3565b6107ae846106f96116f0565b6107a985604051806060016040528060288152602001613b0660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061075f6116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9b9092919063ffffffff16565b6117f8565b600190509392505050565b6000600654821115610800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f79061325e565b60405180910390fd5b600061080a611eff565b905061081f8184611f2a90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b60006108e761084b6116f0565b846108e2856003600061085c6116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b6117f8565b6001905092915050565b600069d3c21bcecceda1000000831115610940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610937906132fe565b60405180910390fd5b8161095f576000610950846116f8565b50505050905080915050610975565b600061096a846116f8565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a1657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610a61565b610a5e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b9565b90505b919050565b610a6e6116f0565b73ffffffffffffffffffffffffffffffffffffffff16610a8c610ba6565b73ffffffffffffffffffffffffffffffffffffffff1614610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad99061335e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610bde906135ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0a906135ed565b8015610c575780601f10610c2c57610100808354040283529160200191610c57565b820191906000526020600020905b815481529060010190602001808311610c3a57829003601f168201915b5050505050905090565b6000610d24610c6e6116f0565b84610d1f85604051806060016040528060258152602001613b2e6025913960036000610c986116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9b9092919063ffffffff16565b6117f8565b6001905092915050565b6000610d42610d3b6116f0565b84846119c3565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610daa6116f0565b73ffffffffffffffffffffffffffffffffffffffff16610dc8610ba6565b73ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e159061335e565b60405180910390fd5b610e4e6064610e408369d3c21bcecceda1000000611f7490919063ffffffff16565b611f2a90919063ffffffff16565b600b8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ee66116f0565b73ffffffffffffffffffffffffffffffffffffffff16610f04610ba6565b73ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f519061335e565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde906132de565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110bb57611077600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b9565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111816116f0565b73ffffffffffffffffffffffffffffffffffffffff1661119f610ba6565b73ffffffffffffffffffffffffffffffffffffffff16146111f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ec9061335e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c9061327e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61132a6116f0565b73ffffffffffffffffffffffffffffffffffffffff16611348610ba6565b73ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113959061335e565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661142a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611421906132de565b60405180910390fd5b60005b6005805490508110156116ec578173ffffffffffffffffffffffffffffffffffffffff166005828154811061148b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116d957600560016005805490506114e69190613531565b8154811061151d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611582577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061169f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556116ec565b80806116e49061361f565b91505061142d565b5050565b600033905090565b600080600080600080600061170c88611fef565b91509150600061171a611eff565b9050600080600061172c8c8686612041565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600061179283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e9b565b905092915050565b60008082846117a99190613450565b9050838110156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e5906132be565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f906133be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf9061329e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119b691906133fe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a9061339e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a9061323e565b60405180910390fd5b60008111611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add9061337e565b60405180910390fd5b611aee610ba6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b5c5750611b2c610ba6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611ba757600b54811115611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d9061331e565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c4a5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c5f57611c5a83838361209f565b611e96565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d025750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d1757611d128383836122f2565b611e95565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611dbb5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dd057611dcb838383612545565b611e94565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e725750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e8757611e82838383612703565b611e93565b611e92838383612545565b5b5b5b5b505050565b6000838311158290611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda919061321c565b60405180910390fd5b5060008385611ef29190613531565b9050809150509392505050565b6000806000611f0c6129eb565b91509150611f238183611f2a90919063ffffffff16565b9250505090565b6000611f6c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d56565b905092915050565b600080831415611f875760009050611fe9565b60008284611f9591906134d7565b9050828482611fa491906134a6565b14611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb9061333e565b60405180910390fd5b809150505b92915050565b600080600061201b600261200d606487611f2a90919063ffffffff16565b611f7490919063ffffffff16565b90506000612032828661175090919063ffffffff16565b90508082935093505050915091565b60008060008061205a8588611f7490919063ffffffff16565b905060006120718688611f7490919063ffffffff16565b90506000612088828461175090919063ffffffff16565b905082818395509550955050505093509350939050565b60008060008060006120b0866116f8565b9450945094509450945061210c86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121a185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061223684600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122838382612db9565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122e091906133fe565b60405180910390a35050505050505050565b6000806000806000612303866116f8565b9450945094509450945061235f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123f482600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061248984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124d68382612db9565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253391906133fe565b60405180910390a35050505050505050565b6000806000806000612556866116f8565b945094509450945094506125b285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061264784600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126948382612db9565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126f191906133fe565b60405180910390a35050505050505050565b6000806000806000612714866116f8565b9450945094509450945061277086600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061280585600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061289a82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061292f84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061297c8382612db9565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129d991906133fe565b60405180910390a35050505050505050565b60008060006006549050600069d3c21bcecceda1000000905060005b600580549050811015612d0957826001600060058481548110612a53577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612b675750816002600060058481548110612aff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612b865760065469d3c21bcecceda100000094509450505050612d52565b612c3c6001600060058481548110612bc7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461175090919063ffffffff16565b9250612cf46002600060058481548110612c7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361175090919063ffffffff16565b91508080612d019061361f565b915050612a07565b50612d2969d3c21bcecceda1000000600654611f2a90919063ffffffff16565b821015612d495760065469d3c21bcecceda1000000935093505050612d52565b81819350935050505b9091565b60008083118290612d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d94919061321c565b60405180910390fd5b5060008385612dac91906134a6565b9050809150509392505050565b612dce8260065461175090919063ffffffff16565b600681905550612de98160075461179a90919063ffffffff16565b6007819055505050565b600081359050612e0281613ac0565b92915050565b600081359050612e1781613ad7565b92915050565b600081359050612e2c81613aee565b92915050565b600060208284031215612e4457600080fd5b6000612e5284828501612df3565b91505092915050565b60008060408385031215612e6e57600080fd5b6000612e7c85828601612df3565b9250506020612e8d85828601612df3565b9150509250929050565b600080600060608486031215612eac57600080fd5b6000612eba86828701612df3565b9350506020612ecb86828701612df3565b9250506040612edc86828701612e1d565b9150509250925092565b60008060408385031215612ef957600080fd5b6000612f0785828601612df3565b9250506020612f1885828601612e1d565b9150509250929050565b600060208284031215612f3457600080fd5b6000612f4284828501612e1d565b91505092915050565b60008060408385031215612f5e57600080fd5b6000612f6c85828601612e1d565b9250506020612f7d85828601612e08565b9150509250929050565b612f9081613565565b82525050565b612f9f81613577565b82525050565b6000612fb082613434565b612fba818561343f565b9350612fca8185602086016135ba565b612fd3816136f5565b840191505092915050565b6000612feb60238361343f565b9150612ff682613706565b604082019050919050565b600061300e602a8361343f565b915061301982613755565b604082019050919050565b600061303160268361343f565b915061303c826137a4565b604082019050919050565b600061305460228361343f565b915061305f826137f3565b604082019050919050565b6000613077601b8361343f565b915061308282613842565b602082019050919050565b600061309a601b8361343f565b91506130a58261386b565b602082019050919050565b60006130bd601f8361343f565b91506130c882613894565b602082019050919050565b60006130e060288361343f565b91506130eb826138bd565b604082019050919050565b600061310360218361343f565b915061310e8261390c565b604082019050919050565b600061312660208361343f565b91506131318261395b565b602082019050919050565b600061314960298361343f565b915061315482613984565b604082019050919050565b600061316c60258361343f565b9150613177826139d3565b604082019050919050565b600061318f60248361343f565b915061319a82613a22565b604082019050919050565b60006131b2602c8361343f565b91506131bd82613a71565b604082019050919050565b6131d1816135a3565b82525050565b6131e0816135ad565b82525050565b60006020820190506131fb6000830184612f87565b92915050565b60006020820190506132166000830184612f96565b92915050565b600060208201905081810360008301526132368184612fa5565b905092915050565b6000602082019050818103600083015261325781612fde565b9050919050565b6000602082019050818103600083015261327781613001565b9050919050565b6000602082019050818103600083015261329781613024565b9050919050565b600060208201905081810360008301526132b781613047565b9050919050565b600060208201905081810360008301526132d78161306a565b9050919050565b600060208201905081810360008301526132f78161308d565b9050919050565b60006020820190508181036000830152613317816130b0565b9050919050565b60006020820190508181036000830152613337816130d3565b9050919050565b60006020820190508181036000830152613357816130f6565b9050919050565b6000602082019050818103600083015261337781613119565b9050919050565b600060208201905081810360008301526133978161313c565b9050919050565b600060208201905081810360008301526133b78161315f565b9050919050565b600060208201905081810360008301526133d781613182565b9050919050565b600060208201905081810360008301526133f7816131a5565b9050919050565b600060208201905061341360008301846131c8565b92915050565b600060208201905061342e60008301846131d7565b92915050565b600081519050919050565b600082825260208201905092915050565b600061345b826135a3565b9150613466836135a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561349b5761349a613668565b5b828201905092915050565b60006134b1826135a3565b91506134bc836135a3565b9250826134cc576134cb613697565b5b828204905092915050565b60006134e2826135a3565b91506134ed836135a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561352657613525613668565b5b828202905092915050565b600061353c826135a3565b9150613547836135a3565b92508282101561355a57613559613668565b5b828203905092915050565b600061357082613583565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156135d85780820151818401526020810190506135bd565b838111156135e7576000848401525b50505050565b6000600282049050600182168061360557607f821691505b60208210811415613619576136186136c6565b5b50919050565b600061362a826135a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561365d5761365c613668565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b613ac981613565565b8114613ad457600080fd5b50565b613ae081613577565b8114613aeb57600080fd5b50565b613af7816135a3565b8114613b0257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202e61e8bf8f7677861de254bb2617508866e79522d7ef1d75bffad41f8baa804464736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063cba0e9961161007c578063cba0e996146103ca578063d543dbeb146103fa578063dd62ed3e14610416578063f2cc0c1814610446578063f2fde38b14610462578063f84354f11461047e5761014d565b8063715018a6146103065780637d1db4a5146103105780638da5cb5b1461032e57806395d89b411461034c578063a457c2d71461036a578063a9059cbb1461039a5761014d565b806323b872dd1161011557806323b872dd146101f85780632d83811914610228578063313ce5671461025857806339509351146102765780634549b039146102a657806370a08231146102d65761014d565b8063053ab1821461015257806306fdde031461016e578063095ea7b31461018c57806313114a9d146101bc57806318160ddd146101da575b600080fd5b61016c60048036038101906101679190612f22565b61049a565b005b610176610614565b604051610183919061321c565b60405180910390f35b6101a660048036038101906101a19190612ee6565b6106a6565b6040516101b39190613201565b60405180910390f35b6101c46106c4565b6040516101d191906133fe565b60405180910390f35b6101e26106ce565b6040516101ef91906133fe565b60405180910390f35b610212600480360381019061020d9190612e97565b6106e0565b60405161021f9190613201565b60405180910390f35b610242600480360381019061023d9190612f22565b6107b9565b60405161024f91906133fe565b60405180910390f35b610260610827565b60405161026d9190613419565b60405180910390f35b610290600480360381019061028b9190612ee6565b61083e565b60405161029d9190613201565b60405180910390f35b6102c060048036038101906102bb9190612f4b565b6108f1565b6040516102cd91906133fe565b60405180910390f35b6102f060048036038101906102eb9190612e32565b61097b565b6040516102fd91906133fe565b60405180910390f35b61030e610a66565b005b610318610ba0565b60405161032591906133fe565b60405180910390f35b610336610ba6565b60405161034391906131e6565b60405180910390f35b610354610bcf565b604051610361919061321c565b60405180910390f35b610384600480360381019061037f9190612ee6565b610c61565b6040516103919190613201565b60405180910390f35b6103b460048036038101906103af9190612ee6565b610d2e565b6040516103c19190613201565b60405180910390f35b6103e460048036038101906103df9190612e32565b610d4c565b6040516103f19190613201565b60405180910390f35b610414600480360381019061040f9190612f22565b610da2565b005b610430600480360381019061042b9190612e5b565b610e57565b60405161043d91906133fe565b60405180910390f35b610460600480360381019061045b9190612e32565b610ede565b005b61047c60048036038101906104779190612e32565b611179565b005b61049860048036038101906104939190612e32565b611322565b005b60006104a46116f0565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052a906133de565b60405180910390fd5b600061053e836116f8565b50505050905061059681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506105ee8160065461175090919063ffffffff16565b6006819055506106098360075461179a90919063ffffffff16565b600781905550505050565b606060088054610623906135ed565b80601f016020809104026020016040519081016040528092919081815260200182805461064f906135ed565b801561069c5780601f106106715761010080835404028352916020019161069c565b820191906000526020600020905b81548152906001019060200180831161067f57829003601f168201915b5050505050905090565b60006106ba6106b36116f0565b84846117f8565b6001905092915050565b6000600754905090565b600069d3c21bcecceda1000000905090565b60006106ed8484846119c3565b6107ae846106f96116f0565b6107a985604051806060016040528060288152602001613b0660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061075f6116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9b9092919063ffffffff16565b6117f8565b600190509392505050565b6000600654821115610800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f79061325e565b60405180910390fd5b600061080a611eff565b905061081f8184611f2a90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b60006108e761084b6116f0565b846108e2856003600061085c6116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b6117f8565b6001905092915050565b600069d3c21bcecceda1000000831115610940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610937906132fe565b60405180910390fd5b8161095f576000610950846116f8565b50505050905080915050610975565b600061096a846116f8565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a1657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610a61565b610a5e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b9565b90505b919050565b610a6e6116f0565b73ffffffffffffffffffffffffffffffffffffffff16610a8c610ba6565b73ffffffffffffffffffffffffffffffffffffffff1614610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad99061335e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610bde906135ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0a906135ed565b8015610c575780601f10610c2c57610100808354040283529160200191610c57565b820191906000526020600020905b815481529060010190602001808311610c3a57829003601f168201915b5050505050905090565b6000610d24610c6e6116f0565b84610d1f85604051806060016040528060258152602001613b2e6025913960036000610c986116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9b9092919063ffffffff16565b6117f8565b6001905092915050565b6000610d42610d3b6116f0565b84846119c3565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610daa6116f0565b73ffffffffffffffffffffffffffffffffffffffff16610dc8610ba6565b73ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e159061335e565b60405180910390fd5b610e4e6064610e408369d3c21bcecceda1000000611f7490919063ffffffff16565b611f2a90919063ffffffff16565b600b8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ee66116f0565b73ffffffffffffffffffffffffffffffffffffffff16610f04610ba6565b73ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f519061335e565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde906132de565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110bb57611077600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b9565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111816116f0565b73ffffffffffffffffffffffffffffffffffffffff1661119f610ba6565b73ffffffffffffffffffffffffffffffffffffffff16146111f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ec9061335e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c9061327e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61132a6116f0565b73ffffffffffffffffffffffffffffffffffffffff16611348610ba6565b73ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113959061335e565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661142a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611421906132de565b60405180910390fd5b60005b6005805490508110156116ec578173ffffffffffffffffffffffffffffffffffffffff166005828154811061148b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116d957600560016005805490506114e69190613531565b8154811061151d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611582577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061169f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556116ec565b80806116e49061361f565b91505061142d565b5050565b600033905090565b600080600080600080600061170c88611fef565b91509150600061171a611eff565b9050600080600061172c8c8686612041565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600061179283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e9b565b905092915050565b60008082846117a99190613450565b9050838110156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e5906132be565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f906133be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf9061329e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119b691906133fe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a9061339e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a9061323e565b60405180910390fd5b60008111611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add9061337e565b60405180910390fd5b611aee610ba6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b5c5750611b2c610ba6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611ba757600b54811115611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d9061331e565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c4a5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c5f57611c5a83838361209f565b611e96565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d025750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d1757611d128383836122f2565b611e95565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611dbb5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dd057611dcb838383612545565b611e94565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e725750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e8757611e82838383612703565b611e93565b611e92838383612545565b5b5b5b5b505050565b6000838311158290611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda919061321c565b60405180910390fd5b5060008385611ef29190613531565b9050809150509392505050565b6000806000611f0c6129eb565b91509150611f238183611f2a90919063ffffffff16565b9250505090565b6000611f6c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d56565b905092915050565b600080831415611f875760009050611fe9565b60008284611f9591906134d7565b9050828482611fa491906134a6565b14611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb9061333e565b60405180910390fd5b809150505b92915050565b600080600061201b600261200d606487611f2a90919063ffffffff16565b611f7490919063ffffffff16565b90506000612032828661175090919063ffffffff16565b90508082935093505050915091565b60008060008061205a8588611f7490919063ffffffff16565b905060006120718688611f7490919063ffffffff16565b90506000612088828461175090919063ffffffff16565b905082818395509550955050505093509350939050565b60008060008060006120b0866116f8565b9450945094509450945061210c86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121a185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061223684600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122838382612db9565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122e091906133fe565b60405180910390a35050505050505050565b6000806000806000612303866116f8565b9450945094509450945061235f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123f482600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061248984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124d68382612db9565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253391906133fe565b60405180910390a35050505050505050565b6000806000806000612556866116f8565b945094509450945094506125b285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061264784600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126948382612db9565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126f191906133fe565b60405180910390a35050505050505050565b6000806000806000612714866116f8565b9450945094509450945061277086600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061280585600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061289a82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061292f84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061297c8382612db9565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129d991906133fe565b60405180910390a35050505050505050565b60008060006006549050600069d3c21bcecceda1000000905060005b600580549050811015612d0957826001600060058481548110612a53577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612b675750816002600060058481548110612aff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612b865760065469d3c21bcecceda100000094509450505050612d52565b612c3c6001600060058481548110612bc7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461175090919063ffffffff16565b9250612cf46002600060058481548110612c7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361175090919063ffffffff16565b91508080612d019061361f565b915050612a07565b50612d2969d3c21bcecceda1000000600654611f2a90919063ffffffff16565b821015612d495760065469d3c21bcecceda1000000935093505050612d52565b81819350935050505b9091565b60008083118290612d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d94919061321c565b60405180910390fd5b5060008385612dac91906134a6565b9050809150509392505050565b612dce8260065461175090919063ffffffff16565b600681905550612de98160075461179a90919063ffffffff16565b6007819055505050565b600081359050612e0281613ac0565b92915050565b600081359050612e1781613ad7565b92915050565b600081359050612e2c81613aee565b92915050565b600060208284031215612e4457600080fd5b6000612e5284828501612df3565b91505092915050565b60008060408385031215612e6e57600080fd5b6000612e7c85828601612df3565b9250506020612e8d85828601612df3565b9150509250929050565b600080600060608486031215612eac57600080fd5b6000612eba86828701612df3565b9350506020612ecb86828701612df3565b9250506040612edc86828701612e1d565b9150509250925092565b60008060408385031215612ef957600080fd5b6000612f0785828601612df3565b9250506020612f1885828601612e1d565b9150509250929050565b600060208284031215612f3457600080fd5b6000612f4284828501612e1d565b91505092915050565b60008060408385031215612f5e57600080fd5b6000612f6c85828601612e1d565b9250506020612f7d85828601612e08565b9150509250929050565b612f9081613565565b82525050565b612f9f81613577565b82525050565b6000612fb082613434565b612fba818561343f565b9350612fca8185602086016135ba565b612fd3816136f5565b840191505092915050565b6000612feb60238361343f565b9150612ff682613706565b604082019050919050565b600061300e602a8361343f565b915061301982613755565b604082019050919050565b600061303160268361343f565b915061303c826137a4565b604082019050919050565b600061305460228361343f565b915061305f826137f3565b604082019050919050565b6000613077601b8361343f565b915061308282613842565b602082019050919050565b600061309a601b8361343f565b91506130a58261386b565b602082019050919050565b60006130bd601f8361343f565b91506130c882613894565b602082019050919050565b60006130e060288361343f565b91506130eb826138bd565b604082019050919050565b600061310360218361343f565b915061310e8261390c565b604082019050919050565b600061312660208361343f565b91506131318261395b565b602082019050919050565b600061314960298361343f565b915061315482613984565b604082019050919050565b600061316c60258361343f565b9150613177826139d3565b604082019050919050565b600061318f60248361343f565b915061319a82613a22565b604082019050919050565b60006131b2602c8361343f565b91506131bd82613a71565b604082019050919050565b6131d1816135a3565b82525050565b6131e0816135ad565b82525050565b60006020820190506131fb6000830184612f87565b92915050565b60006020820190506132166000830184612f96565b92915050565b600060208201905081810360008301526132368184612fa5565b905092915050565b6000602082019050818103600083015261325781612fde565b9050919050565b6000602082019050818103600083015261327781613001565b9050919050565b6000602082019050818103600083015261329781613024565b9050919050565b600060208201905081810360008301526132b781613047565b9050919050565b600060208201905081810360008301526132d78161306a565b9050919050565b600060208201905081810360008301526132f78161308d565b9050919050565b60006020820190508181036000830152613317816130b0565b9050919050565b60006020820190508181036000830152613337816130d3565b9050919050565b60006020820190508181036000830152613357816130f6565b9050919050565b6000602082019050818103600083015261337781613119565b9050919050565b600060208201905081810360008301526133978161313c565b9050919050565b600060208201905081810360008301526133b78161315f565b9050919050565b600060208201905081810360008301526133d781613182565b9050919050565b600060208201905081810360008301526133f7816131a5565b9050919050565b600060208201905061341360008301846131c8565b92915050565b600060208201905061342e60008301846131d7565b92915050565b600081519050919050565b600082825260208201905092915050565b600061345b826135a3565b9150613466836135a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561349b5761349a613668565b5b828201905092915050565b60006134b1826135a3565b91506134bc836135a3565b9250826134cc576134cb613697565b5b828204905092915050565b60006134e2826135a3565b91506134ed836135a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561352657613525613668565b5b828202905092915050565b600061353c826135a3565b9150613547836135a3565b92508282101561355a57613559613668565b5b828203905092915050565b600061357082613583565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156135d85780820151818401526020810190506135bd565b838111156135e7576000848401525b50505050565b6000600282049050600182168061360557607f821691505b60208210811415613619576136186136c6565b5b50919050565b600061362a826135a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561365d5761365c613668565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b613ac981613565565b8114613ad457600080fd5b50565b613ae081613577565b8114613aeb57600080fd5b50565b613af7816135a3565b8114613b0257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202e61e8bf8f7677861de254bb2617508866e79522d7ef1d75bffad41f8baa804464736f6c63430008040033

Deployed Bytecode Sourcemap

19245:10548:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22443:376;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20151:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21063:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22174:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20428:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21232:313;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23269:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20337:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21553:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22827:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20531:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18689:148;;;:::i;:::-;;19954:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18038:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20242;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21779:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20737:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22056:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22273:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20912:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23530:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18992:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23870:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22443:376;22495:14;22512:12;:10;:12::i;:::-;22495:29;;22544:11;:19;22556:6;22544:19;;;;;;;;;;;;;;;;;;;;;;;;;22543:20;22535:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22624:15;22647:19;22658:7;22647:10;:19::i;:::-;22623:43;;;;;;22695:28;22715:7;22695;:15;22703:6;22695:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22677:7;:15;22685:6;22677:15;;;;;;;;;;;;;;;:46;;;;22744:20;22756:7;22744;;:11;;:20;;;;:::i;:::-;22734:7;:30;;;;22788:23;22803:7;22788:10;;:14;;:23;;;;:::i;:::-;22775:10;:36;;;;22443:376;;;:::o;20151:83::-;20188:13;20221:5;20214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20151:83;:::o;21063:161::-;21138:4;21155:39;21164:12;:10;:12::i;:::-;21178:7;21187:6;21155:8;:39::i;:::-;21212:4;21205:11;;21063:161;;;;:::o;22174:87::-;22216:7;22243:10;;22236:17;;22174:87;:::o;20428:95::-;20481:7;19717:22;20501:14;;20428:95;:::o;21232:313::-;21330:4;21347:36;21357:6;21365:9;21376:6;21347:9;:36::i;:::-;21394:121;21403:6;21411:12;:10;:12::i;:::-;21425:89;21463:6;21425:89;;;;;;;;;;;;;;;;;:11;:19;21437:6;21425:19;;;;;;;;;;;;;;;:33;21445:12;:10;:12::i;:::-;21425:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21394:8;:121::i;:::-;21533:4;21526:11;;21232:313;;;;;:::o;23269:253::-;23335:7;23374;;23363;:18;;23355:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23439:19;23462:10;:8;:10::i;:::-;23439:33;;23490:24;23502:11;23490:7;:11;;:24;;;;:::i;:::-;23483:31;;;23269:253;;;:::o;20337:83::-;20378:5;20403:9;;;;;;;;;;;20396:16;;20337:83;:::o;21553:218::-;21641:4;21658:83;21667:12;:10;:12::i;:::-;21681:7;21690:50;21729:10;21690:11;:25;21702:12;:10;:12::i;:::-;21690:25;;;;;;;;;;;;;;;:34;21716:7;21690:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21658:8;:83::i;:::-;21759:4;21752:11;;21553:218;;;;:::o;22827:434::-;22917:7;19717:22;22945:7;:18;;22937:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23015:17;23010:244;;23050:15;23073:19;23084:7;23073:10;:19::i;:::-;23049:43;;;;;;23114:7;23107:14;;;;;23010:244;23156:23;23186:19;23197:7;23186:10;:19::i;:::-;23154:51;;;;;;23227:15;23220:22;;;22827:434;;;;;:::o;20531:198::-;20597:7;20621:11;:20;20633:7;20621:20;;;;;;;;;;;;;;;;;;;;;;;;;20617:49;;;20650:7;:16;20658:7;20650:16;;;;;;;;;;;;;;;;20643:23;;;;20617:49;20684:37;20704:7;:16;20712:7;20704:16;;;;;;;;;;;;;;;;20684:19;:37::i;:::-;20677:44;;20531:198;;;;:::o;18689:148::-;18269:12;:10;:12::i;:::-;18258:23;;:7;:5;:7::i;:::-;:23;;;18250:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18796:1:::1;18759:40;;18780:6;::::0;::::1;;;;;;;;18759:40;;;;;;;;;;;;18827:1;18810:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18689:148::o:0;19954:49::-;;;;:::o;18038:87::-;18084:7;18111:6;;;;;;;;;;;18104:13;;18038:87;:::o;20242:::-;20281:13;20314:7;20307:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20242:87;:::o;21779:269::-;21872:4;21889:129;21898:12;:10;:12::i;:::-;21912:7;21921:96;21960:15;21921:96;;;;;;;;;;;;;;;;;:11;:25;21933:12;:10;:12::i;:::-;21921:25;;;;;;;;;;;;;;;:34;21947:7;21921:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21889:8;:129::i;:::-;22036:4;22029:11;;21779:269;;;;:::o;20737:167::-;20815:4;20832:42;20842:12;:10;:12::i;:::-;20856:9;20867:6;20832:9;:42::i;:::-;20892:4;20885:11;;20737:167;;;;:::o;22056:110::-;22114:4;22138:11;:20;22150:7;22138:20;;;;;;;;;;;;;;;;;;;;;;;;;22131:27;;22056:110;;;:::o;22273:162::-;18269:12;:10;:12::i;:::-;18258:23;;:7;:5;:7::i;:::-;:23;;;18250:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22367:60:::1;22411:5;22367:25;22379:12;19717:22;22367:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;22352:12;:75;;;;22273:162:::0;:::o;20912:143::-;20993:7;21020:11;:18;21032:5;21020:18;;;;;;;;;;;;;;;:27;21039:7;21020:27;;;;;;;;;;;;;;;;21013:34;;20912:143;;;;:::o;23530:332::-;18269:12;:10;:12::i;:::-;18258:23;;:7;:5;:7::i;:::-;:23;;;18250:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23612:11:::1;:20;23624:7;23612:20;;;;;;;;;;;;;;;;;;;;;;;;;23611:21;23603:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23697:1;23678:7;:16;23686:7;23678:16;;;;;;;;;;;;;;;;:20;23675:108;;;23734:37;23754:7;:16;23762:7;23754:16;;;;;;;;;;;;;;;;23734:19;:37::i;:::-;23715:7;:16;23723:7;23715:16;;;;;;;;;;;;;;;:56;;;;23675:108;23816:4;23793:11;:20;23805:7;23793:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23831:9;23846:7;23831:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23530:332:::0;:::o;18992:244::-;18269:12;:10;:12::i;:::-;18258:23;;:7;:5;:7::i;:::-;:23;;;18250:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19101:1:::1;19081:22;;:8;:22;;;;19073:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19191:8;19162:38;;19183:6;::::0;::::1;;;;;;;;19162:38;;;;;;;;;;;;19220:8;19211:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18992:244:::0;:::o;23870:478::-;18269:12;:10;:12::i;:::-;18258:23;;:7;:5;:7::i;:::-;:23;;;18250:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23951:11:::1;:20;23963:7;23951:20;;;;;;;;;;;;;;;;;;;;;;;;;23943:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24019:9;24014:327;24038:9;:16;;;;24034:1;:20;24014:327;;;24096:7;24080:23;;:9;24090:1;24080:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;24076:254;;;24139:9;24168:1;24149:9;:16;;;;:20;;;;:::i;:::-;24139:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24124:9;24134:1;24124:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24208:1;24189:7;:16;24197:7;24189:16;;;;;;;;;;;;;;;:20;;;;24251:5;24228:11;:20;24240:7;24228:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24275:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24309:5;;24076:254;24056:3;;;;;:::i;:::-;;;;24014:327;;;;23870:478:::0;:::o;1805:98::-;1858:7;1885:10;1878:17;;1805:98;:::o;28059:411::-;28118:7;28127;28136;28145;28154;28175:23;28200:12;28216:20;28228:7;28216:11;:20::i;:::-;28174:62;;;;28247:19;28270:10;:8;:10::i;:::-;28247:33;;28292:15;28309:23;28334:12;28350:39;28362:7;28371:4;28377:11;28350;:39::i;:::-;28291:98;;;;;;28408:7;28417:15;28434:4;28440:15;28457:4;28400:62;;;;;;;;;;;;;;;;28059:411;;;;;;;:::o;5597:136::-;5655:7;5682:43;5686:1;5689;5682:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5675:50;;5597:136;;;;:::o;5133:181::-;5191:7;5211:9;5227:1;5223;:5;;;;:::i;:::-;5211:17;;5252:1;5247;:6;;5239:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5305:1;5298:8;;;5133:181;;;;:::o;24356:337::-;24466:1;24449:19;;:5;:19;;;;24441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24547:1;24528:21;;:7;:21;;;;24520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24631:6;24601:11;:18;24613:5;24601:18;;;;;;;;;;;;;;;:27;24620:7;24601:27;;;;;;;;;;;;;;;:36;;;;24669:7;24653:32;;24662:5;24653:32;;;24678:6;24653:32;;;;;;:::i;:::-;;;;;;;;24356:337;;;:::o;24701:1088::-;24816:1;24798:20;;:6;:20;;;;24790:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24900:1;24879:23;;:9;:23;;;;24871:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24970:1;24961:6;:10;24953:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25041:7;:5;:7::i;:::-;25031:17;;:6;:17;;;;:41;;;;;25065:7;:5;:7::i;:::-;25052:20;;:9;:20;;;;25031:41;25028:132;;;25103:12;;25093:6;:22;;25085:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25028:132;25189:11;:19;25201:6;25189:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;25213:11;:22;25225:9;25213:22;;;;;;;;;;;;;;;;;;;;;;;;;25212:23;25189:46;25185:597;;;25252:48;25274:6;25282:9;25293:6;25252:21;:48::i;:::-;25185:597;;;25323:11;:19;25335:6;25323:19;;;;;;;;;;;;;;;;;;;;;;;;;25322:20;:46;;;;;25346:11;:22;25358:9;25346:22;;;;;;;;;;;;;;;;;;;;;;;;;25322:46;25318:464;;;25385:46;25405:6;25413:9;25424:6;25385:19;:46::i;:::-;25318:464;;;25454:11;:19;25466:6;25454:19;;;;;;;;;;;;;;;;;;;;;;;;;25453:20;:47;;;;;25478:11;:22;25490:9;25478:22;;;;;;;;;;;;;;;;;;;;;;;;;25477:23;25453:47;25449:333;;;25517:44;25535:6;25543:9;25554:6;25517:17;:44::i;:::-;25449:333;;;25583:11;:19;25595:6;25583:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25606:11;:22;25618:9;25606:22;;;;;;;;;;;;;;;;;;;;;;;;;25583:45;25579:203;;;25645:48;25667:6;25675:9;25686:6;25645:21;:48::i;:::-;25579:203;;;25726:44;25744:6;25752:9;25763:6;25726:17;:44::i;:::-;25579:203;25449:333;25318:464;25185:597;24701:1088;;;:::o;6036:192::-;6122:7;6155:1;6150;:6;;6158:12;6142:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6182:9;6198:1;6194;:5;;;;:::i;:::-;6182:17;;6219:1;6212:8;;;6036:192;;;;;:::o;29058:163::-;29099:7;29120:15;29137;29156:19;:17;:19::i;:::-;29119:56;;;;29193:20;29205:7;29193;:11;;:20;;;;:::i;:::-;29186:27;;;;29058:163;:::o;7434:132::-;7492:7;7519:39;7523:1;7526;7519:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7512:46;;7434:132;;;;:::o;6487:471::-;6545:7;6795:1;6790;:6;6786:47;;;6820:1;6813:8;;;;6786:47;6845:9;6861:1;6857;:5;;;;:::i;:::-;6845:17;;6890:1;6885;6881;:5;;;;:::i;:::-;:10;6873:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6949:1;6942:8;;;6487:471;;;;;:::o;28478:230::-;28538:7;28547;28567:12;28582:23;28603:1;28582:16;28594:3;28582:7;:11;;:16;;;;:::i;:::-;:20;;:23;;;;:::i;:::-;28567:38;;28616:23;28642:17;28654:4;28642:7;:11;;:17;;;;:::i;:::-;28616:43;;28678:15;28695:4;28670:30;;;;;;28478:230;;;:::o;28716:334::-;28811:7;28820;28829;28849:15;28867:24;28879:11;28867:7;:11;;:24;;;;:::i;:::-;28849:42;;28902:12;28917:21;28926:11;28917:4;:8;;:21;;;;:::i;:::-;28902:36;;28949:23;28975:17;28987:4;28975:7;:11;;:17;;;;:::i;:::-;28949:43;;29011:7;29020:15;29037:4;29003:39;;;;;;;;;28716:334;;;;;;;:::o;26794:509::-;26897:15;26914:23;26939:12;26953:23;26978:12;26994:19;27005:7;26994:10;:19::i;:::-;26896:117;;;;;;;;;;27042:28;27062:7;27042;:15;27050:6;27042:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27024:7;:15;27032:6;27024:15;;;;;;;;;;;;;;;:46;;;;27099:28;27119:7;27099;:15;27107:6;27099:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27081:7;:15;27089:6;27081:15;;;;;;;;;;;;;;;:46;;;;27159:39;27182:15;27159:7;:18;27167:9;27159:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27138:7;:18;27146:9;27138:18;;;;;;;;;;;;;;;:60;;;;27212:23;27224:4;27230;27212:11;:23::i;:::-;27268:9;27251:44;;27260:6;27251:44;;;27279:15;27251:44;;;;;;:::i;:::-;;;;;;;;26794:509;;;;;;;;:::o;26257:529::-;26358:15;26375:23;26400:12;26414:23;26439:12;26455:19;26466:7;26455:10;:19::i;:::-;26357:117;;;;;;;;;;26503:28;26523:7;26503;:15;26511:6;26503:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26485:7;:15;26493:6;26485:15;;;;;;;;;;;;;;;:46;;;;26563:39;26586:15;26563:7;:18;26571:9;26563:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26542:7;:18;26550:9;26542:18;;;;;;;;;;;;;;;:60;;;;26634:39;26657:15;26634:7;:18;26642:9;26634:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26613:7;:18;26621:9;26613:18;;;;;;;;;;;;;;;:60;;;;26695:23;26707:4;26713;26695:11;:23::i;:::-;26751:9;26734:44;;26743:6;26734:44;;;26762:15;26734:44;;;;;;:::i;:::-;;;;;;;;26257:529;;;;;;;;:::o;25797:452::-;25896:15;25913:23;25938:12;25952:23;25977:12;25993:19;26004:7;25993:10;:19::i;:::-;25895:117;;;;;;;;;;26041:28;26061:7;26041;:15;26049:6;26041:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26023:7;:15;26031:6;26023:15;;;;;;;;;;;;;;;:46;;;;26101:39;26124:15;26101:7;:18;26109:9;26101:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26080:7;:18;26088:9;26080:18;;;;;;;;;;;;;;;:60;;;;26158:23;26170:4;26176;26158:11;:23::i;:::-;26214:9;26197:44;;26206:6;26197:44;;;26225:15;26197:44;;;;;;:::i;:::-;;;;;;;;25797:452;;;;;;;;:::o;27311:585::-;27414:15;27431:23;27456:12;27470:23;27495:12;27511:19;27522:7;27511:10;:19::i;:::-;27413:117;;;;;;;;;;27559:28;27579:7;27559;:15;27567:6;27559:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27541:7;:15;27549:6;27541:15;;;;;;;;;;;;;;;:46;;;;27616:28;27636:7;27616;:15;27624:6;27616:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27598:7;:15;27606:6;27598:15;;;;;;;;;;;;;;;:46;;;;27676:39;27699:15;27676:7;:18;27684:9;27676:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27655:7;:18;27663:9;27655:18;;;;;;;;;;;;;;;:60;;;;27747:39;27770:15;27747:7;:18;27755:9;27747:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27726:7;:18;27734:9;27726:18;;;;;;;;;;;;;;;:60;;;;27805:23;27817:4;27823;27805:11;:23::i;:::-;27861:9;27844:44;;27853:6;27844:44;;;27872:15;27844:44;;;;;;:::i;:::-;;;;;;;;27311:585;;;;;;;;:::o;29229:561::-;29279:7;29288;29308:15;29326:7;;29308:25;;29344:15;19717:22;29344:25;;29391:9;29386:289;29410:9;:16;;;;29406:1;:20;29386:289;;;29476:7;29452;:21;29460:9;29470:1;29460:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29452:21;;;;;;;;;;;;;;;;:31;:66;;;;29511:7;29487;:21;29495:9;29505:1;29495:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29487:21;;;;;;;;;;;;;;;;:31;29452:66;29448:97;;;29528:7;;19717:22;29520:25;;;;;;;;;29448:97;29570:34;29582:7;:21;29590:9;29600:1;29590:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29582:21;;;;;;;;;;;;;;;;29570:7;:11;;:34;;;;:::i;:::-;29560:44;;29629:34;29641:7;:21;29649:9;29659:1;29649:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29641:21;;;;;;;;;;;;;;;;29629:7;:11;;:34;;;;:::i;:::-;29619:44;;29428:3;;;;;:::i;:::-;;;;29386:289;;;;29699:20;19717:22;29699:7;;:11;;:20;;;;:::i;:::-;29689:7;:30;29685:61;;;29729:7;;19717:22;29721:25;;;;;;;;29685:61;29765:7;29774;29757:25;;;;;;29229:561;;;:::o;8062:278::-;8148:7;8180:1;8176;:5;8183:12;8168:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8207:9;8223:1;8219;:5;;;;:::i;:::-;8207:17;;8331:1;8324:8;;;8062:278;;;;;:::o;27904:147::-;27982:17;27994:4;27982:7;;:11;;:17;;;;:::i;:::-;27972:7;:27;;;;28023:20;28038:4;28023:10;;:14;;:20;;;;:::i;:::-;28010:10;:33;;;;27904:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;495:6;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;772:6;780;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;1194:6;1202;1210;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;1743:6;1751;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:262::-;2147:6;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2255:1;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2226:117;2154:196;;;;:::o;2356:401::-;2421:6;2429;2478:2;2466:9;2457:7;2453:23;2449:32;2446:2;;;2494:1;2491;2484:12;2446:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:50;2732:7;2723:6;2712:9;2708:22;2690:50;:::i;:::-;2680:60;;2635:115;2436:321;;;;;:::o;2763:118::-;2850:24;2868:5;2850:24;:::i;:::-;2845:3;2838:37;2828:53;;:::o;2887:109::-;2968:21;2983:5;2968:21;:::i;:::-;2963:3;2956:34;2946:50;;:::o;3002:364::-;3090:3;3118:39;3151:5;3118:39;:::i;:::-;3173:71;3237:6;3232:3;3173:71;:::i;:::-;3166:78;;3253:52;3298:6;3293:3;3286:4;3279:5;3275:16;3253:52;:::i;:::-;3330:29;3352:6;3330:29;:::i;:::-;3325:3;3321:39;3314:46;;3094:272;;;;;:::o;3372:366::-;3514:3;3535:67;3599:2;3594:3;3535:67;:::i;:::-;3528:74;;3611:93;3700:3;3611:93;:::i;:::-;3729:2;3724:3;3720:12;3713:19;;3518:220;;;:::o;3744:366::-;3886:3;3907:67;3971:2;3966:3;3907:67;:::i;:::-;3900:74;;3983:93;4072:3;3983:93;:::i;:::-;4101:2;4096:3;4092:12;4085:19;;3890:220;;;:::o;4116:366::-;4258:3;4279:67;4343:2;4338:3;4279:67;:::i;:::-;4272:74;;4355:93;4444:3;4355:93;:::i;:::-;4473:2;4468:3;4464:12;4457:19;;4262:220;;;:::o;4488:366::-;4630:3;4651:67;4715:2;4710:3;4651:67;:::i;:::-;4644:74;;4727:93;4816:3;4727:93;:::i;:::-;4845:2;4840:3;4836:12;4829:19;;4634:220;;;:::o;4860:366::-;5002:3;5023:67;5087:2;5082:3;5023:67;:::i;:::-;5016:74;;5099:93;5188:3;5099:93;:::i;:::-;5217:2;5212:3;5208:12;5201:19;;5006:220;;;:::o;5232:366::-;5374:3;5395:67;5459:2;5454:3;5395:67;:::i;:::-;5388:74;;5471:93;5560:3;5471:93;:::i;:::-;5589:2;5584:3;5580:12;5573:19;;5378:220;;;:::o;5604:366::-;5746:3;5767:67;5831:2;5826:3;5767:67;:::i;:::-;5760:74;;5843:93;5932:3;5843:93;:::i;:::-;5961:2;5956:3;5952:12;5945:19;;5750:220;;;:::o;5976:366::-;6118:3;6139:67;6203:2;6198:3;6139:67;:::i;:::-;6132:74;;6215:93;6304:3;6215:93;:::i;:::-;6333:2;6328:3;6324:12;6317:19;;6122:220;;;:::o;6348:366::-;6490:3;6511:67;6575:2;6570:3;6511:67;:::i;:::-;6504:74;;6587:93;6676:3;6587:93;:::i;:::-;6705:2;6700:3;6696:12;6689:19;;6494:220;;;:::o;6720:366::-;6862:3;6883:67;6947:2;6942:3;6883:67;:::i;:::-;6876:74;;6959:93;7048:3;6959:93;:::i;:::-;7077:2;7072:3;7068:12;7061:19;;6866:220;;;:::o;7092:366::-;7234:3;7255:67;7319:2;7314:3;7255:67;:::i;:::-;7248:74;;7331:93;7420:3;7331:93;:::i;:::-;7449:2;7444:3;7440:12;7433:19;;7238:220;;;:::o;7464:366::-;7606:3;7627:67;7691:2;7686:3;7627:67;:::i;:::-;7620:74;;7703:93;7792:3;7703:93;:::i;:::-;7821:2;7816:3;7812:12;7805:19;;7610:220;;;:::o;7836:366::-;7978:3;7999:67;8063:2;8058:3;7999:67;:::i;:::-;7992:74;;8075:93;8164:3;8075:93;:::i;:::-;8193:2;8188:3;8184:12;8177:19;;7982:220;;;:::o;8208:366::-;8350:3;8371:67;8435:2;8430:3;8371:67;:::i;:::-;8364:74;;8447:93;8536:3;8447:93;:::i;:::-;8565:2;8560:3;8556:12;8549:19;;8354:220;;;:::o;8580:118::-;8667:24;8685:5;8667:24;:::i;:::-;8662:3;8655:37;8645:53;;:::o;8704:112::-;8787:22;8803:5;8787:22;:::i;:::-;8782:3;8775:35;8765:51;;:::o;8822:222::-;8915:4;8953:2;8942:9;8938:18;8930:26;;8966:71;9034:1;9023:9;9019:17;9010:6;8966:71;:::i;:::-;8920:124;;;;:::o;9050:210::-;9137:4;9175:2;9164:9;9160:18;9152:26;;9188:65;9250:1;9239:9;9235:17;9226:6;9188:65;:::i;:::-;9142:118;;;;:::o;9266:313::-;9379:4;9417:2;9406:9;9402:18;9394:26;;9466:9;9460:4;9456:20;9452:1;9441:9;9437:17;9430:47;9494:78;9567:4;9558:6;9494:78;:::i;:::-;9486:86;;9384:195;;;;:::o;9585:419::-;9751:4;9789:2;9778:9;9774:18;9766:26;;9838:9;9832:4;9828:20;9824:1;9813:9;9809:17;9802:47;9866:131;9992:4;9866:131;:::i;:::-;9858:139;;9756:248;;;:::o;10010:419::-;10176:4;10214:2;10203:9;10199:18;10191:26;;10263:9;10257:4;10253:20;10249:1;10238:9;10234:17;10227:47;10291:131;10417:4;10291:131;:::i;:::-;10283:139;;10181:248;;;:::o;10435:419::-;10601:4;10639:2;10628:9;10624:18;10616:26;;10688:9;10682:4;10678:20;10674:1;10663:9;10659:17;10652:47;10716:131;10842:4;10716:131;:::i;:::-;10708:139;;10606:248;;;:::o;10860:419::-;11026:4;11064:2;11053:9;11049:18;11041:26;;11113:9;11107:4;11103:20;11099:1;11088:9;11084:17;11077:47;11141:131;11267:4;11141:131;:::i;:::-;11133:139;;11031:248;;;:::o;11285:419::-;11451:4;11489:2;11478:9;11474:18;11466:26;;11538:9;11532:4;11528:20;11524:1;11513:9;11509:17;11502:47;11566:131;11692:4;11566:131;:::i;:::-;11558:139;;11456:248;;;:::o;11710:419::-;11876:4;11914:2;11903:9;11899:18;11891:26;;11963:9;11957:4;11953:20;11949:1;11938:9;11934:17;11927:47;11991:131;12117:4;11991:131;:::i;:::-;11983:139;;11881:248;;;:::o;12135:419::-;12301:4;12339:2;12328:9;12324:18;12316:26;;12388:9;12382:4;12378:20;12374:1;12363:9;12359:17;12352:47;12416:131;12542:4;12416:131;:::i;:::-;12408:139;;12306:248;;;:::o;12560:419::-;12726:4;12764:2;12753:9;12749:18;12741:26;;12813:9;12807:4;12803:20;12799:1;12788:9;12784:17;12777:47;12841:131;12967:4;12841:131;:::i;:::-;12833:139;;12731:248;;;:::o;12985:419::-;13151:4;13189:2;13178:9;13174:18;13166:26;;13238:9;13232:4;13228:20;13224:1;13213:9;13209:17;13202:47;13266:131;13392:4;13266:131;:::i;:::-;13258:139;;13156:248;;;:::o;13410:419::-;13576:4;13614:2;13603:9;13599:18;13591:26;;13663:9;13657:4;13653:20;13649:1;13638:9;13634:17;13627:47;13691:131;13817:4;13691:131;:::i;:::-;13683:139;;13581:248;;;:::o;13835:419::-;14001:4;14039:2;14028:9;14024:18;14016:26;;14088:9;14082:4;14078:20;14074:1;14063:9;14059:17;14052:47;14116:131;14242:4;14116:131;:::i;:::-;14108:139;;14006:248;;;:::o;14260:419::-;14426:4;14464:2;14453:9;14449:18;14441:26;;14513:9;14507:4;14503:20;14499:1;14488:9;14484:17;14477:47;14541:131;14667:4;14541:131;:::i;:::-;14533:139;;14431:248;;;:::o;14685:419::-;14851:4;14889:2;14878:9;14874:18;14866:26;;14938:9;14932:4;14928:20;14924:1;14913:9;14909:17;14902:47;14966:131;15092:4;14966:131;:::i;:::-;14958:139;;14856:248;;;:::o;15110:419::-;15276:4;15314:2;15303:9;15299:18;15291:26;;15363:9;15357:4;15353:20;15349:1;15338:9;15334:17;15327:47;15391:131;15517:4;15391:131;:::i;:::-;15383:139;;15281:248;;;:::o;15535:222::-;15628:4;15666:2;15655:9;15651:18;15643:26;;15679:71;15747:1;15736:9;15732:17;15723:6;15679:71;:::i;:::-;15633:124;;;;:::o;15763:214::-;15852:4;15890:2;15879:9;15875:18;15867:26;;15903:67;15967:1;15956:9;15952:17;15943:6;15903:67;:::i;:::-;15857:120;;;;:::o;15983:99::-;16035:6;16069:5;16063:12;16053:22;;16042:40;;;:::o;16088:169::-;16172:11;16206:6;16201:3;16194:19;16246:4;16241:3;16237:14;16222:29;;16184:73;;;;:::o;16263:305::-;16303:3;16322:20;16340:1;16322:20;:::i;:::-;16317:25;;16356:20;16374:1;16356:20;:::i;:::-;16351:25;;16510:1;16442:66;16438:74;16435:1;16432:81;16429:2;;;16516:18;;:::i;:::-;16429:2;16560:1;16557;16553:9;16546:16;;16307:261;;;;:::o;16574:185::-;16614:1;16631:20;16649:1;16631:20;:::i;:::-;16626:25;;16665:20;16683:1;16665:20;:::i;:::-;16660:25;;16704:1;16694:2;;16709:18;;:::i;:::-;16694:2;16751:1;16748;16744:9;16739:14;;16616:143;;;;:::o;16765:348::-;16805:7;16828:20;16846:1;16828:20;:::i;:::-;16823:25;;16862:20;16880:1;16862:20;:::i;:::-;16857:25;;17050:1;16982:66;16978:74;16975:1;16972:81;16967:1;16960:9;16953:17;16949:105;16946:2;;;17057:18;;:::i;:::-;16946:2;17105:1;17102;17098:9;17087:20;;16813:300;;;;:::o;17119:191::-;17159:4;17179:20;17197:1;17179:20;:::i;:::-;17174:25;;17213:20;17231:1;17213:20;:::i;:::-;17208:25;;17252:1;17249;17246:8;17243:2;;;17257:18;;:::i;:::-;17243:2;17302:1;17299;17295:9;17287:17;;17164:146;;;;:::o;17316:96::-;17353:7;17382:24;17400:5;17382:24;:::i;:::-;17371:35;;17361:51;;;:::o;17418:90::-;17452:7;17495:5;17488:13;17481:21;17470:32;;17460:48;;;:::o;17514:126::-;17551:7;17591:42;17584:5;17580:54;17569:65;;17559:81;;;:::o;17646:77::-;17683:7;17712:5;17701:16;;17691:32;;;:::o;17729:86::-;17764:7;17804:4;17797:5;17793:16;17782:27;;17772:43;;;:::o;17821:307::-;17889:1;17899:113;17913:6;17910:1;17907:13;17899:113;;;17998:1;17993:3;17989:11;17983:18;17979:1;17974:3;17970:11;17963:39;17935:2;17932:1;17928:10;17923:15;;17899:113;;;18030:6;18027:1;18024:13;18021:2;;;18110:1;18101:6;18096:3;18092:16;18085:27;18021:2;17870:258;;;;:::o;18134:320::-;18178:6;18215:1;18209:4;18205:12;18195:22;;18262:1;18256:4;18252:12;18283:18;18273:2;;18339:4;18331:6;18327:17;18317:27;;18273:2;18401;18393:6;18390:14;18370:18;18367:38;18364:2;;;18420:18;;:::i;:::-;18364:2;18185:269;;;;:::o;18460:233::-;18499:3;18522:24;18540:5;18522:24;:::i;:::-;18513:33;;18568:66;18561:5;18558:77;18555:2;;;18638:18;;:::i;:::-;18555:2;18685:1;18678:5;18674:13;18667:20;;18503:190;;;:::o;18699:180::-;18747:77;18744:1;18737:88;18844:4;18841:1;18834:15;18868:4;18865:1;18858:15;18885:180;18933:77;18930:1;18923:88;19030:4;19027:1;19020:15;19054:4;19051:1;19044:15;19071:180;19119:77;19116:1;19109:88;19216:4;19213:1;19206:15;19240:4;19237:1;19230:15;19257:102;19298:6;19349:2;19345:7;19340:2;19333:5;19329:14;19325:28;19315:38;;19305:54;;;:::o;19365:222::-;19505:34;19501:1;19493:6;19489:14;19482:58;19574:5;19569:2;19561:6;19557:15;19550:30;19471:116;:::o;19593:229::-;19733:34;19729:1;19721:6;19717:14;19710:58;19802:12;19797:2;19789:6;19785:15;19778:37;19699:123;:::o;19828:225::-;19968:34;19964:1;19956:6;19952:14;19945:58;20037:8;20032:2;20024:6;20020:15;20013:33;19934:119;:::o;20059:221::-;20199:34;20195:1;20187:6;20183:14;20176:58;20268:4;20263:2;20255:6;20251:15;20244:29;20165:115;:::o;20286:177::-;20426:29;20422:1;20414:6;20410:14;20403:53;20392:71;:::o;20469:177::-;20609:29;20605:1;20597:6;20593:14;20586:53;20575:71;:::o;20652:181::-;20792:33;20788:1;20780:6;20776:14;20769:57;20758:75;:::o;20839:227::-;20979:34;20975:1;20967:6;20963:14;20956:58;21048:10;21043:2;21035:6;21031:15;21024:35;20945:121;:::o;21072:220::-;21212:34;21208:1;21200:6;21196:14;21189:58;21281:3;21276:2;21268:6;21264:15;21257:28;21178:114;:::o;21298:182::-;21438:34;21434:1;21426:6;21422:14;21415:58;21404:76;:::o;21486:228::-;21626:34;21622:1;21614:6;21610:14;21603:58;21695:11;21690:2;21682:6;21678:15;21671:36;21592:122;:::o;21720:224::-;21860:34;21856:1;21848:6;21844:14;21837:58;21929:7;21924:2;21916:6;21912:15;21905:32;21826:118;:::o;21950:223::-;22090:34;22086:1;22078:6;22074:14;22067:58;22159:6;22154:2;22146:6;22142:15;22135:31;22056:117;:::o;22179:231::-;22319:34;22315:1;22307:6;22303:14;22296:58;22388:14;22383:2;22375:6;22371:15;22364:39;22285:125;:::o;22416:122::-;22489:24;22507:5;22489:24;:::i;:::-;22482:5;22479:35;22469:2;;22528:1;22525;22518:12;22469:2;22459:79;:::o;22544:116::-;22614:21;22629:5;22614:21;:::i;:::-;22607:5;22604:32;22594:2;;22650:1;22647;22640:12;22594:2;22584:76;:::o;22666:122::-;22739:24;22757:5;22739:24;:::i;:::-;22732:5;22729:35;22719:2;;22778:1;22775;22768:12;22719:2;22709:79;:::o

Swarm Source

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