Token

Overview

Total Supply:
0 N/A

Holders:
0 addresses

Transfers:
-

Contract:
0xF7B0FD49C5233eD0E24529A6164C9509cd383BA40xF7B0FD49C5233eD0E24529A6164C9509cd383BA4

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MamboScorer

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 2 of 5 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 3 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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 4 of 5 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 5 of 5 : MamboScorer.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.11;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";

contract MamboScorer is Ownable {

    mapping(address => bool) public grandfathered;
    bool public globalCanBot = true;

    uint256 public mambonautScore = 5;
    uint256 public vloaterScore = 3;
    uint256 public pairScore = 2;

    address public mambonauts = 0x2EE475A5CdC31c040ba1af3B0C4D66CA5C31c49a;
    address public vloaters = 0x365AF8B26A4b476D986B719d165710Fc2AC9f261;
    uint256 public whaleBreakpoint = 150;

    struct WalletScore {
        address wallet;
        uint256 score;
    }

    function setGlobalCanBot(bool status) public onlyOwner {
        globalCanBot = status;
    }

    function setWhaleBreakpoint(uint256 breakpoint_) public onlyOwner {
        whaleBreakpoint = breakpoint_;
    }
    
    function setMambonautScore(uint256 mambonautScore_) public onlyOwner {
        mambonautScore = mambonautScore_;
    }

    function setVloaterScore(uint256 vloaterScore_) public onlyOwner {
        vloaterScore = vloaterScore_;
    }

    function setPairScore(uint256 pairScore_) public onlyOwner {
        pairScore = pairScore_;
    }

    function setMambonauts(address mambonauts_) public onlyOwner {
        mambonauts = mambonauts_;
    }

    function setVloaters(address vloaters_) public onlyOwner {
        vloaters = vloaters_;
    }

    function setGrandfathered(address user) public onlyOwner {
        grandfathered[user] = true;
    }

    function removeGrandfathered(address user) public onlyOwner {
        grandfathered[user] = false;
    }

    function scoreWallet(address user) public view returns(uint256) {
        return _scoreWallet(user);
    }

    function scoreManyWallets(address[] memory users) public view returns(WalletScore[] memory) {
        uint256 len = users.length;
        WalletScore[] memory scores = new WalletScore[](len);
        for(uint256 i = 0; i < users.length; i++) {
            scores[i] = WalletScore(users[i], _scoreWallet(users[i]));
        }

        return scores;
    }

    function _scoreWallet(address user) private view returns(uint256) {
        IERC721 mambonautsContract = IERC721(mambonauts); 
        IERC721 vloatersContract = IERC721(vloaters);
        uint256 mamboAmount = mambonautsContract.balanceOf(user);
        uint256 vloaterAmount = vloatersContract.balanceOf(user);
        uint256 pairAmount = mamboAmount > vloaterAmount ? vloaterAmount : mamboAmount;
        return (mamboAmount * mambonautScore) + (vloaterAmount * vloaterScore) + (pairAmount * pairScore);
    }

    function canUserBot(address user) public view returns(bool) {
        if( !globalCanBot ) {
            return false;
        }
        if( grandfathered[user] == true ) {
            return true;
        }
        return _scoreWallet(user) >= whaleBreakpoint;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"canUserBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalCanBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"grandfathered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mambonautScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mambonauts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeGrandfathered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"scoreManyWallets","outputs":[{"components":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"score","type":"uint256"}],"internalType":"struct MamboScorer.WalletScore[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scoreWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setGlobalCanBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"setGrandfathered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mambonautScore_","type":"uint256"}],"name":"setMambonautScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mambonauts_","type":"address"}],"name":"setMambonauts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairScore_","type":"uint256"}],"name":"setPairScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vloaterScore_","type":"uint256"}],"name":"setVloaterScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vloaters_","type":"address"}],"name":"setVloaters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"breakpoint_","type":"uint256"}],"name":"setWhaleBreakpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vloaterScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vloaters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whaleBreakpoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526001600260006101000a81548160ff021916908315150217905550600560035560036004556002600555732ee475a5cdc31c040ba1af3b0c4d66ca5c31c49a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073365af8b26a4b476d986b719d165710fc2ac9f261600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060966008553480156100e957600080fd5b506101066100fb61010b60201b60201c565b61011360201b60201c565b6101d7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117e4806101e66000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063b765ea6d1161007c578063b765ea6d14610378578063b7b039b114610394578063df43d274146103b2578063eed4df75146103ce578063f0ad12da146103ea578063f2fde38b146104085761014d565b8063715018a6146102dc578063746ec170146102e65780637cdeda95146103045780638c9708a6146103205780638da5cb5b1461033c578063a91e04101461035a5761014d565b8063332965eb11610115578063332965eb14610206578063389c42e6146102225780635319fb3e1461024057806362fd30181461025e57806369a43e201461027c57806370dab56f146102ac5761014d565b8063055d4cb8146101525780631759a3611461016e5780631fb356201461019e5780632815ddcb146101ce57806329d12b7b146101ea575b600080fd5b61016c600480360381019061016791906110e6565b610424565b005b61018860048036038101906101839190611171565b6104aa565b60405161019591906111b9565b60405180910390f35b6101b860048036038101906101b39190611171565b6104ca565b6040516101c591906111b9565b60405180910390f35b6101e860048036038101906101e39190611171565b610560565b005b61020460048036038101906101ff91906110e6565b610620565b005b610220600480360381019061021b9190611171565b6106a6565b005b61022a61077c565b60405161023791906111e3565b60405180910390f35b610248610782565b60405161025591906111e3565b60405180910390f35b610266610788565b604051610273919061120d565b60405180910390f35b61029660048036038101906102919190611171565b6107ae565b6040516102a391906111e3565b60405180910390f35b6102c660048036038101906102c19190611381565b6107c0565b6040516102d391906114c6565b60405180910390f35b6102e46108cf565b005b6102ee610957565b6040516102fb91906111e3565b60405180910390f35b61031e600480360381019061031991906110e6565b61095d565b005b61033a60048036038101906103359190611171565b6109e3565b005b610344610aa3565b604051610351919061120d565b60405180910390f35b610362610acc565b60405161036f919061120d565b60405180910390f35b610392600480360381019061038d91906110e6565b610af2565b005b61039c610b78565b6040516103a991906111e3565b60405180910390f35b6103cc60048036038101906103c79190611514565b610b7e565b005b6103e860048036038101906103e39190611171565b610c17565b005b6103f2610cee565b6040516103ff91906111b9565b60405180910390f35b610422600480360381019061041d9190611171565b610d01565b005b61042c610df8565b73ffffffffffffffffffffffffffffffffffffffff1661044a610aa3565b73ffffffffffffffffffffffffffffffffffffffff16146104a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104979061159e565b60405180910390fd5b8060048190555050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000600260009054906101000a900460ff166104e9576000905061055b565b60011515600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361054a576001905061055b565b60085461055683610e00565b101590505b919050565b610568610df8565b73ffffffffffffffffffffffffffffffffffffffff16610586610aa3565b73ffffffffffffffffffffffffffffffffffffffff16146105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d39061159e565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610628610df8565b73ffffffffffffffffffffffffffffffffffffffff16610646610aa3565b73ffffffffffffffffffffffffffffffffffffffff161461069c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106939061159e565b60405180910390fd5b8060088190555050565b6106ae610df8565b73ffffffffffffffffffffffffffffffffffffffff166106cc610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107199061159e565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006107b982610e00565b9050919050565b606060008251905060008167ffffffffffffffff8111156107e4576107e361123e565b5b60405190808252806020026020018201604052801561081d57816020015b61080a61106c565b8152602001906001900390816108025790505b50905060005b84518110156108c457604051806040016040528086838151811061084a576108496115be565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001610890878481518110610883576108826115be565b5b6020026020010151610e00565b8152508282815181106108a6576108a56115be565b5b602002602001018190525080806108bc9061161c565b915050610823565b508092505050919050565b6108d7610df8565b73ffffffffffffffffffffffffffffffffffffffff166108f5610aa3565b73ffffffffffffffffffffffffffffffffffffffff161461094b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109429061159e565b60405180910390fd5b6109556000610fa8565b565b60045481565b610965610df8565b73ffffffffffffffffffffffffffffffffffffffff16610983610aa3565b73ffffffffffffffffffffffffffffffffffffffff16146109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d09061159e565b60405180910390fd5b8060058190555050565b6109eb610df8565b73ffffffffffffffffffffffffffffffffffffffff16610a09610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a569061159e565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610afa610df8565b73ffffffffffffffffffffffffffffffffffffffff16610b18610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b659061159e565b60405180910390fd5b8060038190555050565b60035481565b610b86610df8565b73ffffffffffffffffffffffffffffffffffffffff16610ba4610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf19061159e565b60405180910390fd5b80600260006101000a81548160ff02191690831515021790555050565b610c1f610df8565b73ffffffffffffffffffffffffffffffffffffffff16610c3d610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a9061159e565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260009054906101000a900460ff1681565b610d09610df8565b73ffffffffffffffffffffffffffffffffffffffff16610d27610aa3565b73ffffffffffffffffffffffffffffffffffffffff1614610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d749061159e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de3906116d6565b60405180910390fd5b610df581610fa8565b50565b600033905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401610e8a919061120d565b602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb919061170b565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610f08919061120d565b602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f49919061170b565b90506000818311610f5a5782610f5c565b815b905060055481610f6c9190611738565b60045483610f7a9190611738565b60035485610f889190611738565b610f92919061177a565b610f9c919061177a565b95505050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6110c3816110b0565b81146110ce57600080fd5b50565b6000813590506110e0816110ba565b92915050565b6000602082840312156110fc576110fb6110a6565b5b600061110a848285016110d1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061113e82611113565b9050919050565b61114e81611133565b811461115957600080fd5b50565b60008135905061116b81611145565b92915050565b600060208284031215611187576111866110a6565b5b60006111958482850161115c565b91505092915050565b60008115159050919050565b6111b38161119e565b82525050565b60006020820190506111ce60008301846111aa565b92915050565b6111dd816110b0565b82525050565b60006020820190506111f860008301846111d4565b92915050565b61120781611133565b82525050565b600060208201905061122260008301846111fe565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6112768261122d565b810181811067ffffffffffffffff821117156112955761129461123e565b5b80604052505050565b60006112a861109c565b90506112b4828261126d565b919050565b600067ffffffffffffffff8211156112d4576112d361123e565b5b602082029050602081019050919050565b600080fd5b60006112fd6112f8846112b9565b61129e565b905080838252602082019050602084028301858111156113205761131f6112e5565b5b835b818110156113495780611335888261115c565b845260208401935050602081019050611322565b5050509392505050565b600082601f83011261136857611367611228565b5b81356113788482602086016112ea565b91505092915050565b600060208284031215611397576113966110a6565b5b600082013567ffffffffffffffff8111156113b5576113b46110ab565b5b6113c184828501611353565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6113ff81611133565b82525050565b61140e816110b0565b82525050565b60408201600082015161142a60008501826113f6565b50602082015161143d6020850182611405565b50505050565b600061144f8383611414565b60408301905092915050565b6000602082019050919050565b6000611473826113ca565b61147d81856113d5565b9350611488836113e6565b8060005b838110156114b95781516114a08882611443565b97506114ab8361145b565b92505060018101905061148c565b5085935050505092915050565b600060208201905081810360008301526114e08184611468565b905092915050565b6114f18161119e565b81146114fc57600080fd5b50565b60008135905061150e816114e8565b92915050565b60006020828403121561152a576115296110a6565b5b6000611538848285016114ff565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611588602083611541565b915061159382611552565b602082019050919050565b600060208201905081810360008301526115b78161157b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611627826110b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611659576116586115ed565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006116c0602683611541565b91506116cb82611664565b604082019050919050565b600060208201905081810360008301526116ef816116b3565b9050919050565b600081519050611705816110ba565b92915050565b600060208284031215611721576117206110a6565b5b600061172f848285016116f6565b91505092915050565b6000611743826110b0565b915061174e836110b0565b925082820261175c816110b0565b91508282048414831517611773576117726115ed565b5b5092915050565b6000611785826110b0565b9150611790836110b0565b92508282019050808211156117a8576117a76115ed565b5b9291505056fea26469706673582212209400772bcf0db060d430a8dd001ef50a7625a6fc2b75f8430dfe84fba012bdef64736f6c63430008110033

Loading