ETH Price: $3,066.22 (+1.34%)
Gas: 6 Gwei

Token

Forge Finance (FRG3)
 

Overview

Max Total Supply

87,044.094795077721260904 FRG3

Holders

215

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
30.578096304937020963 FRG3

Value
$0.00
0x8164199d893249f5ddf78a7161d5e521ba8e958e
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:
FORGEToken

Compiler Version
v0.6.2+commit.bacdbe57

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
 * Copyright 2020 Forge Finance. ALL RIGHTS RESERVED.
 *
 * Forge Finance is an experimental fork of R34P with a 4% tax for each transaction (2% is re-distributed to existing FRG3 holders and 2% is permanently burned)
 *
 * Telegram: https://t.me/forgefinance
 *           https://t.me/forgefinanceann
 *
 * Website: www.forgefinance.org
 *
 */

// File: openzeppelin-solidity\contracts\GSN\Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

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

// File: openzeppelin-solidity\contracts\token\ERC20\IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

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

// File: openzeppelin-solidity\contracts\math\SafeMath.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

// File: openzeppelin-solidity\contracts\utils\Address.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

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

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

// File: openzeppelin-solidity\contracts\access\Ownable.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

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

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

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

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

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

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



/*
 * Copyright 2020 Forge Finance. ALL RIGHTS RESERVED.
 *
 * Forge Finance is an experimental fork of R34P with a 4% tax for each transaction (2% is re-distributed to existing FRG3 holders and 2% is permanently burned)
 *
 * Telegram: https://t.me/forgefinance
 *           https://t.me/forgefinanceann
 *
 * Website: www.forgefinance.org
 *
 */

