Token kogecoin.io

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
50,000,000 KOGECOIN

Holders:
4,650 addresses

Transfers:
-

Contract:
0x13748d548d95d78a3c83fe3f32604b4796cffa230x13748d548D95D78a3c83fe3F32604B4796CFfa23

Decimals:
9

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Koge

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.6.12;

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;
    }
}

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

    string private _name = 'kogecoin.io';
    string private _symbol = 'KOGECOIN';
    uint8 private _decimals = 9;
    uint8 private FeeFrac = 0;

    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 reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

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

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

    function setFeeFrac(uint8 newFeeFrac) external onlyOwner() {
        require(newFeeFrac<=8, "Fee cannot be greater than 8 percent");
        FeeFrac = newFeeFrac;
    }

    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 (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

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

608060405266b1a2bc2ec50000600019816200001757fe5b06600019036006556040518060400160405280600b81526020017f6b6f6765636f696e2e696f000000000000000000000000000000000000000000815250600890805190602001906200006c92919062000290565b506040518060400160405280600881526020017f4b4f4745434f494e00000000000000000000000000000000000000000000000081525060099080519060200190620000ba92919062000290565b506009600a60006101000a81548160ff021916908360ff1602179055506000600a60016101000a81548160ff021916908360ff1602179055503480156200010057600080fd5b506000620001136200028860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060065460016000620001c86200028860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002166200028860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef66b1a2bc2ec500006040518082815260200191505060405180910390a362000336565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002d357805160ff191683800117855562000304565b8280016001018555821562000304579182015b8281111562000303578251825591602001919060010190620002e6565b5b50905062000313919062000317565b5090565b5b808211156200033257600081600090555060010162000318565b5090565b61350b80620003466000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063a9059cbb1161007c578063a9059cbb146105df578063cba0e99614610643578063dd62ed3e1461069d578063f2cc0c1814610715578063f2fde38b14610759578063f84354f11461079d57610142565b8063715018a6146104895780637341d469146104935780638da5cb5b146104c457806395d89b41146104f8578063a457c2d71461057b57610142565b806323b872dd1161010a57806323b872dd146102985780632d8381191461031c578063313ce5671461035e578063395093511461037f5780634549b039146103e357806370a082311461043157610142565b8063053ab1821461014757806306fdde0314610175578063095ea7b3146101f857806313114a9d1461025c57806318160ddd1461027a575b600080fd5b6101736004803603602081101561015d57600080fd5b81019080803590602001909291905050506107e1565b005b61017d610971565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101bd5780820151818401526020810190506101a2565b50505050905090810190601f1680156101ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102446004803603604081101561020e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a13565b60405180821515815260200191505060405180910390f35b610264610a31565b6040518082815260200191505060405180910390f35b610282610a3b565b6040518082815260200191505060405180910390f35b610304600480360360608110156102ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a4a565b60405180821515815260200191505060405180910390f35b6103486004803603602081101561033257600080fd5b8101908080359060200190929190505050610b23565b6040518082815260200191505060405180910390f35b610366610ba7565b604051808260ff16815260200191505060405180910390f35b6103cb6004803603604081101561039557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bbe565b60405180821515815260200191505060405180910390f35b61041b600480360360408110156103f957600080fd5b8101908080359060200190929190803515159060200190929190505050610c71565b6040518082815260200191505060405180910390f35b6104736004803603602081101561044757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d2b565b6040518082815260200191505060405180910390f35b610491610e16565b005b6104c2600480360360208110156104a957600080fd5b81019080803560ff169060200190929190505050610f9c565b005b6104cc6110df565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610500611108565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610540578082015181840152602081019050610525565b50505050905090810190601f16801561056d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105c76004803603604081101561059157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111aa565b60405180821515815260200191505060405180910390f35b61062b600480360360408110156105f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611277565b60405180821515815260200191505060405180910390f35b6106856004803603602081101561065957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611295565b60405180821515815260200191505060405180910390f35b6106ff600480360360408110156106b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112eb565b6040518082815260200191505060405180910390f35b6107576004803603602081101561072b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611372565b005b61079b6004803603602081101561076f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061168c565b005b6107df600480360360208110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611897565b005b60006107eb611c21565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613485602c913960400191505060405180910390fd5b600061089b83611c29565b5050505090506108f381600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c8190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061094b81600654611c8190919063ffffffff16565b60068190555061096683600754611ccb90919063ffffffff16565b600781905550505050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b6000610a27610a20611c21565b8484611d53565b6001905092915050565b6000600754905090565b600066b1a2bc2ec50000905090565b6000610a57848484611f4a565b610b1884610a63611c21565b610b13856040518060600160405280602881526020016133eb60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ac9611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a39092919063ffffffff16565b611d53565b600190509392505050565b6000600654821115610b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613358602a913960400191505060405180910390fd5b6000610b8a612463565b9050610b9f818461248e90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610c67610bcb611c21565b84610c628560036000610bdc611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ccb90919063ffffffff16565b611d53565b6001905092915050565b600066b1a2bc2ec50000831115610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610d0f576000610d0084611c29565b50505050905080915050610d25565b6000610d1a84611c29565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dc657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e11565b610e0e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b23565b90505b919050565b610e1e611c21565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610fa4611c21565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60088160ff1611156110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133346024913960400191505060405180910390fd5b80600a60016101000a81548160ff021916908360ff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a05780601f10611175576101008083540402835291602001916111a0565b820191906000526020600020905b81548152906001019060200180831161118357829003601f168201915b5050505050905090565b600061126d6111b7611c21565b84611268856040518060600160405280602581526020016134b160259139600360006111e1611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a39092919063ffffffff16565b611d53565b6001905092915050565b600061128b611284611c21565b8484611f4a565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61137a611c21565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115ce5761158a600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b23565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611694611c21565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133826026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61189f611c21565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600580549050811015611c1d578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611a5257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c1057600560016005805490500381548110611aae57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611ae657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611bd657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611c1d565b8080600101915050611a21565b5050565b600033905090565b6000806000806000806000611c3d886124d8565b915091506000611c4b612463565b90506000806000611c5d8c868661253b565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000611cc383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a3565b905092915050565b600080828401905083811015611d49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134616024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806133a86022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061343c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612056576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806133116023913960400191505060405180910390fd5b600081116120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806134136029913960400191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121525750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561216757612162838383612599565b61239e565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561220a5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561221f5761221a8383836127ec565b61239d565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122c35750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122d8576122d3838383612a3f565b61239c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561237a5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561238f5761238a838383612bfd565b61239b565b61239a838383612a3f565b5b5b5b5b505050565b6000838311158290612450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124155780820151818401526020810190506123fa565b50505050905090810190601f1680156124425780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000612470612ee5565b91509150612487818361248e90919063ffffffff16565b9250505090565b60006124d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061318a565b905092915050565b6000806000612515600a60019054906101000a900460ff1660ff1661250760648761248e90919063ffffffff16565b61325090919063ffffffff16565b9050600061252c8286611c8190919063ffffffff16565b90508082935093505050915091565b600080600080612554858861325090919063ffffffff16565b9050600061256b868861325090919063ffffffff16565b905060006125828284611c8190919063ffffffff16565b905082818395509550955050505093509350939050565b60008060008060006125aa86611c29565b9450945094509450945061260686600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c8190919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061269b85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c8190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061273084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ccb90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061277d83826132d6565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006127fd86611c29565b9450945094509450945061285985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c8190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128ee82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ccb90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061298384600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ccb90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129d083826132d6565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612a5086611c29565b94509450945094509450612aac85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c8190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b4184600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ccb90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b8e83826132d6565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612c0e86611c29565b94509450945094509450612c6a86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c8190919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cff85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c8190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9482600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ccb90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e2984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ccb90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e7683826132d6565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060006006549050600066b1a2bc2ec50000905060005b60058054905081101561314357826001600060058481548110612f1d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806130045750816002600060058481548110612f9c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156130205760065466b1a2bc2ec5000094509450505050613186565b6130a9600160006005848154811061303457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611c8190919063ffffffff16565b925061313460026000600584815481106130bf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611c8190919063ffffffff16565b91508080600101915050612efe565b5061316066b1a2bc2ec5000060065461248e90919063ffffffff16565b82101561317d5760065466b1a2bc2ec50000935093505050613186565b81819350935050505b9091565b60008083118290613236576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131fb5780820151818401526020810190506131e0565b50505050905090810190601f1680156132285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161324257fe5b049050809150509392505050565b60008083141561326357600090506132d0565b600082840290508284828161327457fe5b04146132cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133ca6021913960400191505060405180910390fd5b809150505b92915050565b6132eb82600654611c8190919063ffffffff16565b60068190555061330681600754611ccb90919063ffffffff16565b600781905550505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734665652063616e6e6f742062652067726561746572207468616e20382070657263656e74416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208c3fabce7aeb77bb4063cd1b1e303a227588eff78c4008e12d31ddd5dac4ec7064736f6c634300060c0033

Deployed ByteCode Sourcemap

15562:10375:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18559:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16441:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17353:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18464:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16718:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17522:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19385:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16627:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17843:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18943:434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16821:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15008:148;;;:::i;:::-;;19986:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14366:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16532:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18069:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17027:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18346:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17202:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19646:332;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15311:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20165:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18559:376;18611:14;18628:12;:10;:12::i;:::-;18611:29;;18660:11;:19;18672:6;18660:19;;;;;;;;;;;;;;;;;;;;;;;;;18659:20;18651:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18740:15;18763:19;18774:7;18763:10;:19::i;:::-;18739:43;;;;;;18811:28;18831:7;18811;:15;18819:6;18811:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;18793:7;:15;18801:6;18793:15;;;;;;;;;;;;;;;:46;;;;18860:20;18872:7;18860;;:11;;:20;;;;:::i;:::-;18850:7;:30;;;;18904:23;18919:7;18904:10;;:14;;:23;;;;:::i;:::-;18891:10;:36;;;;18559:376;;;:::o;16441:83::-;16478:13;16511:5;16504:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16441:83;:::o;17353:161::-;17428:4;17445:39;17454:12;:10;:12::i;:::-;17468:7;17477:6;17445:8;:39::i;:::-;17502:4;17495:11;;17353:161;;;;:::o;18464:87::-;18506:7;18533:10;;18526:17;;18464:87;:::o;16718:95::-;16771:7;16033:18;16791:14;;16718:95;:::o;17522:313::-;17620:4;17637:36;17647:6;17655:9;17666:6;17637:9;:36::i;:::-;17684:121;17693:6;17701:12;:10;:12::i;:::-;17715:89;17753:6;17715:89;;;;;;;;;;;;;;;;;:11;:19;17727:6;17715:19;;;;;;;;;;;;;;;:33;17735:12;:10;:12::i;:::-;17715:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17684:8;:121::i;:::-;17823:4;17816:11;;17522:313;;;;;:::o;19385:253::-;19451:7;19490;;19479;:18;;19471:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19555:19;19578:10;:8;:10::i;:::-;19555:33;;19606:24;19618:11;19606:7;:11;;:24;;;;:::i;:::-;19599:31;;;19385:253;;;:::o;16627:83::-;16668:5;16693:9;;;;;;;;;;;16686:16;;16627:83;:::o;17843:218::-;17931:4;17948:83;17957:12;:10;:12::i;:::-;17971:7;17980:50;18019:10;17980:11;:25;17992:12;:10;:12::i;:::-;17980:25;;;;;;;;;;;;;;;:34;18006:7;17980:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17948:8;:83::i;:::-;18049:4;18042:11;;17843:218;;;;:::o;18943:434::-;19033:7;16033:18;19061:7;:18;;19053:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19131:17;19126:244;;19166:15;19189:19;19200:7;19189:10;:19::i;:::-;19165:43;;;;;;19230:7;19223:14;;;;;19126:244;19272:23;19302:19;19313:7;19302:10;:19::i;:::-;19270:51;;;;;;19343:15;19336:22;;;18943:434;;;;;:::o;16821:198::-;16887:7;16911:11;:20;16923:7;16911:20;;;;;;;;;;;;;;;;;;;;;;;;;16907:49;;;16940:7;:16;16948:7;16940:16;;;;;;;;;;;;;;;;16933:23;;;;16907:49;16974:37;16994:7;:16;17002:7;16994:16;;;;;;;;;;;;;;;;16974:19;:37::i;:::-;16967:44;;16821:198;;;;:::o;15008:148::-;14588:12;:10;:12::i;:::-;14578:22;;:6;;;;;;;;;;:22;;;14570:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15115:1:::1;15078:40;;15099:6;::::0;::::1;;;;;;;;15078:40;;;;;;;;;;;;15146:1;15129:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15008:148::o:0;19986:171::-;14588:12;:10;:12::i;:::-;14578:22;;:6;;;;;;;;;;:22;;;14570:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20076:1:::1;20064:10;:13;;;;20056:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20139:10;20129:7;;:20;;;;;;;;;;;;;;;;;;19986:171:::0;:::o;14366:79::-;14404:7;14431:6;;;;;;;;;;;14424:13;;14366:79;:::o;16532:87::-;16571:13;16604:7;16597:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16532:87;:::o;18069:269::-;18162:4;18179:129;18188:12;:10;:12::i;:::-;18202:7;18211:96;18250:15;18211:96;;;;;;;;;;;;;;;;;:11;:25;18223:12;:10;:12::i;:::-;18211:25;;;;;;;;;;;;;;;:34;18237:7;18211:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18179:8;:129::i;:::-;18326:4;18319:11;;18069:269;;;;:::o;17027:167::-;17105:4;17122:42;17132:12;:10;:12::i;:::-;17146:9;17157:6;17122:9;:42::i;:::-;17182:4;17175:11;;17027:167;;;;:::o;18346:110::-;18404:4;18428:11;:20;18440:7;18428:20;;;;;;;;;;;;;;;;;;;;;;;;;18421:27;;18346:110;;;:::o;17202:143::-;17283:7;17310:11;:18;17322:5;17310:18;;;;;;;;;;;;;;;:27;17329:7;17310:27;;;;;;;;;;;;;;;;17303:34;;17202:143;;;;:::o;19646:332::-;14588:12;:10;:12::i;:::-;14578:22;;:6;;;;;;;;;;:22;;;14570:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19728:11:::1;:20;19740:7;19728:20;;;;;;;;;;;;;;;;;;;;;;;;;19727:21;19719:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19813:1;19794:7;:16;19802:7;19794:16;;;;;;;;;;;;;;;;:20;19791:108;;;19850:37;19870:7;:16;19878:7;19870:16;;;;;;;;;;;;;;;;19850:19;:37::i;:::-;19831:7;:16;19839:7;19831:16;;;;;;;;;;;;;;;:56;;;;19791:108;19932:4;19909:11;:20;19921:7;19909:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19947:9;19962:7;19947:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19646:332:::0;:::o;15311:244::-;14588:12;:10;:12::i;:::-;14578:22;;:6;;;;;;;;;;:22;;;14570:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15420:1:::1;15400:22;;:8;:22;;;;15392:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15510:8;15481:38;;15502:6;::::0;::::1;;;;;;;;15481:38;;;;;;;;;;;;15539:8;15530:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15311:244:::0;:::o;20165:478::-;14588:12;:10;:12::i;:::-;14578:22;;:6;;;;;;;;;;:22;;;14570:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20246:11:::1;:20;20258:7;20246:20;;;;;;;;;;;;;;;;;;;;;;;;;20238:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20314:9;20309:327;20333:9;:16;;;;20329:1;:20;20309:327;;;20391:7;20375:23;;:9;20385:1;20375:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;20371:254;;;20434:9;20463:1;20444:9;:16;;;;:20;20434:31;;;;;;;;;;;;;;;;;;;;;;;;;20419:9;20429:1;20419:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20503:1;20484:7;:16;20492:7;20484:16;;;;;;;;;;;;;;;:20;;;;20546:5;20523:11;:20;20535:7;20523:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;20570:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20604:5;;20371:254;20351:3;;;;;;;20309:327;;;;20165:478:::0;:::o;61:106::-;114:15;149:10;142:17;;61:106;:::o;24197:411::-;24256:7;24265;24274;24283;24292;24313:23;24338:12;24354:20;24366:7;24354:11;:20::i;:::-;24312:62;;;;24385:19;24408:10;:8;:10::i;:::-;24385:33;;24430:15;24447:23;24472:12;24488:39;24500:7;24509:4;24515:11;24488;:39::i;:::-;24429:98;;;;;;24546:7;24555:15;24572:4;24578:15;24595:4;24538:62;;;;;;;;;;;;;;;;24197:411;;;;;;;:::o;3781:136::-;3839:7;3866:43;3870:1;3873;3866:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3859:50;;3781:136;;;;:::o;3317:181::-;3375:7;3395:9;3411:1;3407;:5;3395:17;;3436:1;3431;:6;;3423:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3489:1;3482:8;;;3317:181;;;;:::o;20651:337::-;20761:1;20744:19;;:5;:19;;;;20736:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20842:1;20823:21;;:7;:21;;;;20815:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20926:6;20896:11;:18;20908:5;20896:18;;;;;;;;;;;;;;;:27;20915:7;20896:27;;;;;;;;;;;;;;;:36;;;;20964:7;20948:32;;20957:5;20948:32;;;20973:6;20948:32;;;;;;;;;;;;;;;;;;20651:337;;;:::o;20996:931::-;21111:1;21093:20;;:6;:20;;;;21085:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21195:1;21174:23;;:9;:23;;;;21166:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21265:1;21256:6;:10;21248:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21327:11;:19;21339:6;21327:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;21351:11;:22;21363:9;21351:22;;;;;;;;;;;;;;;;;;;;;;;;;21350:23;21327:46;21323:597;;;21390:48;21412:6;21420:9;21431:6;21390:21;:48::i;:::-;21323:597;;;21461:11;:19;21473:6;21461:19;;;;;;;;;;;;;;;;;;;;;;;;;21460:20;:46;;;;;21484:11;:22;21496:9;21484:22;;;;;;;;;;;;;;;;;;;;;;;;;21460:46;21456:464;;;21523:46;21543:6;21551:9;21562:6;21523:19;:46::i;:::-;21456:464;;;21592:11;:19;21604:6;21592:19;;;;;;;;;;;;;;;;;;;;;;;;;21591:20;:47;;;;;21616:11;:22;21628:9;21616:22;;;;;;;;;;;;;;;;;;;;;;;;;21615:23;21591:47;21587:333;;;21655:44;21673:6;21681:9;21692:6;21655:17;:44::i;:::-;21587:333;;;21721:11;:19;21733:6;21721:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;21744:11;:22;21756:9;21744:22;;;;;;;;;;;;;;;;;;;;;;;;;21721:45;21717:203;;;21783:48;21805:6;21813:9;21824:6;21783:21;:48::i;:::-;21717:203;;;21864:44;21882:6;21890:9;21901:6;21864:17;:44::i;:::-;21717:203;21587:333;21456:464;21323:597;20996:931;;;:::o;4220:192::-;4306:7;4339:1;4334;:6;;4342:12;4326:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4366:9;4382:1;4378;:5;4366:17;;4403:1;4396:8;;;4220:192;;;;;:::o;25202:163::-;25243:7;25264:15;25281;25300:19;:17;:19::i;:::-;25263:56;;;;25337:20;25349:7;25337;:11;;:20;;;;:::i;:::-;25330:27;;;;25202:163;:::o;5618:132::-;5676:7;5703:39;5707:1;5710;5703:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5696:46;;5618:132;;;;:::o;24616:236::-;24676:7;24685;24705:12;24720:29;24741:7;;;;;;;;;;;24720:29;;:16;24732:3;24720:7;:11;;:16;;;;:::i;:::-;:20;;:29;;;;:::i;:::-;24705:44;;24760:23;24786:17;24798:4;24786:7;:11;;:17;;;;:::i;:::-;24760:43;;24822:15;24839:4;24814:30;;;;;;24616:236;;;:::o;24860:334::-;24955:7;24964;24973;24993:15;25011:24;25023:11;25011:7;:11;;:24;;;;:::i;:::-;24993:42;;25046:12;25061:21;25070:11;25061:4;:8;;:21;;;;:::i;:::-;25046:36;;25093:23;25119:17;25131:4;25119:7;:11;;:17;;;;:::i;:::-;25093:43;;25155:7;25164:15;25181:4;25147:39;;;;;;;;;24860:334;;;;;;;:::o;22932:509::-;23035:15;23052:23;23077:12;23091:23;23116:12;23132:19;23143:7;23132:10;:19::i;:::-;23034:117;;;;;;;;;;23180:28;23200:7;23180;:15;23188:6;23180:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23162:7;:15;23170:6;23162:15;;;;;;;;;;;;;;;:46;;;;23237:28;23257:7;23237;:15;23245:6;23237:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23219:7;:15;23227:6;23219:15;;;;;;;;;;;;;;;:46;;;;23297:39;23320:15;23297:7;:18;23305:9;23297:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;23276:7;:18;23284:9;23276:18;;;;;;;;;;;;;;;:60;;;;23350:23;23362:4;23368;23350:11;:23::i;:::-;23406:9;23389:44;;23398:6;23389:44;;;23417:15;23389:44;;;;;;;;;;;;;;;;;;22932:509;;;;;;;;:::o;22395:529::-;22496:15;22513:23;22538:12;22552:23;22577:12;22593:19;22604:7;22593:10;:19::i;:::-;22495:117;;;;;;;;;;22641:28;22661:7;22641;:15;22649:6;22641:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22623:7;:15;22631:6;22623:15;;;;;;;;;;;;;;;:46;;;;22701:39;22724:15;22701:7;:18;22709:9;22701:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22680:7;:18;22688:9;22680:18;;;;;;;;;;;;;;;:60;;;;22772:39;22795:15;22772:7;:18;22780:9;22772:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22751:7;:18;22759:9;22751:18;;;;;;;;;;;;;;;:60;;;;22833:23;22845:4;22851;22833:11;:23::i;:::-;22889:9;22872:44;;22881:6;22872:44;;;22900:15;22872:44;;;;;;;;;;;;;;;;;;22395:529;;;;;;;;:::o;21935:452::-;22034:15;22051:23;22076:12;22090:23;22115:12;22131:19;22142:7;22131:10;:19::i;:::-;22033:117;;;;;;;;;;22179:28;22199:7;22179;:15;22187:6;22179:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22161:7;:15;22169:6;22161:15;;;;;;;;;;;;;;;:46;;;;22239:39;22262:15;22239:7;:18;22247:9;22239:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22218:7;:18;22226:9;22218:18;;;;;;;;;;;;;;;:60;;;;22296:23;22308:4;22314;22296:11;:23::i;:::-;22352:9;22335:44;;22344:6;22335:44;;;22363:15;22335:44;;;;;;;;;;;;;;;;;;21935:452;;;;;;;;:::o;23449:585::-;23552:15;23569:23;23594:12;23608:23;23633:12;23649:19;23660:7;23649:10;:19::i;:::-;23551:117;;;;;;;;;;23697:28;23717:7;23697;:15;23705:6;23697:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23679:7;:15;23687:6;23679:15;;;;;;;;;;;;;;;:46;;;;23754:28;23774:7;23754;:15;23762:6;23754:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23736:7;:15;23744:6;23736:15;;;;;;;;;;;;;;;:46;;;;23814:39;23837:15;23814:7;:18;23822:9;23814:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;23793:7;:18;23801:9;23793:18;;;;;;;;;;;;;;;:60;;;;23885:39;23908:15;23885:7;:18;23893:9;23885:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;23864:7;:18;23872:9;23864:18;;;;;;;;;;;;;;;:60;;;;23943:23;23955:4;23961;23943:11;:23::i;:::-;23999:9;23982:44;;23991:6;23982:44;;;24010:15;23982:44;;;;;;;;;;;;;;;;;;23449:585;;;;;;;;:::o;25373:561::-;25423:7;25432;25452:15;25470:7;;25452:25;;25488:15;16033:18;25488:25;;25535:9;25530:289;25554:9;:16;;;;25550:1;:20;25530:289;;;25620:7;25596;:21;25604:9;25614:1;25604:12;;;;;;;;;;;;;;;;;;;;;;;;;25596:21;;;;;;;;;;;;;;;;:31;:66;;;;25655:7;25631;:21;25639:9;25649:1;25639:12;;;;;;;;;;;;;;;;;;;;;;;;;25631:21;;;;;;;;;;;;;;;;:31;25596:66;25592:97;;;25672:7;;16033:18;25664:25;;;;;;;;;25592:97;25714:34;25726:7;:21;25734:9;25744:1;25734:12;;;;;;;;;;;;;;;;;;;;;;;;;25726:21;;;;;;;;;;;;;;;;25714:7;:11;;:34;;;;:::i;:::-;25704:44;;25773:34;25785:7;:21;25793:9;25803:1;25793:12;;;;;;;;;;;;;;;;;;;;;;;;;25785:21;;;;;;;;;;;;;;;;25773:7;:11;;:34;;;;:::i;:::-;25763:44;;25572:3;;;;;;;25530:289;;;;25843:20;16033:18;25843:7;;:11;;:20;;;;:::i;:::-;25833:7;:30;25829:61;;;25873:7;;16033:18;25865:25;;;;;;;;25829:61;25909:7;25918;25901:25;;;;;;25373:561;;;:::o;6246:278::-;6332:7;6364:1;6360;:5;6367:12;6352:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6391:9;6407:1;6403;:5;;;;;;6391:17;;6515:1;6508:8;;;6246:278;;;;;:::o;4671:471::-;4729:7;4979:1;4974;:6;4970:47;;;5004:1;4997:8;;;;4970:47;5029:9;5045:1;5041;:5;5029:17;;5074:1;5069;5065;:5;;;;;;:10;5057:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5133:1;5126:8;;;4671:471;;;;;:::o;24042:147::-;24120:17;24132:4;24120:7;;:11;;:17;;;;:::i;:::-;24110:7;:27;;;;24161:20;24176:4;24161:10;;:14;;:20;;;;:::i;:::-;24148:10;:33;;;;24042:147;;:::o

Swarm Source

ipfs://8c3fabce7aeb77bb4063cd1b1e303a227588eff78c4008e12d31ddd5dac4ec70
Loading