pragma solidity ^0.6.2;



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

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

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

    string private _name = 'Forge Finance';
    string private _symbol = 'FRG3';
    uint8 private _decimals = 18;
    
    uint256 private _taxFee = 2;
    uint256 private _burnFee = 2;
    uint256 private _maxTxAmount = 2500e18;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(sender != owner() && recipient != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

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

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

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

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

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

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

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

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

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

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

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }
    
    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 10, 'taxFee should be in 1 - 10');
        _taxFee = taxFee;
    }
    
    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 9000e9 , 'maxTxAmount should be greater than 9000e9');
        _maxTxAmount = maxTxAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405269152d02c7e14af6800000600655600654600019816200002057fe5b06600019036007556040518060400160405280600d81526020017f466f7267652046696e616e636500000000000000000000000000000000000000815250600a9080519060200190620000759291906200028f565b506040518060400160405280600481526020017f4652473300000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000c39291906200028f565b506012600c60006101000a81548160ff021916908360ff1602179055506002600d556002600e5568878678326eac900000600f553480156200010457600080fd5b506000620001176200028760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060075460016000620001cc6200028760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200021a6200028760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a36200033e565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002d257805160ff191683800117855562000303565b8280016001018555821562000303579182015b8281111562000302578251825591602001919060010190620002e5565b5b50905062000312919062000316565b5090565b6200033b91905b80821115620003375760008160009055506001016200031d565b5090565b90565b6139f3806200034e6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80635880b873116100c3578063a9059cbb1161007c578063a9059cbb1461065f578063cba0e996146106c5578063dd62ed3e14610721578063f2cc0c1814610799578063f2fde38b146107dd578063f84354f11461082157610158565b80635880b8731461049c57806370a08231146104ca578063715018a6146105225780638da5cb5b1461052c57806395d89b4114610576578063a457c2d7146105f957610158565b80632d838119116101155780632d83811914610336578063313ce56714610378578063395093511461039c5780633bd5d173146104025780633c9f861d146104305780634549b0391461044e57610158565b806306fdde031461015d578063095ea7b3146101e057806313114a9d1461024657806318160ddd146102645780631bbae6e01461028257806323b872dd146102b0575b600080fd5b610165610865565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610907565b604051808215151515815260200191505060405180910390f35b61024e610925565b6040518082815260200191505060405180910390f35b61026c61092f565b6040518082815260200191505060405180910390f35b6102ae6004803603602081101561029857600080fd5b8101908080359060200190929190505050610939565b005b61031c600480360360608110156102c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a6b565b604051808215151515815260200191505060405180910390f35b6103626004803603602081101561034c57600080fd5b8101908080359060200190929190505050610b44565b6040518082815260200191505060405180910390f35b610380610bc8565b604051808260ff1660ff16815260200191505060405180910390f35b6103e8600480360360408110156103b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bdf565b604051808215151515815260200191505060405180910390f35b61042e6004803603602081101561041857600080fd5b8101908080359060200190929190505050610c92565b005b610438610e23565b6040518082815260200191505060405180910390f35b6104866004803603604081101561046457600080fd5b8101908080359060200190929190803515159060200190929190505050610e2d565b6040518082815260200191505060405180910390f35b6104c8600480360360208110156104b257600080fd5b8101908080359060200190929190505050610ee4565b005b61050c600480360360208110156104e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061103b565b6040518082815260200191505060405180910390f35b61052a611126565b005b6105346112ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61057e6112d7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105be5780820151818401526020810190506105a3565b50505050905090810190601f1680156105eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106456004803603604081101561060f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611379565b604051808215151515815260200191505060405180910390f35b6106ab6004803603604081101561067557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611446565b604051808215151515815260200191505060405180910390f35b610707600480360360208110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611464565b604051808215151515815260200191505060405180910390f35b6107836004803603604081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114ba565b6040518082815260200191505060405180910390f35b6107db600480360360208110156107af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611541565b005b61081f600480360360208110156107f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118f5565b005b6108636004803603602081101561083757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b02565b005b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108fd5780601f106108d2576101008083540402835291602001916108fd565b820191906000526020600020905b8154815290600101906020018083116108e057829003601f168201915b5050505050905090565b600061091b610914611e90565b8484611e98565b6001905092915050565b6000600854905090565b6000600654905090565b610941611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b65082f79cd9000811015610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061383f6029913960400191505060405180910390fd5b80600f8190555050565b6000610a7884848461208f565b610b3984610a84611e90565b610b34856040518060600160405280602881526020016138b160289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aea611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125bf9092919063ffffffff16565b611e98565b600190509392505050565b6000600754821115610ba1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806137cd602a913960400191505060405180910390fd5b6000610bab61267f565b9050610bc081846126aa90919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610c88610bec611e90565b84610c838560036000610bfd611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b611e98565b6001905092915050565b6000610c9c611e90565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061396d602c913960400191505060405180910390fd5b6000610d4c8361277c565b50505050509050610da581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610dfd816007546127e490919063ffffffff16565b600781905550610e18836008546126f490919063ffffffff16565b600881905550505050565b6000600954905090565b6000600654831115610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610ec7576000610eb78461277c565b5050505050905080915050610ede565b6000610ed28461277c565b50505050915050809150505b92915050565b610eec611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015610fbf5750600a8111155b611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b80600d8190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110d657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611121565b61111e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b90505b919050565b61112e611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561136f5780601f106113445761010080835404028352916020019161136f565b820191906000526020600020905b81548152906001019060200180831161135257829003601f168201915b5050505050905090565b600061143c611386611e90565b846114378560405180606001604052806025815260200161399960259139600360006113b0611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125bf9092919063ffffffff16565b611e98565b6001905092915050565b600061145a611453611e90565b848461208f565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611549611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061394b6022913960400191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611837576117f3600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118fd611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806137f76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b0a611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60008090505b600580549050811015611e8c578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611cc157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e7f57600560016005805490500381548110611d1d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611d5557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611e4557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611e8c565b8080600101915050611c90565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806139276024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061381d6022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806139026025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561219b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806137aa6023913960400191505060405180910390fd5b600081116121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138d96029913960400191505060405180910390fd5b6121fc6112ae565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561226a575061223a6112ae565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122cb57600f548111156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806138686028913960400191505060405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561236e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123835761237e83838361282e565b6125ba565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124265750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561243b57612436838383612aac565b6125b9565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124df5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124f4576124ef838383612d2a565b6125b8565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125965750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125ab576125a6838383612f13565b6125b7565b6125b6838383612d2a565b5b5b5b5b505050565b600083831115829061266c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612631578082015181840152602081019050612616565b50505050905090810190601f16801561265e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061268c613226565b915091506126a381836126aa90919063ffffffff16565b9250505090565b60006126ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134ba565b905092915050565b600080828401905083811015612772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006127998a600d54600e54613580565b92509250925060006127a961267f565b905060008060006127bc8e878787613616565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061282683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125bf565b905092915050565b600061283861267f565b905060008060008060008061284c8861277c565b955095509550955095509550600061286d888361369f90919063ffffffff16565b90506128c189600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295687600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129eb86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a3a85828585613725565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000612ab661267f565b9050600080600080600080612aca8861277c565b9550955095509550955095506000612aeb888361369f90919063ffffffff16565b9050612b3f87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bd484600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c6986600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cb885828585613725565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000612d3461267f565b9050600080600080600080612d488861277c565b9550955095509550955095506000612d69888361369f90919063ffffffff16565b9050612dbd87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e5286600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ea185828585613725565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000612f1d61267f565b9050600080600080600080612f318861277c565b9550955095509550955095506000612f52888361369f90919063ffffffff16565b9050612fa689600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303b87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130d084600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061316586600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131b485828585613725565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600080600060075490506000600654905060008090505b60058054905081101561347d5782600160006005848154811061325c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061334357508160026000600584815481106132db57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561335a57600754600654945094505050506134b6565b6133e3600160006005848154811061336e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846127e490919063ffffffff16565b925061346e60026000600584815481106133f957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836127e490919063ffffffff16565b9150808060010191505061323d565b506134956006546007546126aa90919063ffffffff16565b8210156134ad576007546006549350935050506134b6565b81819350935050505b9091565b60008083118290613566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561352b578082015181840152602081019050613510565b50505050905090810190601f1680156135585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161357257fe5b049050809150509392505050565b6000806000806135ac606461359e888a61369f90919063ffffffff16565b6126aa90919063ffffffff16565b905060006135d660646135c8888b61369f90919063ffffffff16565b6126aa90919063ffffffff16565b905060006135ff826135f1858c6127e490919063ffffffff16565b6127e490919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061362f858961369f90919063ffffffff16565b90506000613646868961369f90919063ffffffff16565b9050600061365d878961369f90919063ffffffff16565b905060006136868261367885876127e490919063ffffffff16565b6127e490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808314156136b2576000905061371f565b60008284029050828482816136c357fe5b041461371a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806138906021913960400191505060405180910390fd5b809150505b92915050565b61374c8361373e866007546127e490919063ffffffff16565b6127e490919063ffffffff16565b600781905550613767826008546126f490919063ffffffff16565b600881905550613782816009546126f490919063ffffffff16565b60098190555061379d816006546127e490919063ffffffff16565b6006819055505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736d61785478416d6f756e742073686f756c642062652067726561746572207468616e203930303065395472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dbc8c6303e3a10ef89656f8d79cb44999444588eadb9bfd807ae78fbe5128de464736f6c63430006020033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c80635880b873116100c3578063a9059cbb1161007c578063a9059cbb1461065f578063cba0e996146106c5578063dd62ed3e14610721578063f2cc0c1814610799578063f2fde38b146107dd578063f84354f11461082157610158565b80635880b8731461049c57806370a08231146104ca578063715018a6146105225780638da5cb5b1461052c57806395d89b4114610576578063a457c2d7146105f957610158565b80632d838119116101155780632d83811914610336578063313ce56714610378578063395093511461039c5780633bd5d173146104025780633c9f861d146104305780634549b0391461044e57610158565b806306fdde031461015d578063095ea7b3146101e057806313114a9d1461024657806318160ddd146102645780631bbae6e01461028257806323b872dd146102b0575b600080fd5b610165610865565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610907565b604051808215151515815260200191505060405180910390f35b61024e610925565b6040518082815260200191505060405180910390f35b61026c61092f565b6040518082815260200191505060405180910390f35b6102ae6004803603602081101561029857600080fd5b8101908080359060200190929190505050610939565b005b61031c600480360360608110156102c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a6b565b604051808215151515815260200191505060405180910390f35b6103626004803603602081101561034c57600080fd5b8101908080359060200190929190505050610b44565b6040518082815260200191505060405180910390f35b610380610bc8565b604051808260ff1660ff16815260200191505060405180910390f35b6103e8600480360360408110156103b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bdf565b604051808215151515815260200191505060405180910390f35b61042e6004803603602081101561041857600080fd5b8101908080359060200190929190505050610c92565b005b610438610e23565b6040518082815260200191505060405180910390f35b6104866004803603604081101561046457600080fd5b8101908080359060200190929190803515159060200190929190505050610e2d565b6040518082815260200191505060405180910390f35b6104c8600480360360208110156104b257600080fd5b8101908080359060200190929190505050610ee4565b005b61050c600480360360208110156104e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061103b565b6040518082815260200191505060405180910390f35b61052a611126565b005b6105346112ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61057e6112d7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105be5780820151818401526020810190506105a3565b50505050905090810190601f1680156105eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106456004803603604081101561060f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611379565b604051808215151515815260200191505060405180910390f35b6106ab6004803603604081101561067557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611446565b604051808215151515815260200191505060405180910390f35b610707600480360360208110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611464565b604051808215151515815260200191505060405180910390f35b6107836004803603604081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114ba565b6040518082815260200191505060405180910390f35b6107db600480360360208110156107af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611541565b005b61081f600480360360208110156107f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118f5565b005b6108636004803603602081101561083757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b02565b005b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108fd5780601f106108d2576101008083540402835291602001916108fd565b820191906000526020600020905b8154815290600101906020018083116108e057829003601f168201915b5050505050905090565b600061091b610914611e90565b8484611e98565b6001905092915050565b6000600854905090565b6000600654905090565b610941611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b65082f79cd9000811015610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061383f6029913960400191505060405180910390fd5b80600f8190555050565b6000610a7884848461208f565b610b3984610a84611e90565b610b34856040518060600160405280602881526020016138b160289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aea611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125bf9092919063ffffffff16565b611e98565b600190509392505050565b6000600754821115610ba1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806137cd602a913960400191505060405180910390fd5b6000610bab61267f565b9050610bc081846126aa90919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610c88610bec611e90565b84610c838560036000610bfd611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b611e98565b6001905092915050565b6000610c9c611e90565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061396d602c913960400191505060405180910390fd5b6000610d4c8361277c565b50505050509050610da581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610dfd816007546127e490919063ffffffff16565b600781905550610e18836008546126f490919063ffffffff16565b600881905550505050565b6000600954905090565b6000600654831115610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610ec7576000610eb78461277c565b5050505050905080915050610ede565b6000610ed28461277c565b50505050915050809150505b92915050565b610eec611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015610fbf5750600a8111155b611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b80600d8190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110d657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611121565b61111e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b90505b919050565b61112e611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561136f5780601f106113445761010080835404028352916020019161136f565b820191906000526020600020905b81548152906001019060200180831161135257829003601f168201915b5050505050905090565b600061143c611386611e90565b846114378560405180606001604052806025815260200161399960259139600360006113b0611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125bf9092919063ffffffff16565b611e98565b6001905092915050565b600061145a611453611e90565b848461208f565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611549611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061394b6022913960400191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611837576117f3600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118fd611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806137f76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b0a611e90565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60008090505b600580549050811015611e8c578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611cc157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e7f57600560016005805490500381548110611d1d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611d5557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611e4557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611e8c565b8080600101915050611c90565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806139276024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061381d6022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806139026025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561219b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806137aa6023913960400191505060405180910390fd5b600081116121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806138d96029913960400191505060405180910390fd5b6121fc6112ae565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561226a575061223a6112ae565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122cb57600f548111156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806138686028913960400191505060405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561236e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123835761237e83838361282e565b6125ba565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124265750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561243b57612436838383612aac565b6125b9565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124df5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124f4576124ef838383612d2a565b6125b8565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125965750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125ab576125a6838383612f13565b6125b7565b6125b6838383612d2a565b5b5b5b5b505050565b600083831115829061266c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612631578082015181840152602081019050612616565b50505050905090810190601f16801561265e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061268c613226565b915091506126a381836126aa90919063ffffffff16565b9250505090565b60006126ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134ba565b905092915050565b600080828401905083811015612772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006127998a600d54600e54613580565b92509250925060006127a961267f565b905060008060006127bc8e878787613616565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061282683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125bf565b905092915050565b600061283861267f565b905060008060008060008061284c8861277c565b955095509550955095509550600061286d888361369f90919063ffffffff16565b90506128c189600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295687600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129eb86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a3a85828585613725565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000612ab661267f565b9050600080600080600080612aca8861277c565b9550955095509550955095506000612aeb888361369f90919063ffffffff16565b9050612b3f87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bd484600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c6986600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cb885828585613725565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000612d3461267f565b9050600080600080600080612d488861277c565b9550955095509550955095506000612d69888361369f90919063ffffffff16565b9050612dbd87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e5286600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ea185828585613725565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000612f1d61267f565b9050600080600080600080612f318861277c565b9550955095509550955095506000612f52888361369f90919063ffffffff16565b9050612fa689600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303b87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e490919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130d084600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061316586600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131b485828585613725565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600080600060075490506000600654905060008090505b60058054905081101561347d5782600160006005848154811061325c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061334357508160026000600584815481106132db57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561335a57600754600654945094505050506134b6565b6133e3600160006005848154811061336e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846127e490919063ffffffff16565b925061346e60026000600584815481106133f957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836127e490919063ffffffff16565b9150808060010191505061323d565b506134956006546007546126aa90919063ffffffff16565b8210156134ad576007546006549350935050506134b6565b81819350935050505b9091565b60008083118290613566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561352b578082015181840152602081019050613510565b50505050905090810190601f1680156135585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161357257fe5b049050809150509392505050565b6000806000806135ac606461359e888a61369f90919063ffffffff16565b6126aa90919063ffffffff16565b905060006135d660646135c8888b61369f90919063ffffffff16565b6126aa90919063ffffffff16565b905060006135ff826135f1858c6127e490919063ffffffff16565b6127e490919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061362f858961369f90919063ffffffff16565b90506000613646868961369f90919063ffffffff16565b9050600061365d878961369f90919063ffffffff16565b905060006136868261367885876127e490919063ffffffff16565b6127e490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808314156136b2576000905061371f565b60008284029050828482816136c357fe5b041461371a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806138906021913960400191505060405180910390fd5b809150505b92915050565b61374c8361373e866007546127e490919063ffffffff16565b6127e490919063ffffffff16565b600781905550613767826008546126f490919063ffffffff16565b600881905550613782816009546126f490919063ffffffff16565b60098190555061379d816006546127e490919063ffffffff16565b6006819055505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736d61785478416d6f756e742073686f756c642062652067726561746572207468616e203930303065395472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dbc8c6303e3a10ef89656f8d79cb44999444588eadb9bfd807ae78fbe5128de464736f6c63430006020033

Deployed Bytecode Sourcemap

18654:12148:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18654:12148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19648:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19648:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20560:161;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20560:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21671:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19925:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30600:199;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30600:199:0;;;;;;;;;;;;;;;;;:::i;:::-;;20729:313;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20729:313:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22695:253;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22695:253:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19834:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21050:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21050:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21866:377;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21866:377:0;;;;;;;;;;;;;;;;;:::i;:::-;;21770:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22251:436;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22251:436:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30419:169;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30419:169:0;;;;;;;;;;;;;;;;;:::i;:::-;;20028:198;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20028:198:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17704:148;;;:::i;:::-;;17062:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19739:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19739:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21276:269;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21276:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20234:167;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20234:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21553:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21553:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20409:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20409:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22956:443;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22956:443:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18007:244;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18007:244:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;23407:478;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23407:478:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;19648:83;19685:13;19718:5;19711:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19648:83;:::o;20560:161::-;20635:4;20652:39;20661:12;:10;:12::i;:::-;20675:7;20684:6;20652:8;:39::i;:::-;20709:4;20702:11;;20560:161;;;;:::o;21671:87::-;21713:7;21740:10;;21733:17;;21671:87;:::o;19925:95::-;19978:7;20005;;19998:14;;19925:95;:::o;30600:199::-;17284:12;:10;:12::i;:::-;17274:22;;:6;;;;;;;;;;;:22;;;17266:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30701:6:::1;30686:11;:21;;30678:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30780:11;30765:12;:26;;;;30600:199:::0;:::o;20729:313::-;20827:4;20844:36;20854:6;20862:9;20873:6;20844:9;:36::i;:::-;20891:121;20900:6;20908:12;:10;:12::i;:::-;20922:89;20960:6;20922:89;;;;;;;;;;;;;;;;;:11;:19;20934:6;20922:19;;;;;;;;;;;;;;;:33;20942:12;:10;:12::i;:::-;20922:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20891:8;:121::i;:::-;21030:4;21023:11;;20729:313;;;;;:::o;22695:253::-;22761:7;22800;;22789;:18;;22781:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22865:19;22888:10;:8;:10::i;:::-;22865:33;;22916:24;22928:11;22916:7;:11;;:24;;;;:::i;:::-;22909:31;;;22695:253;;;:::o;19834:83::-;19875:5;19900:9;;;;;;;;;;;19893:16;;19834:83;:::o;21050:218::-;21138:4;21155:83;21164:12;:10;:12::i;:::-;21178:7;21187:50;21226:10;21187:11;:25;21199:12;:10;:12::i;:::-;21187:25;;;;;;;;;;;;;;;:34;21213:7;21187:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21155:8;:83::i;:::-;21256:4;21249:11;;21050:218;;;;:::o;21866:377::-;21918:14;21935:12;:10;:12::i;:::-;21918:29;;21967:11;:19;21979:6;21967:19;;;;;;;;;;;;;;;;;;;;;;;;;21966:20;21958:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22047:15;22071:19;22082:7;22071:10;:19::i;:::-;22046:44;;;;;;;22119:28;22139:7;22119;:15;22127:6;22119:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22101:7;:15;22109:6;22101:15;;;;;;;;;;;;;;;:46;;;;22168:20;22180:7;22168;;:11;;:20;;;;:::i;:::-;22158:7;:30;;;;22212:23;22227:7;22212:10;;:14;;:23;;;;:::i;:::-;22199:10;:36;;;;21866:377;;;:::o;21770:88::-;21812:7;21839:11;;21832:18;;21770:88;:::o;22251:436::-;22341:7;22380;;22369;:18;;22361:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22439:17;22434:246;;22474:15;22498:19;22509:7;22498:10;:19::i;:::-;22473:44;;;;;;;22539:7;22532:14;;;;;22434:246;22581:23;22612:19;22623:7;22612:10;:19::i;:::-;22579:52;;;;;;;22653:15;22646:22;;;22251:436;;;;;:::o;30419:169::-;17284:12;:10;:12::i;:::-;17274:22;;:6;;;;;;;;;;;:22;;;17266:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30505:1:::1;30495:6;:11;;:27;;;;;30520:2;30510:6;:12;;30495:27;30487:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30574:6;30564:7;:16;;;;30419:169:::0;:::o;20028:198::-;20094:7;20118:11;:20;20130:7;20118:20;;;;;;;;;;;;;;;;;;;;;;;;;20114:49;;;20147:7;:16;20155:7;20147:16;;;;;;;;;;;;;;;;20140:23;;;;20114:49;20181:37;20201:7;:16;20209:7;20201:16;;;;;;;;;;;;;;;;20181:19;:37::i;:::-;20174:44;;20028:198;;;;:::o;17704:148::-;17284:12;:10;:12::i;:::-;17274:22;;:6;;;;;;;;;;;:22;;;17266:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17811:1:::1;17774:40;;17795:6;::::0;::::1;;;;;;;;;17774:40;;;;;;;;;;;;17842:1;17825:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17704:148::o:0;17062:79::-;17100:7;17127:6;;;;;;;;;;;17120:13;;17062:79;:::o;19739:87::-;19778:13;19811:7;19804:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19739:87;:::o;21276:269::-;21369:4;21386:129;21395:12;:10;:12::i;:::-;21409:7;21418:96;21457:15;21418:96;;;;;;;;;;;;;;;;;:11;:25;21430:12;:10;:12::i;:::-;21418:25;;;;;;;;;;;;;;;:34;21444:7;21418:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21386:8;:129::i;:::-;21533:4;21526:11;;21276:269;;;;:::o;20234:167::-;20312:4;20329:42;20339:12;:10;:12::i;:::-;20353:9;20364:6;20329:9;:42::i;:::-;20389:4;20382:11;;20234:167;;;;:::o;21553:110::-;21611:4;21635:11;:20;21647:7;21635:20;;;;;;;;;;;;;;;;;;;;;;;;;21628:27;;21553:110;;;:::o;20409:143::-;20490:7;20517:11;:18;20529:5;20517:18;;;;;;;;;;;;;;;:27;20536:7;20517:27;;;;;;;;;;;;;;;;20510:34;;20409:143;;;;:::o;22956:443::-;17284:12;:10;:12::i;:::-;17274:22;;:6;;;;;;;;;;;:22;;;17266:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23048:42:::1;23037:53;;:7;:53;;;;23029:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23149:11;:20;23161:7;23149:20;;;;;;;;;;;;;;;;;;;;;;;;;23148:21;23140:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23234:1;23215:7;:16;23223:7;23215:16;;;;;;;;;;;;;;;;:20;23212:108;;;23271:37;23291:7;:16;23299:7;23291:16;;;;;;;;;;;;;;;;23271:19;:37::i;:::-;23252:7;:16;23260:7;23252:16;;;;;;;;;;;;;;;:56;;;;23212:108;23353:4;23330:11;:20;23342:7;23330:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23368:9;23383:7;23368:23;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;23368:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22956:443:::0;:::o;18007:244::-;17284:12;:10;:12::i;:::-;17274:22;;:6;;;;;;;;;;;:22;;;17266:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18116:1:::1;18096:22;;:8;:22;;;;18088:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18206:8;18177:38;;18198:6;::::0;::::1;;;;;;;;;18177:38;;;;;;;;;;;;18235:8;18226:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18007:244:::0;:::o;23407:478::-;17284:12;:10;:12::i;:::-;17274:22;;:6;;;;;;;;;;;:22;;;17266:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23488:11:::1;:20;23500:7;23488:20;;;;;;;;;;;;;;;;;;;;;;;;;23480:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23556:9;23568:1:::0;23556:13:::1;;23551:327;23575:9;:16;;;;23571:1;:20;23551:327;;;23633:7;23617:23;;:9;23627:1;23617:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;23613:254;;;23676:9;23705:1;23686:9;:16;;;;:20;23676:31;;;;;;;;;;;;;;;;;;;;;;;;;23661:9;23671:1;23661:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23745:1;23726:7;:16;23734:7;23726:16;;;;;;;;;;;;;;;:20;;;;23788:5;23765:11;:20;23777:7;23765:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23812:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23846:5;;23613:254;23593:3;;;;;;;23551:327;;;;23407:478:::0;:::o;1026:106::-;1079:15;1114:10;1107:17;;1026:106;:::o;23893:337::-;24003:1;23986:19;;:5;:19;;;;23978:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24084:1;24065:21;;:7;:21;;;;24057:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24168:6;24138:11;:18;24150:5;24138:18;;;;;;;;;;;;;;;:27;24157:7;24138:27;;;;;;;;;;;;;;;:36;;;;24206:7;24190:32;;24199:5;24190:32;;;24215:6;24190:32;;;;;;;;;;;;;;;;;;23893:337;;;:::o;24238:1096::-;24353:1;24335:20;;:6;:20;;;;24327:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24437:1;24416:23;;:9;:23;;;;24408:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24507:1;24498:6;:10;24490:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24588:7;:5;:7::i;:::-;24578:17;;:6;:17;;;;:41;;;;;24612:7;:5;:7::i;:::-;24599:20;;:9;:20;;;;24578:41;24575:134;;;24652:12;;24642:6;:22;;24634:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24575:134;24734:11;:19;24746:6;24734:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24758:11;:22;24770:9;24758:22;;;;;;;;;;;;;;;;;;;;;;;;;24757:23;24734:46;24730:597;;;24797:48;24819:6;24827:9;24838:6;24797:21;:48::i;:::-;24730:597;;;24868:11;:19;24880:6;24868:19;;;;;;;;;;;;;;;;;;;;;;;;;24867:20;:46;;;;;24891:11;:22;24903:9;24891:22;;;;;;;;;;;;;;;;;;;;;;;;;24867:46;24863:464;;;24930:46;24950:6;24958:9;24969:6;24930:19;:46::i;:::-;24863:464;;;24999:11;:19;25011:6;24999:19;;;;;;;;;;;;;;;;;;;;;;;;;24998:20;:47;;;;;25023:11;:22;25035:9;25023:22;;;;;;;;;;;;;;;;;;;;;;;;;25022:23;24998:47;24994:333;;;25062:44;25080:6;25088:9;25099:6;25062:17;:44::i;:::-;24994:333;;;25128:11;:19;25140:6;25128:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25151:11;:22;25163:9;25151:22;;;;;;;;;;;;;;;;;;;;;;;;;25128:45;25124:203;;;25190:48;25212:6;25220:9;25231:6;25190:21;:48::i;:::-;25124:203;;;25271:44;25289:6;25297:9;25308:6;25271:17;:44::i;:::-;25124:203;24994:333;24863:464;24730:597;24238:1096;;;:::o;6089:192::-;6175:7;6208:1;6203;:6;;6211:12;6195:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6195:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6235:9;6251:1;6247;:5;6235:17;;6272:1;6265:8;;;6089:192;;;;;:::o;29475:163::-;29516:7;29537:15;29554;29573:19;:17;:19::i;:::-;29536:56;;;;29610:20;29622:7;29610;:11;;:20;;;;:::i;:::-;29603:27;;;;29475:163;:::o;7487:132::-;7545:7;7572:39;7576:1;7579;7572:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7565:46;;7487:132;;;;:::o;5186:181::-;5244:7;5264:9;5280:1;5276;:5;5264:17;;5305:1;5300;:6;;5292:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5358:1;5351:8;;;5186:181;;;;:::o;28223:468::-;28282:7;28291;28300;28309;28318;28327;28348:23;28373:12;28387:13;28404:39;28416:7;28425;;28434:8;;28404:11;:39::i;:::-;28347:96;;;;;;28454:19;28477:10;:8;:10::i;:::-;28454:33;;28499:15;28516:23;28541:12;28557:46;28569:7;28578:4;28584:5;28591:11;28557;:46::i;:::-;28498:105;;;;;;28622:7;28631:15;28648:4;28654:15;28671:4;28677:5;28614:69;;;;;;;;;;;;;;;;;;;28223:468;;;;;;;:::o;5650:136::-;5708:7;5735:43;5739:1;5742;5735:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5728:50;;5650:136;;;;:::o;26585:632::-;26687:19;26710:10;:8;:10::i;:::-;26687:33;;26732:15;26749:23;26774:12;26788:23;26813:12;26827:13;26844:19;26855:7;26844:10;:19::i;:::-;26731:132;;;;;;;;;;;;26874:13;26891:22;26901:11;26891:5;:9;;:22;;;;:::i;:::-;26874:39;;26942:28;26962:7;26942;:15;26950:6;26942:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26924:7;:15;26932:6;26924:15;;;;;;;;;;;;;;;:46;;;;26999:28;27019:7;26999;:15;27007:6;26999:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26981:7;:15;26989:6;26981:15;;;;;;;;;;;;;;;:46;;;;27059:39;27082:15;27059:7;:18;27067:9;27059:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27038:7;:18;27046:9;27038:18;;;;;;;;;;;;;;;:60;;;;27112:37;27124:4;27130:5;27137:4;27143:5;27112:11;:37::i;:::-;27182:9;27165:44;;27174:6;27165:44;;;27193:15;27165:44;;;;;;;;;;;;;;;;;;26585:632;;;;;;;;;;;:::o;25925:652::-;26025:19;26048:10;:8;:10::i;:::-;26025:33;;26070:15;26087:23;26112:12;26126:23;26151:12;26165:13;26182:19;26193:7;26182:10;:19::i;:::-;26069:132;;;;;;;;;;;;26212:13;26229:22;26239:11;26229:5;:9;;:22;;;;:::i;:::-;26212:39;;26280:28;26300:7;26280;:15;26288:6;26280:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26262:7;:15;26270:6;26262:15;;;;;;;;;;;;;;;:46;;;;26340:39;26363:15;26340:7;:18;26348:9;26340:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26319:7;:18;26327:9;26319:18;;;;;;;;;;;;;;;:60;;;;26411:39;26434:15;26411:7;:18;26419:9;26411:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26390:7;:18;26398:9;26390:18;;;;;;;;;;;;;;;:60;;;;26472:37;26484:4;26490:5;26497:4;26503:5;26472:11;:37::i;:::-;26542:9;26525:44;;26534:6;26525:44;;;26553:15;26525:44;;;;;;;;;;;;;;;;;;25925:652;;;;;;;;;;;:::o;25342:575::-;25440:19;25463:10;:8;:10::i;:::-;25440:33;;25485:15;25502:23;25527:12;25541:23;25566:12;25580:13;25597:19;25608:7;25597:10;:19::i;:::-;25484:132;;;;;;;;;;;;25627:13;25644:22;25654:11;25644:5;:9;;:22;;;;:::i;:::-;25627:39;;25695:28;25715:7;25695;:15;25703:6;25695:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25677:7;:15;25685:6;25677:15;;;;;;;;;;;;;;;:46;;;;25755:39;25778:15;25755:7;:18;25763:9;25755:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25734:7;:18;25742:9;25734:18;;;;;;;;;;;;;;;:60;;;;25812:37;25824:4;25830:5;25837:4;25843:5;25812:11;:37::i;:::-;25882:9;25865:44;;25874:6;25865:44;;;25893:15;25865:44;;;;;;;;;;;;;;;;;;25342:575;;;;;;;;;;;:::o;27225:708::-;27327:19;27350:10;:8;:10::i;:::-;27327:33;;27372:15;27389:23;27414:12;27428:23;27453:12;27467:13;27484:19;27495:7;27484:10;:19::i;:::-;27371:132;;;;;;;;;;;;27514:13;27531:22;27541:11;27531:5;:9;;:22;;;;:::i;:::-;27514:39;;27582:28;27602:7;27582;:15;27590:6;27582:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27564:7;:15;27572:6;27564:15;;;;;;;;;;;;;;;:46;;;;27639:28;27659:7;27639;:15;27647:6;27639:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27621:7;:15;27629:6;27621:15;;;;;;;;;;;;;;;:46;;;;27699:39;27722:15;27699:7;:18;27707:9;27699:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27678:7;:18;27686:9;27678:18;;;;;;;;;;;;;;;:60;;;;27770:39;27793:15;27770:7;:18;27778:9;27770:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27749:7;:18;27757:9;27749:18;;;;;;;;;;;;;;;:60;;;;27828:37;27840:4;27846:5;27853:4;27859:5;27828:11;:37::i;:::-;27898:9;27881:44;;27890:6;27881:44;;;27909:15;27881:44;;;;;;;;;;;;;;;;;;27225:708;;;;;;;;;;;:::o;29646:561::-;29696:7;29705;29725:15;29743:7;;29725:25;;29761:15;29779:7;;29761:25;;29808:9;29820:1;29808:13;;29803:289;29827:9;:16;;;;29823:1;:20;29803:289;;;29893:7;29869;:21;29877:9;29887:1;29877:12;;;;;;;;;;;;;;;;;;;;;;;;;29869:21;;;;;;;;;;;;;;;;:31;:66;;;;29928:7;29904;:21;29912:9;29922:1;29912:12;;;;;;;;;;;;;;;;;;;;;;;;;29904:21;;;;;;;;;;;;;;;;:31;29869:66;29865:97;;;29945:7;;29954;;29937:25;;;;;;;;;29865:97;29987:34;29999:7;:21;30007:9;30017:1;30007:12;;;;;;;;;;;;;;;;;;;;;;;;;29999:21;;;;;;;;;;;;;;;;29987:7;:11;;:34;;;;:::i;:::-;29977:44;;30046:34;30058:7;:21;30066:9;30076:1;30066:12;;;;;;;;;;;;;;;;;;;;;;;;;30058:21;;;;;;;;;;;;;;;;30046:7;:11;;:34;;;;:::i;:::-;30036:44;;29845:3;;;;;;;29803:289;;;;30116:20;30128:7;;30116;;:11;;:20;;;;:::i;:::-;30106:7;:30;30102:61;;;30146:7;;30155;;30138:25;;;;;;;;30102:61;30182:7;30191;30174:25;;;;;;29646:561;;;:::o;8115:278::-;8201:7;8233:1;8229;:5;8236:12;8221:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8221:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8260:9;8276:1;8272;:5;;;;;;8260:17;;8384:1;8377:8;;;8115:278;;;;;:::o;28699:351::-;28792:7;28801;28810;28830:12;28845:28;28869:3;28845:19;28857:6;28845:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;28830:43;;28884:13;28900:29;28925:3;28900:20;28912:7;28900;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;28884:45;;28940:23;28966:28;28988:5;28966:17;28978:4;28966:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;28940:54;;29013:15;29030:4;29036:5;29005:37;;;;;;;;;28699:351;;;;;;;:::o;29058:409::-;29168:7;29177;29186;29206:15;29224:24;29236:11;29224:7;:11;;:24;;;;:::i;:::-;29206:42;;29259:12;29274:21;29283:11;29274:4;:8;;:21;;;;:::i;:::-;29259:36;;29306:13;29322:22;29332:11;29322:5;:9;;:22;;;;:::i;:::-;29306:38;;29355:23;29381:28;29403:5;29381:17;29393:4;29381:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;29355:54;;29428:7;29437:15;29454:4;29420:39;;;;;;;;;;29058:409;;;;;;;;:::o;6540:471::-;6598:7;6848:1;6843;:6;6839:47;;;6873:1;6866:8;;;;6839:47;6898:9;6914:1;6910;:5;6898:17;;6943:1;6938;6934;:5;;;;;;:10;6926:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7002:1;6995:8;;;6540:471;;;;;:::o;27941:274::-;28049:28;28071:5;28049:17;28061:4;28049:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;28039:7;:38;;;;28101:20;28116:4;28101:10;;:14;;:20;;;;:::i;:::-;28088:10;:33;;;;28146:22;28162:5;28146:11;;:15;;:22;;;;:::i;:::-;28132:11;:36;;;;28189:18;28201:5;28189:7;;:11;;:18;;;;:::i;:::-;28179:7;:28;;;;27941:274;;;;:::o

Swarm Source

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