ETH Price: $2,648.60 (+0.23%)

Token

NNCProjectToken (NNCT)
 

Overview

Max Total Supply

4,015,980 NNCT

Holders

361

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.00639606 NNCT

Value
$0.00
0xd77ebdcd6edaf316aef73ab822f4fba5d6e524b1
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:
NNCProjectToken

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-11-30
*/

// File: patterns\GSN\Context.sol

pragma solidity 0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

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

// File: patterns\token\ERC777\IERC777.sol

/**
 * @dev Interface of the ERC777Token standard as defined in the EIP.
 *
 * This contract uses the
 * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let
 * token holders and recipients react to token movements by using setting implementers
 * for the associated interfaces in said registry. See {IERC1820Registry} and
 * {ERC1820Implementer}.
 */
interface IERC777 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the smallest part of the token that is not divisible. This
     * means all token operations (creation, movement and destruction) must have
     * amounts that are a multiple of this number.
     *
     * For most token contracts, this value will equal 1.
     */
    function granularity() external view returns (uint256);

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * If send or receive hooks are registered for the caller and `recipient`,
     * the corresponding functions will be called with `data` and empty
     * `operatorData`. See {IERC777Sender} and {IERC777Recipient}.
     *
     * Emits a {Sent} event.
     *
     * Requirements
     *
     * - the caller must have at least `amount` tokens.
     * - `recipient` cannot be the zero address.
     * - if `recipient` is a contract, it must implement the {IERC777Recipient}
     * interface.
     */
    function send(address recipient, uint256 amount, bytes calldata data) external;

    /**
     * @dev Destroys `amount` tokens from the caller's account, reducing the
     * total supply.
     *
     * If a send hook is registered for the caller, the corresponding function
     * will be called with `data` and empty `operatorData`. See {IERC777Sender}.
     *
     * Emits a {Burned} event.
     *
     * Requirements
     *
     * - the caller must have at least `amount` tokens.
     */
    function burn(uint256 amount, bytes calldata data) external;

    /**
     * @dev Returns true if an account is an operator of `tokenHolder`.
     * Operators can send and burn tokens on behalf of their owners. All
     * accounts are their own operator.
     *
     * See {operatorSend} and {operatorBurn}.
     */
    function isOperatorFor(address operator, address tokenHolder) external view returns (bool);

    /**
     * @dev Make an account an operator of the caller.
     *
     * See {isOperatorFor}.
     *
     * Emits an {AuthorizedOperator} event.
     *
     * Requirements
     *
     * - `operator` cannot be calling address.
     */
    function authorizeOperator(address operator) external;

    /**
     * @dev Make an account an operator of the caller.
     *
     * See {isOperatorFor} and {defaultOperators}.
     *
     * Emits a {RevokedOperator} event.
     *
     * Requirements
     *
     * - `operator` cannot be calling address.
     */
    function revokeOperator(address operator) external;

    /**
     * @dev Returns the list of default operators. These accounts are operators
     * for all token holders, even if {authorizeOperator} was never called on
     * them.
     *
     * This list is immutable, but individual holders may revoke these via
     * {revokeOperator}, in which case {isOperatorFor} will return false.
     */
    function defaultOperators() external view returns (address[] memory);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient`. The caller must
     * be an operator of `sender`.
     *
     * If send or receive hooks are registered for `sender` and `recipient`,
     * the corresponding functions will be called with `data` and
     * `operatorData`. See {IERC777Sender} and {IERC777Recipient}.
     *
     * Emits a {Sent} event.
     *
     * Requirements
     *
     * - `sender` cannot be the zero address.
     * - `sender` must have at least `amount` tokens.
     * - the caller must be an operator for `sender`.
     * - `recipient` cannot be the zero address.
     * - if `recipient` is a contract, it must implement the {IERC777Recipient}
     * interface.
     */
    function operatorSend(
        address sender,
        address recipient,
        uint256 amount,
        bytes calldata data,
        bytes calldata operatorData
    ) external;

    /**
     * @dev Destoys `amount` tokens from `account`, reducing the total supply.
     * The caller must be an operator of `account`.
     *
     * If a send hook is registered for `account`, the corresponding function
     * will be called with `data` and `operatorData`. See {IERC777Sender}.
     *
     * Emits a {Burned} event.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     * - the caller must be an operator for `account`.
     */
    function operatorBurn(
        address account,
        uint256 amount,
        bytes calldata data,
        bytes calldata operatorData
    ) external;

    event Sent(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 amount,
        bytes data,
        bytes operatorData
    );

    event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);

    event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);

    event AuthorizedOperator(address indexed operator, address indexed tokenHolder);

    event RevokedOperator(address indexed operator, address indexed tokenHolder);
}

// File: patterns\token\ERC777\IERC777Recipient.sol

/**
 * @dev Interface of the ERC777TokensRecipient standard as defined in the EIP.
 *
 * Accounts can be notified of {IERC777} tokens being sent to them by having a
 * contract implement this interface (contract holders can be their own
 * implementer) and registering it on the
 * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].
 *
 * See {IERC1820Registry} and {ERC1820Implementer}.
 */
interface IERC777Recipient {
    /**
     * @dev Called by an {IERC777} token contract whenever tokens are being
     * moved or created into a registered account (`to`). The type of operation
     * is conveyed by `from` being the zero address or not.
     *
     * This call occurs _after_ the token contract's state is updated, so
     * {IERC777-balanceOf}, etc., can be used to query the post-operation state.
     *
     * This function may revert to prevent the operation from being executed.
     */
    function tokensReceived(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes calldata userData,
        bytes calldata operatorData
    ) external;
}

// File: patterns\token\ERC777\IERC777Sender.sol

/**
 * @dev Interface of the ERC777TokensSender standard as defined in the EIP.
 *
 * {IERC777} Token holders can be notified of operations performed on their
 * tokens by having a contract implement this interface (contract holders can be
 *  their own implementer) and registering it on the
 * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].
 *
 * See {IERC1820Registry} and {ERC1820Implementer}.
 */
interface IERC777Sender {
    /**
     * @dev Called by an {IERC777} token contract whenever a registered holder's
     * (`from`) tokens are about to be moved or destroyed. The type of operation
     * is conveyed by `to` being the zero address or not.
     *
     * This call occurs _before_ the token contract's state is updated, so
     * {IERC777-balanceOf}, etc., can be used to query the pre-operation state.
     *
     * This function may revert to prevent the operation from being executed.
     */
    function tokensToSend(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes calldata userData,
        bytes calldata operatorData
    ) external;
}

// File: patterns\token\ERC20\IERC20.sol

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
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: patterns\math\SafeMath.sol

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

// File: patterns\utils\Address.sol

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing 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.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @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].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

// File: patterns\introspection\IERC1820Registry.sol

/**
 * @dev Interface of the global ERC1820 Registry, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register
 * implementers for interfaces in this registry, as well as query support.
 *
 * Implementers may be shared by multiple accounts, and can also implement more
 * than a single interface for each account. Contracts can implement interfaces
 * for themselves, but externally-owned accounts (EOA) must delegate this to a
 * contract.
 *
 * {IERC165} interfaces can also be queried via the registry.
 *
 * For an in-depth explanation and source code analysis, see the EIP text.
 */
interface IERC1820Registry {
    /**
     * @dev Sets `newManager` as the manager for `account`. A manager of an
     * account is able to set interface implementers for it.
     *
     * By default, each account is its own manager. Passing a value of `0x0` in
     * `newManager` will reset the manager to this initial state.
     *
     * Emits a {ManagerChanged} event.
     *
     * Requirements:
     *
     * - the caller must be the current manager for `account`.
     */
    function setManager(address account, address newManager) external;

    /**
     * @dev Returns the manager for `account`.
     *
     * See {setManager}.
     */
    function getManager(address account) external view returns (address);

    /**
     * @dev Sets the `implementer` contract as `account`'s implementer for
     * `interfaceHash`.
     *
     * `account` being the zero address is an alias for the caller's address.
     * The zero address can also be used in `implementer` to remove an old one.
     *
     * See {interfaceHash} to learn how these are created.
     *
     * Emits an {InterfaceImplementerSet} event.
     *
     * Requirements:
     *
     * - the caller must be the current manager for `account`.
     * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
     * end in 28 zeroes).
     * - `implementer` must implement {IERC1820Implementer} and return true when
     * queried for support, unless `implementer` is the caller. See
     * {IERC1820Implementer-canImplementInterfaceForAddress}.
     */
    function setInterfaceImplementer(address account, bytes32 interfaceHash, address implementer) external;

    /**
     * @dev Returns the implementer of `interfaceHash` for `account`. If no such
     * implementer is registered, returns the zero address.
     *
     * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
     * zeroes), `account` will be queried for support of it.
     *
     * `account` being the zero address is an alias for the caller's address.
     */
    function getInterfaceImplementer(address account, bytes32 interfaceHash) external view returns (address);

    /**
     * @dev Returns the interface hash for an `interfaceName`, as defined in the
     * corresponding
     * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP].
     */
    function interfaceHash(string calldata interfaceName) external pure returns (bytes32);

    /**
     *  @notice Updates the cache with whether the contract implements an ERC165 interface or not.
     *  @param account Address of the contract for which to update the cache.
     *  @param interfaceId ERC165 interface for which to update the cache.
     */
    function updateERC165Cache(address account, bytes4 interfaceId) external;

    /**
     *  @notice Checks whether a contract implements an ERC165 interface or not.
     *  If the result is not cached a direct lookup on the contract address is performed.
     *  If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
     *  {updateERC165Cache} with the contract address.
     *  @param account Address of the contract to check.
     *  @param interfaceId ERC165 interface to check.
     *  @return True if `account` implements `interfaceId`, false otherwise.
     */
    function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);

    /**
     *  @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.
     *  @param account Address of the contract to check.
     *  @param interfaceId ERC165 interface to check.
     *  @return True if `account` implements `interfaceId`, false otherwise.
     */
    function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);

    event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);

    event ManagerChanged(address indexed account, address indexed newManager);
}

// File: patterns\token\ERC777\ERC777.sol

/**
 * @dev Implementation of the {IERC777} 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}.
 *
 * Support for ERC20 is included in this contract, as specified by the EIP: both
 * the ERC777 and ERC20 interfaces can be safely used when interacting with it.
 * Both {IERC777-Sent} and {IERC20-Transfer} events are emitted on token
 * movements.
 *
 * Additionally, the {IERC777-granularity} value is hard-coded to `1`, meaning that there
 * are no special restrictions in the amount of tokens that created, moved, or
 * destroyed. This makes integration with ERC20 applications seamless.
 */
contract ERC777 is Context, IERC777, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    IERC1820Registry constant internal _erc1820 = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);

    mapping(address => uint256) private _balances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    // We inline the result of the following hashes because Solidity doesn't resolve them at compile time.
    // See https://github.com/ethereum/solidity/issues/4024.

    // keccak256("ERC777TokensSender")
    bytes32 constant private TOKENS_SENDER_INTERFACE_HASH =
        0x29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895;

    // keccak256("ERC777TokensRecipient")
    bytes32 constant private TOKENS_RECIPIENT_INTERFACE_HASH =
        0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b;

    // This isn't ever read from - it's only used to respond to the defaultOperators query.
    address[] private _defaultOperatorsArray;

    // Immutable, but accounts may revoke them (tracked in __revokedDefaultOperators).
    mapping(address => bool) private _defaultOperators;

    // For each account, a mapping of its operators and revoked default operators.
    mapping(address => mapping(address => bool)) private _operators;
    mapping(address => mapping(address => bool)) private _revokedDefaultOperators;

    // ERC20-allowances
    mapping (address => mapping (address => uint256)) private _allowances;

    /**
     * @dev `defaultOperators` may be an empty array.
     */
    constructor(
        string memory name,
        string memory symbol,
        address[] memory defaultOperators
    ) public {
        _name = name;
        _symbol = symbol;

        _defaultOperatorsArray = defaultOperators;
        for (uint256 i = 0; i < _defaultOperatorsArray.length; i++) {
            _defaultOperators[_defaultOperatorsArray[i]] = true;
        }

        // register interfaces
        _erc1820.setInterfaceImplementer(address(this), keccak256("ERC777Token"), address(this));
        _erc1820.setInterfaceImplementer(address(this), keccak256("ERC20Token"), address(this));
    }

    /**
     * @dev See {IERC777-name}.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC777-symbol}.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {ERC20Detailed-decimals}.
     *
     * Always returns 18, as per the
     * [ERC777 EIP](https://eips.ethereum.org/EIPS/eip-777#backward-compatibility).
     */
    function decimals() public pure returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC777-granularity}.
     *
     * This implementation always returns `1`.
     */
    function granularity() public view returns (uint256) {
        return 1;
    }

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

    /**
     * @dev Returns the amount of tokens owned by an account (`tokenHolder`).
     */
    function balanceOf(address tokenHolder) public view returns (uint256) {
        return _balances[tokenHolder];
    }

    /**
     * @dev See {IERC777-send}.
     *
     * Also emits a {Transfer} event for ERC20 compatibility.
     */
    function send(address recipient, uint256 amount, bytes calldata data) external {
        _send(_msgSender(), _msgSender(), recipient, amount, data, "", true);
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Unlike `send`, `recipient` is _not_ required to implement the {IERC777Recipient}
     * interface if it is a contract.
     *
     * Also emits a {Sent} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool) {
        require(recipient != address(0), "ERC777: transfer to the zero address");

        address from = _msgSender();

        _callTokensToSend(from, from, recipient, amount, "", "");

        _move(from, from, recipient, amount, "", "");

        _callTokensReceived(from, from, recipient, amount, "", "", false);

        return true;
    }

    /**
     * @dev See {IERC777-burn}.
     *
     * Also emits a {Transfer} event for ERC20 compatibility.
     */
    function burn(uint256 amount, bytes calldata data) external {
        _burn(_msgSender(), _msgSender(), amount, data, "");
    }

    /**
     * @dev See {IERC777-isOperatorFor}.
     */
    function isOperatorFor(
        address operator,
        address tokenHolder
    ) public view returns (bool) {
        return operator == tokenHolder ||
            (_defaultOperators[operator] && !_revokedDefaultOperators[tokenHolder][operator]) ||
            _operators[tokenHolder][operator];
    }

    /**
     * @dev See {IERC777-authorizeOperator}.
     */
    function authorizeOperator(address operator) external {
        _authorizeOperator(operator);
    }

    function _authorizeOperator(address operator) internal {
        require(_msgSender() != operator, "ERC777: authorizing self as operator");

        if (_defaultOperators[operator]) {
            delete _revokedDefaultOperators[_msgSender()][operator];
        } else {
            _operators[_msgSender()][operator] = true;
        }

        emit AuthorizedOperator(operator, _msgSender());
    }

    /**
     * @dev See {IERC777-revokeOperator}.
     */
    function revokeOperator(address operator) external {
        _revokeOperator(operator);
    }

    function _revokeOperator(address operator) internal {
        require(operator != _msgSender(), "ERC777: revoking self as operator");

        if (_defaultOperators[operator]) {
            _revokedDefaultOperators[_msgSender()][operator] = true;
        } else {
            delete _operators[_msgSender()][operator];
        }

        emit RevokedOperator(operator, _msgSender());
    }

    /**
     * @dev See {IERC777-defaultOperators}.
     */
    function defaultOperators() public view returns (address[] memory) {
        return _defaultOperatorsArray;
    }

    /**
     * @dev See {IERC777-operatorSend}.
     *
     * Emits {Sent} and {Transfer} events.
     */
    function operatorSend(
        address sender,
        address recipient,
        uint256 amount,
        bytes calldata data,
        bytes calldata operatorData
    )
    external
    {
        require(isOperatorFor(_msgSender(), sender), "ERC777: caller is not an operator for holder");
        _send(_msgSender(), sender, recipient, amount, data, operatorData, true);
    }

    /**
     * @dev See {IERC777-operatorBurn}.
     *
     * Emits {Burned} and {Transfer} events.
     */
    function operatorBurn(address account, uint256 amount, bytes calldata data, bytes calldata operatorData) external {
        require(isOperatorFor(_msgSender(), account), "ERC777: caller is not an operator for holder");
        _burn(_msgSender(), account, amount, data, operatorData);
    }

    /**
     * @dev See {IERC20-allowance}.
     *
     * Note that operator and allowance concepts are orthogonal: operators may
     * not have allowance, and accounts with allowance may not be operators
     * themselves.
     */
    function allowance(address holder, address spender) public view returns (uint256) {
        return _allowances[holder][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Note that accounts cannot have allowance issued by their operators.
     */
    function approve(address spender, uint256 value) external returns (bool) {
        address holder = _msgSender();
        _approve(holder, spender, value);
        return true;
    }

   /**
    * @dev See {IERC20-transferFrom}.
    *
    * Note that operator and allowance concepts are orthogonal: operators cannot
    * call `transferFrom` (unless they have allowance), and accounts with
    * allowance cannot call `operatorSend` (unless they are operators).
    *
    * Emits {Sent}, {Transfer} and {Approval} events.
    */
    function transferFrom(address holder, address recipient, uint256 amount) external returns (bool) {
        require(recipient != address(0), "ERC777: transfer to the zero address");
        require(holder != address(0), "ERC777: transfer from the zero address");

        address spender = _msgSender();

        _callTokensToSend(spender, holder, recipient, amount, "", "");

        _move(spender, holder, recipient, amount, "", "");
        _approve(holder, spender, _allowances[holder][spender].sub(amount, "ERC777: transfer amount exceeds allowance"));

        _callTokensReceived(spender, holder, recipient, amount, "", "", false);

        return true;
    }

    /**
     * @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * If a send hook is registered for `account`, the corresponding function
     * will be called with `operator`, `data` and `operatorData`.
     *
     * See {IERC777Sender} and {IERC777Recipient}.
     *
     * Emits {Minted} and {Transfer} events.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - if `account` is a contract, it must implement the {IERC777Recipient}
     * interface.
     */
    function _mint(
        address operator,
        address account,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData
    )
    internal
    {
        require(account != address(0), "ERC777: mint to the zero address");

        // Update state variables
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);

        _callTokensReceived(operator, address(0), account, amount, userData, operatorData, true);

        emit Minted(operator, account, amount, userData, operatorData);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Send tokens
     * @param operator address operator requesting the transfer
     * @param from address token holder address
     * @param to address recipient address
     * @param amount uint256 amount of tokens to transfer
     * @param userData bytes extra information provided by the token holder (if any)
     * @param operatorData bytes extra information provided by the operator (if any)
     * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient
     */
    function _send(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData,
        bool requireReceptionAck
    )
        internal
    {
        require(from != address(0), "ERC777: send from the zero address");
        require(to != address(0), "ERC777: send to the zero address");

        _callTokensToSend(operator, from, to, amount, userData, operatorData);

        _move(operator, from, to, amount, userData, operatorData);

        _callTokensReceived(operator, from, to, amount, userData, operatorData, requireReceptionAck);
    }

    /**
     * @dev Burn tokens
     * @param operator address operator requesting the operation
     * @param from address token holder address
     * @param amount uint256 amount of tokens to burn
     * @param data bytes extra information provided by the token holder
     * @param operatorData bytes extra information provided by the operator (if any)
     */
    function _burn(
        address operator,
        address from,
        uint256 amount,
        bytes memory data,
        bytes memory operatorData
    )
        internal
    {
        require(from != address(0), "ERC777: burn from the zero address");

        _callTokensToSend(operator, from, address(0), amount, data, operatorData);

        // Update state variables
        _balances[from] = _balances[from].sub(amount, "ERC777: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);

        emit Burned(operator, from, amount, data, operatorData);
        emit Transfer(from, address(0), amount);
    }

    function _move(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData
    )
        internal
    {
        _balances[from] = _balances[from].sub(amount, "ERC777: transfer amount exceeds balance");
        _balances[to] = _balances[to].add(amount);

        emit Sent(operator, from, to, amount, userData, operatorData);
        emit Transfer(from, to, amount);
    }

    function _approve(address holder, address spender, uint256 value) internal {
        // TODO: restore this require statement if this function becomes internal, or is called at a new callsite. It is
        // currently unnecessary.
        //require(holder != address(0), "ERC777: approve from the zero address");
        require(spender != address(0), "ERC777: approve to the zero address");

        _allowances[holder][spender] = value;
        emit Approval(holder, spender, value);
    }

    /**
     * @dev Call from.tokensToSend() if the interface is registered
     * @param operator address operator requesting the transfer
     * @param from address token holder address
     * @param to address recipient address
     * @param amount uint256 amount of tokens to transfer
     * @param userData bytes extra information provided by the token holder (if any)
     * @param operatorData bytes extra information provided by the operator (if any)
     */
    function _callTokensToSend(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData
    )
        private
    {
        address implementer = _erc1820.getInterfaceImplementer(from, TOKENS_SENDER_INTERFACE_HASH);
        if (implementer != address(0)) {
            IERC777Sender(implementer).tokensToSend(operator, from, to, amount, userData, operatorData);
        }
    }

    /**
     * @dev Call to.tokensReceived() if the interface is registered. Reverts if the recipient is a contract but
     * tokensReceived() was not registered for the recipient
     * @param operator address operator requesting the transfer
     * @param from address token holder address
     * @param to address recipient address
     * @param amount uint256 amount of tokens to transfer
     * @param userData bytes extra information provided by the token holder (if any)
     * @param operatorData bytes extra information provided by the operator (if any)
     * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient
     */
    function _callTokensReceived(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData,
        bool requireReceptionAck
    )
        private
    {
        address implementer = _erc1820.getInterfaceImplementer(to, TOKENS_RECIPIENT_INTERFACE_HASH);
        if (implementer != address(0)) {
            IERC777Recipient(implementer).tokensReceived(operator, from, to, amount, userData, operatorData);
        } else if (requireReceptionAck) {
            require(!to.isContract(), "ERC777: token recipient contract has no implement for ERC777TokensRecipient");
        }
    }
}

// File: patterns\access\Roles.sol

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

// File: patterns\access\roles\MinterRole.sol

contract MinterRole is Context {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(_msgSender());
    }

    modifier onlyMinter() {
        require(isMinter(_msgSender()), "MinterRole: caller does not have the Minter role");
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(_msgSender());
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

// File: patterns\token\ERC777\ERC777Mintable.sol

/**
 * @dev Extension of {ERC777} that adds a set of accounts with the {MinterRole},
 * which have permission to mint (create) new tokens as they see fit.
 *
 * At construction, the deployer of the contract is the only minter.
 */
contract ERC777Mintable is ERC777, MinterRole {
    /**
     * @dev See {ERC777-_mint}.
     *
     * Requirements:
     *
     * - the caller must have the {MinterRole}.
     */
    function mint(address account, uint256 amount, bytes calldata data) external onlyMinter {
        super._mint(_msgSender(), account, amount, data, "");
    }
}

// File: patterns\access\roles\PauserRole.sol

contract PauserRole is Context {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor () internal {
        _addPauser(_msgSender());
    }

    modifier onlyPauser() {
        require(isPauser(_msgSender()), "PauserRole: caller does not have the Pauser role");
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(_msgSender());
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

// File: patterns\lifecycle\Pausable.sol

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
contract Pausable is Context, PauserRole {
    /**
     * @dev Emitted when the pause is triggered by a pauser (`account`).
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by a pauser (`account`).
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state. Assigns the Pauser role
     * to the deployer.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Called by a pauser to pause, triggers stopped state.
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Called by a pauser to unpause, returns to normal state.
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: patterns\token\ERC777\ERC777Pausable.sol

/**
 * @title Pausable token
 * @dev ERC777 with pausable operations.
 *
 * Useful if you want to stop trades until the end of a crowdsale, or have
 * an emergency switch for freezing all token transfers in the event of a large
 * bug.
 */
contract ERC777Pausable is ERC777, Pausable {
    function _move(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData
    )
        internal whenNotPaused
    {
        return super._move(operator, from, to, amount, userData, operatorData);
    }

    function _approve(address holder, address spender, uint256 value) internal whenNotPaused {
        super._approve(holder, spender, value);
    }

    function _send(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData,
        bool requireReceptionAck
    )
        internal whenNotPaused
    {
        super._send(operator, from, to, amount, userData, operatorData, requireReceptionAck);
    }

    function _mint(
        address operator,
        address account,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData
    )
        internal whenNotPaused
    {
        super._mint(operator, account, amount, userData, operatorData);
    }

    function _burn(
        address operator,
        address from,
        uint256 amount,
        bytes memory data,
        bytes memory operatorData
    )
        internal whenNotPaused
    {
        super._burn(operator, from, amount, data, operatorData);
    }

    function _authorizeOperator(address operator) internal whenNotPaused {
        super._authorizeOperator(operator);
    }

    function _revokeOperator(address operator) internal whenNotPaused {
        super._revokeOperator(operator);
    }
}

// File: patterns\token\ERC777\ERC777WithFee.sol

/**
 * @title Token with fee
 * @dev ERC777 with fee operations.
 *
 * Useful if you want to charge a fee for each transaction, burning commission tokens.
 */
contract ERC777WithFee is ERC777 {
    uint16 constant private _fee = 250;
    uint256 constant private _feeDecimals = 6;
    uint256 constant private _feeGrowthPeriod = 5000000 * 1 ether;
    
    function _move(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes memory userData,
        bytes memory operatorData
    )
        internal
    {
        uint256 fee = _calculateFee(amount);
        uint256 new_amount = amount.sub(fee, "ERC777: fee amount exceeds balance");
        super._burn(operator, from, fee, userData, operatorData);
        super._move(operator, from, to, new_amount, userData, operatorData);
    }

    function _calculateFee(uint256 amount) internal view returns (uint256)
    {
        return amount.mul(_fee).mul(this.totalSupply().div(_feeGrowthPeriod)).div(10 ** _feeDecimals);
    }
}

// File: contracts\NNCProjectToken.sol

contract NNCProjectToken is
    ERC777WithFee,
    ERC777Pausable,
    ERC777Mintable,
    IERC777Recipient,
    IERC777Sender {
  constructor (
    string memory name,
    string memory symbol,
    address[] memory defaultOperators,
    uint256 totalSupply
  ) ERC777(name, symbol, defaultOperators) public {
    _mint(_msgSender(), _msgSender(), totalSupply, "Init mint", "");
    _erc1820.setInterfaceImplementer(address(this), keccak256("ERC777TokensRecipient"), address(this));
    _erc1820.setInterfaceImplementer(address(this), keccak256("ERC777TokensSender"), address(this));
  }

  function tokensReceived(
    address operator,
    address from,
    address to,
    uint256 amount,
    bytes calldata userData,
    bytes calldata operatorData
  ) external {
    revert("Tokens cannot be accepted");
  }

  function tokensToSend(
    address operator,
    address from,
    address to,
    uint256 amount,
    bytes calldata userData,
    bytes calldata operatorData
  ) external {
    revert("Tokens cannot be sended");
  }

  function () external payable {
    revert("Not payable contract");
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"amount","type":"uint256"},{"name":"userData","type":"bytes"},{"name":"operatorData","type":"bytes"}],"name":"tokensReceived","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"defaultOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"holder","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"granularity","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"},{"name":"operatorData","type":"bytes"}],"name":"operatorSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenHolder","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"amount","type":"uint256"},{"name":"userData","type":"bytes"},{"name":"operatorData","type":"bytes"}],"name":"tokensToSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"authorizeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"send","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"operator","type":"address"},{"name":"tokenHolder","type":"address"}],"name":"isOperatorFor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"revokeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"},{"name":"operatorData","type":"bytes"}],"name":"operatorBurn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"defaultOperators","type":"address[]"},{"name":"totalSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"},{"indexed":false,"name":"operatorData","type":"bytes"}],"name":"Sent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"},{"indexed":false,"name":"operatorData","type":"bytes"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"},{"indexed":false,"name":"operatorData","type":"bytes"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"tokenHolder","type":"address"}],"name":"AuthorizedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"tokenHolder","type":"address"}],"name":"RevokedOperator","type":"event"}]

60806040523480156200001157600080fd5b50604051620062c3380380620062c3833981018060405260808110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b50509291906020018051640100000000811115620000f457600080fd5b828101905060208101848111156200010b57600080fd5b81518560208202830111640100000000821117156200012957600080fd5b5050929190602001805190602001909291905050508383838260029080519060200190620001599291906200146c565b508160039080519060200190620001729291906200146c565b5080600490805190602001906200018b929190620014f3565b5060008090505b6004805490508110156200024057600160056000600484815481101515620001b657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505062000192565b50731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d3060405180807f455243373737546f6b656e000000000000000000000000000000000000000000815250600b0190506040518091039020306040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156200036257600080fd5b505af115801562000377573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d3060405180807f4552433230546f6b656e00000000000000000000000000000000000000000000815250600a0190506040518091039020306040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156200049c57600080fd5b505af1158015620004b1573d6000803e3d6000fd5b50505050505050620004ea620004d562000848640100000000026401000000009004565b62000850640100000000026401000000009004565b6000600a60006101000a81548160ff021916908315150217905550620005376200052262000848640100000000026401000000009004565b620008ba640100000000026401000000009004565b620005ca6200055462000848640100000000026401000000009004565b6200056d62000848640100000000026401000000009004565b836040805190810160405280600981526020017f496e6974206d696e740000000000000000000000000000000000000000000000815250602060405190810160405280600081525062000924640100000000026401000000009004565b731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d3060405180807f455243373737546f6b656e73526563697069656e74000000000000000000000081525060150190506040518091039020306040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015620006eb57600080fd5b505af115801562000700573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d3060405180807f455243373737546f6b656e7353656e646572000000000000000000000000000081525060120190506040518091039020306040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156200082557600080fd5b505af11580156200083a573d6000803e3d6000fd5b5050505050505050620015f0565b600033905090565b62000874816009620009d464010000000002620038a2179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b620008de81600b620009d464010000000002620038a2179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b600a60009054906101000a900460ff16151515620009aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b620009cd858585858562000ac3640100000000026200397f176401000000009004565b5050505050565b620009ef828262000e0b640100000000026401000000009004565b15151562000a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151562000b69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433737373a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b62000b8e8360015462000f2f64010000000002620049e2179091906401000000009004565b60018190555062000bf5836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000f2f64010000000002620049e2179091906401000000009004565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000c5985600086868686600162000fba640100000000026401000000009004565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d858585604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101562000cf757808201518184015260208101905062000cda565b50505050905090810190601f16801562000d255780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101562000d6057808201518184015260208101905062000d43565b50505050905090810190601f16801562000d8e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000ed8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526f6c65733a206163636f756e7420697320746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080828401905083811015151562000fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156200109557600080fd5b505afa158015620010aa573d6000803e3d6000fd5b505050506040513d6020811015620010c157600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151562001315578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015620012395780820151818401526020810190506200121c565b50505050905090810190601f168015620012675780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015620012a257808201518184015260208101905062001285565b50505050905090810190601f168015620012d05780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b158015620012f657600080fd5b505af11580156200130b573d6000803e3d6000fd5b5050505062001415565b81156200141457620013518673ffffffffffffffffffffffffffffffffffffffff166200141f64010000000002620035b0176401000000009004565b15151562001413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604b8152602001807f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637481526020017f20686173206e6f20696d706c656d656e7420666f7220455243373737546f6b6581526020017f6e73526563697069656e7400000000000000000000000000000000000000000081525060600191505060405180910390fd5b5b5b5050505050505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706001029050833f915060006001028214158015620014635750808214155b92505050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620014af57805160ff1916838001178555620014e0565b82800160010185558215620014e0579182015b82811115620014df578251825591602001919060010190620014c2565b5b509050620014ef919062001582565b5090565b8280548282559060005260206000209081019282156200156f579160200282015b828111156200156e5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062001514565b5b5090506200157e9190620015aa565b5090565b620015a791905b80821115620015a357600081600090555060010162001589565b5090565b90565b620015ed91905b80821115620015e957600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620015b1565b5090565b90565b614cc380620016006000396000f3fe60806040526004361061017f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806223de29146101ed57806306e485381461033257806306fdde031461039e578063095ea7b31461042e57806318160ddd146104a157806323b872dd146104cc578063313ce5671461055f5780633f4ba83a1461059057806346fbf68e146105a7578063556f0dc7146106105780635c975abb1461063b57806362ad1b831461066a5780636ef8d66d1461078f57806370a08231146107a657806375ab97821461080b57806382dc1ec4146109505780638456cb59146109a157806394d008ef146109b8578063959b8c3f14610a6857806395d89b4114610ab9578063983b2d5614610b495780639865027514610b9a5780639bd9bbc614610bb1578063a9059cbb14610c61578063aa271e1a14610cd4578063d95b637114610d3d578063dd62ed3e14610dc6578063fad8b32a14610e4b578063fc673c4f14610e9c578063fe9d930314610fa1575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f742070617961626c6520636f6e747261637400000000000000000000000081525060200191505060405180910390fd5b3480156101f957600080fd5b50610330600480360360c081101561021057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561029757600080fd5b8201836020820111156102a957600080fd5b803590602001918460018302840111640100000000831117156102cb57600080fd5b9091929391929390803590602001906401000000008111156102ec57600080fd5b8201836020820111156102fe57600080fd5b8035906020019184600183028401116401000000008311171561032057600080fd5b9091929391929390505050611031565b005b34801561033e57600080fd5b5061034761109f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561038a57808201518184015260208101905061036f565b505050509050019250505060405180910390f35b3480156103aa57600080fd5b506103b361112d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103f35780820151818401526020810190506103d8565b50505050905090810190601f1680156104205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561043a57600080fd5b506104876004803603604081101561045157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111cf565b604051808215151515815260200191505060405180910390f35b3480156104ad57600080fd5b506104b66111f2565b6040518082815260200191505060405180910390f35b3480156104d857600080fd5b50610545600480360360608110156104ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111fc565b604051808215151515815260200191505060405180910390f35b34801561056b57600080fd5b5061057461152e565b604051808260ff1660ff16815260200191505060405180910390f35b34801561059c57600080fd5b506105a5611537565b005b3480156105b357600080fd5b506105f6600480360360208110156105ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116ec565b604051808215151515815260200191505060405180910390f35b34801561061c57600080fd5b50610625611709565b6040518082815260200191505060405180910390f35b34801561064757600080fd5b50610650611712565b604051808215151515815260200191505060405180910390f35b34801561067657600080fd5b5061078d600480360360a081101561068d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106f457600080fd5b82018360208201111561070657600080fd5b8035906020019184600183028401116401000000008311171561072857600080fd5b90919293919293908035906020019064010000000081111561074957600080fd5b82018360208201111561075b57600080fd5b8035906020019184600183028401116401000000008311171561077d57600080fd5b9091929391929390505050611729565b005b34801561079b57600080fd5b506107a461187c565b005b3480156107b257600080fd5b506107f5600480360360208110156107c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061188e565b6040518082815260200191505060405180910390f35b34801561081757600080fd5b5061094e600480360360c081101561082e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108b557600080fd5b8201836020820111156108c757600080fd5b803590602001918460018302840111640100000000831117156108e957600080fd5b90919293919293908035906020019064010000000081111561090a57600080fd5b82018360208201111561091c57600080fd5b8035906020019184600183028401116401000000008311171561093e57600080fd5b90919293919293905050506118d6565b005b34801561095c57600080fd5b5061099f6004803603602081101561097357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611944565b005b3480156109ad57600080fd5b506109b66119fa565b005b3480156109c457600080fd5b50610a66600480360360608110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610a2257600080fd5b820183602082011115610a3457600080fd5b80359060200191846001830284011164010000000083111715610a5657600080fd5b9091929391929390505050611bb0565b005b348015610a7457600080fd5b50610ab760048036036020811015610a8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc8565b005b348015610ac557600080fd5b50610ace611cd4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b0e578082015181840152602081019050610af3565b50505050905090810190601f168015610b3b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b5557600080fd5b50610b9860048036036020811015610b6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d76565b005b348015610ba657600080fd5b50610baf611e2c565b005b348015610bbd57600080fd5b50610c5f60048036036060811015610bd457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c1b57600080fd5b820183602082011115610c2d57600080fd5b80359060200191846001830284011164010000000083111715610c4f57600080fd5b9091929391929390505050611e3e565b005b348015610c6d57600080fd5b50610cba60048036036040811015610c8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611eb6565b604051808215151515815260200191505060405180910390f35b348015610ce057600080fd5b50610d2360048036036020811015610cf757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612025565b604051808215151515815260200191505060405180910390f35b348015610d4957600080fd5b50610dac60048036036040811015610d6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612042565b604051808215151515815260200191505060405180910390f35b348015610dd257600080fd5b50610e3560048036036040811015610de957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121f3565b6040518082815260200191505060405180910390f35b348015610e5757600080fd5b50610e9a60048036036020811015610e6e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061227a565b005b348015610ea857600080fd5b50610f9f60048036036080811015610ebf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610f0657600080fd5b820183602082011115610f1857600080fd5b80359060200191846001830284011164010000000083111715610f3a57600080fd5b909192939192939080359060200190640100000000811115610f5b57600080fd5b820183602082011115610f6d57600080fd5b80359060200191846001830284011164010000000083111715610f8f57600080fd5b9091929391929390505050612286565b005b348015610fad57600080fd5b5061102f60048036036040811015610fc457600080fd5b810190808035906020019092919080359060200190640100000000811115610feb57600080fd5b820183602082011115610ffd57600080fd5b8035906020019184600183028401116401000000008311171561101f57600080fd5b90919293919293905050506123d5565b005b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f546f6b656e732063616e6e6f742062652061636365707465640000000000000081525060200191505060405180910390fd5b6060600480548060200260200160405190810160405280929190818152602001828054801561112357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110d9575b5050505050905090565b606060028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111c55780601f1061119a576101008083540402835291602001916111c5565b820191906000526020600020905b8154815290600101906020018083116111a857829003601f168201915b5050505050905090565b6000806111da612449565b90506111e7818585612451565b600191505092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f4552433737373a207472616e7366657220746f20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4552433737373a207472616e736665722066726f6d20746865207a65726f206181526020017f646472657373000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600061139d612449565b90506113cd81868686602060405190810160405280600081525060206040519081016040528060008152506124e6565b6113fb818686866020604051908101604052806000815250602060405190810160405280600081525061283a565b6114f285826114ed86606060405190810160405280602981526020017f4552433737373a207472616e7366657220616d6f756e7420657863656564732081526020017f616c6c6f77616e63650000000000000000000000000000000000000000000000815250600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d59092919063ffffffff16565b612451565b61152281868686602060405190810160405280600081525060206040519081016040528060008152506000612997565b60019150509392505050565b60006012905090565b611547611542612449565b6116ec565b15156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f207468652050617573657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b600a60009054906101000a900460ff161515611665576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116a9612449565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000611702826009612dd790919063ffffffff16565b9050919050565b60006001905090565b6000600a60009054906101000a900460ff16905090565b61173a611734612449565b88612042565b15156117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f81526020017f7220666f7220686f6c646572000000000000000000000000000000000000000081525060400191505060405180910390fd5b6118736117df612449565b88888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001612efa565b50505050505050565b61188c611887612449565b612f97565b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6b656e732063616e6e6f742062652073656e64656400000000000000000081525060200191505060405180910390fd5b61195461194f612449565b6116ec565b15156119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f207468652050617573657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b6119f781612ff1565b50565b611a0a611a05612449565b6116ec565b1515611aa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f207468652050617573657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b600a60009054906101000a900460ff16151515611b29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b6d612449565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b611bc0611bbb612449565b612025565b1515611c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f20746865204d696e74657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b611cc2611c65612449565b858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050602060405190810160405280600081525061304b565b50505050565b611cd1816130e4565b50565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d6c5780601f10611d4157610100808354040283529160200191611d6c565b820191906000526020600020905b815481529060010190602001808311611d4f57829003601f168201915b5050505050905090565b611d86611d81612449565b612025565b1515611e20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f20746865204d696e74657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b611e2981613175565b50565b611e3c611e37612449565b6131cf565b565b611eb0611e49612449565b611e51612449565b868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505060206040519081016040528060008152506001612efa565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f4552433737373a207472616e7366657220746f20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000611f8c612449565b9050611fbc81828686602060405190810160405280600081525060206040519081016040528060008152506124e6565b611fea818286866020604051908101604052806000815250602060405190810160405280600081525061283a565b61201a81828686602060405190810160405280600081525060206040519081016040528060008152506000612997565b600191505092915050565b600061203b82600b612dd790919063ffffffff16565b9050919050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061215a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121595750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b806121eb5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61228381613229565b50565b612297612291612449565b87612042565b1515612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f81526020017f7220666f7220686f6c646572000000000000000000000000000000000000000081525060400191505060405180910390fd5b6123cd61233c612449565b878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132ba565b505050505050565b6124446123e0612449565b6123e8612449565b8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505060206040519081016040528060008152506132ba565b505050565b600033905090565b600a60009054906101000a900460ff161515156124d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6124e1838383613353565b505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156125c057600080fd5b505afa1580156125d4573d6000803e3d6000fd5b505050506040513d60208110156125ea57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515612831578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612760578082015181840152602081019050612745565b50505050905090810190601f16801561278d5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156127c65780820151818401526020810190506127ab565b50505050905090810190601f1680156127f35780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561281857600080fd5b505af115801561282c573d6000803e3d6000fd5b505050505b50505050505050565b600a60009054906101000a900460ff161515156128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6128cd868686868686613509565b505050505050565b60008383111582901515612984576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561294957808201518184015260208101905061292e565b50505050905090810190601f1680156129765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015612a7157600080fd5b505afa158015612a85573d6000803e3d6000fd5b505050506040513d6020811015612a9b57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515612ce5578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612c10578082015181840152602081019050612bf5565b50505050905090810190601f168015612c3d5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015612c76578082015181840152602081019050612c5b565b50505050905090810190601f168015612ca35780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b158015612cc857600080fd5b505af1158015612cdc573d6000803e3d6000fd5b50505050612dcd565b8115612dcc57612d0a8673ffffffffffffffffffffffffffffffffffffffff166135b0565b151515612dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604b8152602001807f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637481526020017f20686173206e6f20696d706c656d656e7420666f7220455243373737546f6b6581526020017f6e73526563697069656e7400000000000000000000000000000000000000000081525060600191505060405180910390fd5b5b5b5050505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612ea3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526f6c65733a206163636f756e7420697320746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60009054906101000a900460ff16151515612f7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b612f8e878787878787876135fc565b50505050505050565b612fab8160096137a090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6130058160096138a290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600a60009054906101000a900460ff161515156130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6130dd858585858561397f565b5050505050565b600a60009054906101000a900460ff16151515613169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b61317281613c8f565b50565b61318981600b6138a290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6131e381600b6137a090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b600a60009054906101000a900460ff161515156132ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6132b781613f4b565b50565b600a60009054906101000a900460ff1615151561333f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b61334c8585858585614207565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561341e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f4552433737373a20617070726f766520746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061351484614599565b9050600061358982606060405190810160405280602281526020017f4552433737373a2066656520616d6f756e7420657863656564732062616c616e81526020017f6365000000000000000000000000000000000000000000000000000000000000815250876128d59092919063ffffffff16565b90506135988888848787614207565b6135a688888884888861469b565b5050505050505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706001029050833f9150600060010282141580156135f35750808214155b92505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141515156136c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f4552433737373a2073656e642066726f6d20746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415151561376c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433737373a2073656e6420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61377a8787878787876124e6565b61378887878787878761283a565b61379787878787878787612997565b50505050505050565b6137aa8282612dd7565b1515613844576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c81526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6138ac8282612dd7565b151515613921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613a24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433737373a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b613a39836001546149e290919063ffffffff16565b600181905550613a90836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546149e290919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ae3856000868686866001612997565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d858585604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613b7f578082015181840152602081019050613b64565b50505050905090810190601f168015613bac5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015613be5578082015181840152602081019050613bca565b50505050905090810190601f168015613c125780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b8073ffffffffffffffffffffffffffffffffffffffff16613cae612449565b73ffffffffffffffffffffffffffffffffffffffff1614151515613d60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f4552433737373a20617574686f72697a696e672073656c66206173206f70657281526020017f61746f720000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e4a5760076000613dbe612449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055613ee7565b600160066000613e58612449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613eef612449565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b613f53612449565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561401c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f4552433737373a207265766f6b696e672073656c66206173206f70657261746f81526020017f720000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561410f5760016007600061407c612449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506141a3565b6006600061411b612449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b6141ab612449565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156142d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f4552433737373a206275726e2066726f6d20746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6142e1858560008686866124e6565b61439083606060405190810160405280602381526020017f4552433737373a206275726e20616d6f756e7420657863656564732062616c6181526020017f6e636500000000000000000000000000000000000000000000000000000000008152506000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d59092919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143e783600154614a6c90919063ffffffff16565b6001819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098858585604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561448957808201518184015260208101905061446e565b50505050905090810190601f1680156144b65780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156144ef5780820151818401526020810190506144d4565b50505050905090810190601f16801561451c5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60006146946006600a0a6146866146606a0422ca8b0a00a4250000003073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561461757600080fd5b505afa15801561462b573d6000803e3d6000fd5b505050506040513d602081101561464157600080fd5b8101908080519060200190929190505050614ab690919063ffffffff16565b61467860fa61ffff1687614b0090919063ffffffff16565b614b0090919063ffffffff16565b614ab690919063ffffffff16565b9050919050565b61474a83606060405190810160405280602781526020017f4552433737373a207472616e7366657220616d6f756e7420657863656564732081526020017f62616c616e6365000000000000000000000000000000000000000000000000008152506000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d59092919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147dd836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546149e290919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156148d25780820151818401526020810190506148b7565b50505050905090810190601f1680156148ff5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561493857808201518184015260208101905061491d565b50505050905090810190601f1680156149655780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a48373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050565b6000808284019050838110151515614a62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000614aae83836040805190810160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128d5565b905092915050565b6000614af883836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bcd565b905092915050565b600080831415614b135760009050614bc7565b60008284029050828482811515614b2657fe5b04141515614bc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81526020017f770000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b809150505b92915050565b600080831182901515614c7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c40578082015181840152602081019050614c25565b50505050905090810190601f168015614c6d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515614c8957fe5b04905080915050939250505056fea165627a7a72305820c1bab4b5e3e40f4294e652b388dfc625ccf21445b4e184e78b601a51d58a2cc20029000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000422ca7d2949f07d9c0000000000000000000000000000000000000000000000000000000000000000000f4e4e4350726f6a656374546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e4e43540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003b4bfd216531e313aca3c878c04c8ccb109bb7a3

Deployed Bytecode

0x60806040526004361061017f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806223de29146101ed57806306e485381461033257806306fdde031461039e578063095ea7b31461042e57806318160ddd146104a157806323b872dd146104cc578063313ce5671461055f5780633f4ba83a1461059057806346fbf68e146105a7578063556f0dc7146106105780635c975abb1461063b57806362ad1b831461066a5780636ef8d66d1461078f57806370a08231146107a657806375ab97821461080b57806382dc1ec4146109505780638456cb59146109a157806394d008ef146109b8578063959b8c3f14610a6857806395d89b4114610ab9578063983b2d5614610b495780639865027514610b9a5780639bd9bbc614610bb1578063a9059cbb14610c61578063aa271e1a14610cd4578063d95b637114610d3d578063dd62ed3e14610dc6578063fad8b32a14610e4b578063fc673c4f14610e9c578063fe9d930314610fa1575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f742070617961626c6520636f6e747261637400000000000000000000000081525060200191505060405180910390fd5b3480156101f957600080fd5b50610330600480360360c081101561021057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561029757600080fd5b8201836020820111156102a957600080fd5b803590602001918460018302840111640100000000831117156102cb57600080fd5b9091929391929390803590602001906401000000008111156102ec57600080fd5b8201836020820111156102fe57600080fd5b8035906020019184600183028401116401000000008311171561032057600080fd5b9091929391929390505050611031565b005b34801561033e57600080fd5b5061034761109f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561038a57808201518184015260208101905061036f565b505050509050019250505060405180910390f35b3480156103aa57600080fd5b506103b361112d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103f35780820151818401526020810190506103d8565b50505050905090810190601f1680156104205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561043a57600080fd5b506104876004803603604081101561045157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111cf565b604051808215151515815260200191505060405180910390f35b3480156104ad57600080fd5b506104b66111f2565b6040518082815260200191505060405180910390f35b3480156104d857600080fd5b50610545600480360360608110156104ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111fc565b604051808215151515815260200191505060405180910390f35b34801561056b57600080fd5b5061057461152e565b604051808260ff1660ff16815260200191505060405180910390f35b34801561059c57600080fd5b506105a5611537565b005b3480156105b357600080fd5b506105f6600480360360208110156105ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116ec565b604051808215151515815260200191505060405180910390f35b34801561061c57600080fd5b50610625611709565b6040518082815260200191505060405180910390f35b34801561064757600080fd5b50610650611712565b604051808215151515815260200191505060405180910390f35b34801561067657600080fd5b5061078d600480360360a081101561068d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106f457600080fd5b82018360208201111561070657600080fd5b8035906020019184600183028401116401000000008311171561072857600080fd5b90919293919293908035906020019064010000000081111561074957600080fd5b82018360208201111561075b57600080fd5b8035906020019184600183028401116401000000008311171561077d57600080fd5b9091929391929390505050611729565b005b34801561079b57600080fd5b506107a461187c565b005b3480156107b257600080fd5b506107f5600480360360208110156107c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061188e565b6040518082815260200191505060405180910390f35b34801561081757600080fd5b5061094e600480360360c081101561082e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108b557600080fd5b8201836020820111156108c757600080fd5b803590602001918460018302840111640100000000831117156108e957600080fd5b90919293919293908035906020019064010000000081111561090a57600080fd5b82018360208201111561091c57600080fd5b8035906020019184600183028401116401000000008311171561093e57600080fd5b90919293919293905050506118d6565b005b34801561095c57600080fd5b5061099f6004803603602081101561097357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611944565b005b3480156109ad57600080fd5b506109b66119fa565b005b3480156109c457600080fd5b50610a66600480360360608110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610a2257600080fd5b820183602082011115610a3457600080fd5b80359060200191846001830284011164010000000083111715610a5657600080fd5b9091929391929390505050611bb0565b005b348015610a7457600080fd5b50610ab760048036036020811015610a8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc8565b005b348015610ac557600080fd5b50610ace611cd4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b0e578082015181840152602081019050610af3565b50505050905090810190601f168015610b3b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b5557600080fd5b50610b9860048036036020811015610b6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d76565b005b348015610ba657600080fd5b50610baf611e2c565b005b348015610bbd57600080fd5b50610c5f60048036036060811015610bd457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c1b57600080fd5b820183602082011115610c2d57600080fd5b80359060200191846001830284011164010000000083111715610c4f57600080fd5b9091929391929390505050611e3e565b005b348015610c6d57600080fd5b50610cba60048036036040811015610c8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611eb6565b604051808215151515815260200191505060405180910390f35b348015610ce057600080fd5b50610d2360048036036020811015610cf757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612025565b604051808215151515815260200191505060405180910390f35b348015610d4957600080fd5b50610dac60048036036040811015610d6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612042565b604051808215151515815260200191505060405180910390f35b348015610dd257600080fd5b50610e3560048036036040811015610de957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121f3565b6040518082815260200191505060405180910390f35b348015610e5757600080fd5b50610e9a60048036036020811015610e6e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061227a565b005b348015610ea857600080fd5b50610f9f60048036036080811015610ebf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610f0657600080fd5b820183602082011115610f1857600080fd5b80359060200191846001830284011164010000000083111715610f3a57600080fd5b909192939192939080359060200190640100000000811115610f5b57600080fd5b820183602082011115610f6d57600080fd5b80359060200191846001830284011164010000000083111715610f8f57600080fd5b9091929391929390505050612286565b005b348015610fad57600080fd5b5061102f60048036036040811015610fc457600080fd5b810190808035906020019092919080359060200190640100000000811115610feb57600080fd5b820183602082011115610ffd57600080fd5b8035906020019184600183028401116401000000008311171561101f57600080fd5b90919293919293905050506123d5565b005b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f546f6b656e732063616e6e6f742062652061636365707465640000000000000081525060200191505060405180910390fd5b6060600480548060200260200160405190810160405280929190818152602001828054801561112357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110d9575b5050505050905090565b606060028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111c55780601f1061119a576101008083540402835291602001916111c5565b820191906000526020600020905b8154815290600101906020018083116111a857829003601f168201915b5050505050905090565b6000806111da612449565b90506111e7818585612451565b600191505092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f4552433737373a207472616e7366657220746f20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4552433737373a207472616e736665722066726f6d20746865207a65726f206181526020017f646472657373000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600061139d612449565b90506113cd81868686602060405190810160405280600081525060206040519081016040528060008152506124e6565b6113fb818686866020604051908101604052806000815250602060405190810160405280600081525061283a565b6114f285826114ed86606060405190810160405280602981526020017f4552433737373a207472616e7366657220616d6f756e7420657863656564732081526020017f616c6c6f77616e63650000000000000000000000000000000000000000000000815250600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d59092919063ffffffff16565b612451565b61152281868686602060405190810160405280600081525060206040519081016040528060008152506000612997565b60019150509392505050565b60006012905090565b611547611542612449565b6116ec565b15156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f207468652050617573657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b600a60009054906101000a900460ff161515611665576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116a9612449565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000611702826009612dd790919063ffffffff16565b9050919050565b60006001905090565b6000600a60009054906101000a900460ff16905090565b61173a611734612449565b88612042565b15156117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f81526020017f7220666f7220686f6c646572000000000000000000000000000000000000000081525060400191505060405180910390fd5b6118736117df612449565b88888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001612efa565b50505050505050565b61188c611887612449565b612f97565b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6b656e732063616e6e6f742062652073656e64656400000000000000000081525060200191505060405180910390fd5b61195461194f612449565b6116ec565b15156119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f207468652050617573657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b6119f781612ff1565b50565b611a0a611a05612449565b6116ec565b1515611aa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f207468652050617573657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b600a60009054906101000a900460ff16151515611b29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b6d612449565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b611bc0611bbb612449565b612025565b1515611c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f20746865204d696e74657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b611cc2611c65612449565b858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050602060405190810160405280600081525061304b565b50505050565b611cd1816130e4565b50565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d6c5780601f10611d4157610100808354040283529160200191611d6c565b820191906000526020600020905b815481529060010190602001808311611d4f57829003601f168201915b5050505050905090565b611d86611d81612449565b612025565b1515611e20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766581526020017f20746865204d696e74657220726f6c650000000000000000000000000000000081525060400191505060405180910390fd5b611e2981613175565b50565b611e3c611e37612449565b6131cf565b565b611eb0611e49612449565b611e51612449565b868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505060206040519081016040528060008152506001612efa565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f4552433737373a207472616e7366657220746f20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000611f8c612449565b9050611fbc81828686602060405190810160405280600081525060206040519081016040528060008152506124e6565b611fea818286866020604051908101604052806000815250602060405190810160405280600081525061283a565b61201a81828686602060405190810160405280600081525060206040519081016040528060008152506000612997565b600191505092915050565b600061203b82600b612dd790919063ffffffff16565b9050919050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061215a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121595750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b806121eb5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61228381613229565b50565b612297612291612449565b87612042565b1515612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f81526020017f7220666f7220686f6c646572000000000000000000000000000000000000000081525060400191505060405180910390fd5b6123cd61233c612449565b878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132ba565b505050505050565b6124446123e0612449565b6123e8612449565b8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505060206040519081016040528060008152506132ba565b505050565b600033905090565b600a60009054906101000a900460ff161515156124d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6124e1838383613353565b505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156125c057600080fd5b505afa1580156125d4573d6000803e3d6000fd5b505050506040513d60208110156125ea57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515612831578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612760578082015181840152602081019050612745565b50505050905090810190601f16801561278d5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156127c65780820151818401526020810190506127ab565b50505050905090810190601f1680156127f35780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561281857600080fd5b505af115801561282c573d6000803e3d6000fd5b505050505b50505050505050565b600a60009054906101000a900460ff161515156128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6128cd868686868686613509565b505050505050565b60008383111582901515612984576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561294957808201518184015260208101905061292e565b50505050905090810190601f1680156129765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015612a7157600080fd5b505afa158015612a85573d6000803e3d6000fd5b505050506040513d6020811015612a9b57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515612ce5578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612c10578082015181840152602081019050612bf5565b50505050905090810190601f168015612c3d5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015612c76578082015181840152602081019050612c5b565b50505050905090810190601f168015612ca35780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b158015612cc857600080fd5b505af1158015612cdc573d6000803e3d6000fd5b50505050612dcd565b8115612dcc57612d0a8673ffffffffffffffffffffffffffffffffffffffff166135b0565b151515612dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604b8152602001807f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637481526020017f20686173206e6f20696d706c656d656e7420666f7220455243373737546f6b6581526020017f6e73526563697069656e7400000000000000000000000000000000000000000081525060600191505060405180910390fd5b5b5b5050505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612ea3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526f6c65733a206163636f756e7420697320746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60009054906101000a900460ff16151515612f7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b612f8e878787878787876135fc565b50505050505050565b612fab8160096137a090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6130058160096138a290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600a60009054906101000a900460ff161515156130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6130dd858585858561397f565b5050505050565b600a60009054906101000a900460ff16151515613169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b61317281613c8f565b50565b61318981600b6138a290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6131e381600b6137a090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b600a60009054906101000a900460ff161515156132ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6132b781613f4b565b50565b600a60009054906101000a900460ff1615151561333f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b61334c8585858585614207565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561341e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f4552433737373a20617070726f766520746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061351484614599565b9050600061358982606060405190810160405280602281526020017f4552433737373a2066656520616d6f756e7420657863656564732062616c616e81526020017f6365000000000000000000000000000000000000000000000000000000000000815250876128d59092919063ffffffff16565b90506135988888848787614207565b6135a688888884888861469b565b5050505050505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706001029050833f9150600060010282141580156135f35750808214155b92505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141515156136c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f4552433737373a2073656e642066726f6d20746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415151561376c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433737373a2073656e6420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61377a8787878787876124e6565b61378887878787878761283a565b61379787878787878787612997565b50505050505050565b6137aa8282612dd7565b1515613844576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c81526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6138ac8282612dd7565b151515613921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613a24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433737373a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b613a39836001546149e290919063ffffffff16565b600181905550613a90836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546149e290919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ae3856000868686866001612997565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d858585604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613b7f578082015181840152602081019050613b64565b50505050905090810190601f168015613bac5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015613be5578082015181840152602081019050613bca565b50505050905090810190601f168015613c125780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b8073ffffffffffffffffffffffffffffffffffffffff16613cae612449565b73ffffffffffffffffffffffffffffffffffffffff1614151515613d60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f4552433737373a20617574686f72697a696e672073656c66206173206f70657281526020017f61746f720000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e4a5760076000613dbe612449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055613ee7565b600160066000613e58612449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613eef612449565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b613f53612449565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561401c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f4552433737373a207265766f6b696e672073656c66206173206f70657261746f81526020017f720000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561410f5760016007600061407c612449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506141a3565b6006600061411b612449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b6141ab612449565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156142d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f4552433737373a206275726e2066726f6d20746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6142e1858560008686866124e6565b61439083606060405190810160405280602381526020017f4552433737373a206275726e20616d6f756e7420657863656564732062616c6181526020017f6e636500000000000000000000000000000000000000000000000000000000008152506000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d59092919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143e783600154614a6c90919063ffffffff16565b6001819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098858585604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561448957808201518184015260208101905061446e565b50505050905090810190601f1680156144b65780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156144ef5780820151818401526020810190506144d4565b50505050905090810190601f16801561451c5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60006146946006600a0a6146866146606a0422ca8b0a00a4250000003073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561461757600080fd5b505afa15801561462b573d6000803e3d6000fd5b505050506040513d602081101561464157600080fd5b8101908080519060200190929190505050614ab690919063ffffffff16565b61467860fa61ffff1687614b0090919063ffffffff16565b614b0090919063ffffffff16565b614ab690919063ffffffff16565b9050919050565b61474a83606060405190810160405280602781526020017f4552433737373a207472616e7366657220616d6f756e7420657863656564732081526020017f62616c616e6365000000000000000000000000000000000000000000000000008152506000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d59092919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147dd836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546149e290919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156148d25780820151818401526020810190506148b7565b50505050905090810190601f1680156148ff5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561493857808201518184015260208101905061491d565b50505050905090810190601f1680156149655780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a48373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050565b6000808284019050838110151515614a62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000614aae83836040805190810160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128d5565b905092915050565b6000614af883836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bcd565b905092915050565b600080831415614b135760009050614bc7565b60008284029050828482811515614b2657fe5b04141515614bc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81526020017f770000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b809150505b92915050565b600080831182901515614c7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c40578082015181840152602081019050614c25565b50505050905090810190601f168015614c6d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515614c8957fe5b04905080915050939250505056fea165627a7a72305820c1bab4b5e3e40f4294e652b388dfc625ccf21445b4e184e78b601a51d58a2cc20029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000422ca7d2949f07d9c0000000000000000000000000000000000000000000000000000000000000000000f4e4e4350726f6a656374546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e4e43540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003b4bfd216531e313aca3c878c04c8ccb109bb7a3

-----Decoded View---------------
Arg [0] : name (string): NNCProjectToken
Arg [1] : symbol (string): NNCT
Arg [2] : defaultOperators (address[]): 0x3b4BfD216531e313ACA3c878c04c8CCb109Bb7A3
Arg [3] : totalSupply (uint256): 4999999000000000000000000

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000422ca7d2949f07d9c0000
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 4e4e4350726f6a656374546f6b656e0000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4e4e435400000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000003b4bfd216531e313aca3c878c04c8ccb109bb7a3


Deployed Bytecode Sourcemap

51786:1151:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52898:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52394:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52394:230:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;52394:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;52394:230:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52394:230:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52394:230:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;52394:230:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52394:230:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52394:230:0;;;;;;;;;;;;;;;33156:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33156:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;33156:115:0;;;;;;;;;;;;;;;;;29224:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29224:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29224:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34721:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34721:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34721:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29999:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29999:91:0;;;;;;;;;;;;;;;;;;;;;;;35269:679;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35269:679:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35269:679:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29655:76;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29655:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;48479:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48479:120:0;;;;;;46004:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46004:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46004:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29853:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29853:80:0;;;;;;;;;;;;;;;;;;;;;;;47686:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47686:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;33390:388;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33390:388:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;33390:388:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;33390:388:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33390:388:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33390:388:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;33390:388:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33390:388:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33390:388:0;;;;;;;;;;;;;;;46221:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46221:79:0;;;;;;30195:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30195:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30195:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52630:226;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52630:226:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;52630:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;52630:226:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52630:226:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52630:226:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;52630:226:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52630:226:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52630:226:0;;;;;;;;;;;;;;;46121:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46121:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46121:92:0;;;;;;;;;;;;;;;;;;;;;;48266:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48266:118:0;;;;;;45359:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45359:159:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45359:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45359:159:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45359:159:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45359:159:0;;;;;;;;;;;;;;;31997:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31997:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31997:101:0;;;;;;;;;;;;;;;;;;;;;;29368:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29368:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29368:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44424:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44424:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44424:92:0;;;;;;;;;;;;;;;;;;;;;;44524:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44524:79:0;;;;;;30443:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30443:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30443:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;30443:166:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30443:166:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;30443:166:0;;;;;;;;;;;;;;;30850:436;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30850:436:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30850:436:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44307:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44307:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44307:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31614:311;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31614:311:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31614:311:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34440:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34440:136:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34440:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32583:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32583:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32583:95:0;;;;;;;;;;;;;;;;;;;;;;33899:293;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33899:293:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;33899:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;33899:293:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33899:293:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33899:293:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;33899:293:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33899:293:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33899:293:0;;;;;;;;;;;;;;;31416:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31416:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31416:130:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;31416:130:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31416:130:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;31416:130:0;;;;;;;;;;;;;;;52394:230;52583:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33156:115;33205:16;33241:22;33234:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33156:115;:::o;29224:83::-;29261:13;29294:5;29287:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29224:83;:::o;34721:186::-;34788:4;34805:14;34822:12;:10;:12::i;:::-;34805:29;;34845:32;34854:6;34862:7;34871:5;34845:8;:32::i;:::-;34895:4;34888:11;;;34721:186;;;;:::o;29999:91::-;30043:7;30070:12;;30063:19;;29999:91;:::o;35269:679::-;35360:4;35406:1;35385:23;;:9;:23;;;;35377:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35486:1;35468:20;;:6;:20;;;;35460:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35544:15;35562:12;:10;:12::i;:::-;35544:30;;35587:61;35605:7;35614:6;35622:9;35633:6;35587:61;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:61::i;:::-;35661:49;35667:7;35676:6;35684:9;35695:6;35661:49;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:49::i;:::-;35721:112;35730:6;35738:7;35747:85;35780:6;35747:85;;;;;;;;;;;;;;;;;;;;;;;:11;:19;35759:6;35747:19;;;;;;;;;;;;;;;:28;35767:7;35747:28;;;;;;;;;;;;;;;;:32;;:85;;;;;:::i;:::-;35721:8;:112::i;:::-;35846:70;35866:7;35875:6;35883:9;35894:6;35846:70;;;;;;;;;;;;;;;;;;;;;;;;;;35910:5;35846:19;:70::i;:::-;35936:4;35929:11;;;35269:679;;;;;:::o;29655:76::-;29696:5;29721:2;29714:9;;29655:76;:::o;48479:120::-;45901:22;45910:12;:10;:12::i;:::-;45901:8;:22::i;:::-;45893:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48122:7;;;;;;;;;;;48114:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48548:5;48538:7;;:15;;;;;;;;;;;;;;;;;;48569:22;48578:12;:10;:12::i;:::-;48569:22;;;;;;;;;;;;;;;;;;;;;;48479:120::o;46004:109::-;46060:4;46084:21;46097:7;46084:8;:12;;:21;;;;:::i;:::-;46077:28;;46004:109;;;:::o;29853:80::-;29897:7;29924:1;29917:8;;29853:80;:::o;47686:78::-;47725:4;47749:7;;;;;;;;;;;47742:14;;47686:78;:::o;33390:388::-;33603:35;33617:12;:10;:12::i;:::-;33631:6;33603:13;:35::i;:::-;33595:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33698:72;33704:12;:10;:12::i;:::-;33718:6;33726:9;33737:6;33745:4;;33698:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;33698:72:0;;;;;;33751:12;;33698:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;33698:72:0;;;;;;33765:4;33698:5;:72::i;:::-;33390:388;;;;;;;:::o;46221:79::-;46265:27;46279:12;:10;:12::i;:::-;46265:13;:27::i;:::-;46221:79::o;30195:118::-;30256:7;30283:9;:22;30293:11;30283:22;;;;;;;;;;;;;;;;30276:29;;30195:118;;;:::o;52630:226::-;52817:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46121:92;45901:22;45910:12;:10;:12::i;:::-;45901:8;:22::i;:::-;45893:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46186:19;46197:7;46186:10;:19::i;:::-;46121:92;:::o;48266:118::-;45901:22;45910:12;:10;:12::i;:::-;45901:8;:22::i;:::-;45893:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47923:7;;;;;;;;;;;47922:8;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48336:4;48326:7;;:14;;;;;;;;;;;;;;;;;;48356:20;48363:12;:10;:12::i;:::-;48356:20;;;;;;;;;;;;;;;;;;;;;;48266:118::o;45359:159::-;44204:22;44213:12;:10;:12::i;:::-;44204:8;:22::i;:::-;44196:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45458:52;45470:12;:10;:12::i;:::-;45484:7;45493:6;45501:4;;45458:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;45458:52:0;;;;;;;;;;;;;;;;;;;:11;:52::i;:::-;45359:159;;;;:::o;31997:101::-;32062:28;32081:8;32062:18;:28::i;:::-;31997:101;:::o;29368:87::-;29407:13;29440:7;29433:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29368:87;:::o;44424:92::-;44204:22;44213:12;:10;:12::i;:::-;44204:8;:22::i;:::-;44196:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44489:19;44500:7;44489:10;:19::i;:::-;44424:92;:::o;44524:79::-;44568:27;44582:12;:10;:12::i;:::-;44568:13;:27::i;:::-;44524:79::o;30443:166::-;30533:68;30539:12;:10;:12::i;:::-;30553;:10;:12::i;:::-;30567:9;30578:6;30586:4;;30533:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30533:68:0;;;;;;;;;;;;;;;;;;;30596:4;30533:5;:68::i;:::-;30443:166;;;;:::o;30850:436::-;30921:4;30967:1;30946:23;;:9;:23;;;;30938:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31023:12;31038;:10;:12::i;:::-;31023:27;;31063:56;31081:4;31087;31093:9;31104:6;31063:56;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:56::i;:::-;31132:44;31138:4;31144;31150:9;31161:6;31132:44;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:44::i;:::-;31189:65;31209:4;31215;31221:9;31232:6;31189:65;;;;;;;;;;;;;;;;;;;;;;;;;;31248:5;31189:19;:65::i;:::-;31274:4;31267:11;;;30850:436;;;;:::o;44307:109::-;44363:4;44387:21;44400:7;44387:8;:12;;:21;;;;:::i;:::-;44380:28;;44307:109;;;:::o;31614:311::-;31722:4;31758:11;31746:23;;:8;:23;;;:121;;;;31787:17;:27;31805:8;31787:27;;;;;;;;;;;;;;;;;;;;;;;;;:79;;;;;31819:24;:37;31844:11;31819:37;;;;;;;;;;;;;;;:47;31857:8;31819:47;;;;;;;;;;;;;;;;;;;;;;;;;31818:48;31787:79;31746:121;:171;;;;31884:10;:23;31895:11;31884:23;;;;;;;;;;;;;;;:33;31908:8;31884:33;;;;;;;;;;;;;;;;;;;;;;;;;31746:171;31739:178;;31614:311;;;;:::o;34440:136::-;34513:7;34540:11;:19;34552:6;34540:19;;;;;;;;;;;;;;;:28;34560:7;34540:28;;;;;;;;;;;;;;;;34533:35;;34440:136;;;;:::o;32583:95::-;32645:25;32661:8;32645:15;:25::i;:::-;32583:95;:::o;33899:293::-;34032:36;34046:12;:10;:12::i;:::-;34060:7;34032:13;:36::i;:::-;34024:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34128:56;34134:12;:10;:12::i;:::-;34148:7;34157:6;34165:4;;34128:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;34128:56:0;;;;;;34171:12;;34128:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;34128:56:0;;;;;;:5;:56::i;:::-;33899:293;;;;;;:::o;31416:130::-;31487:51;31493:12;:10;:12::i;:::-;31507;:10;:12::i;:::-;31521:6;31529:4;;31487:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31487:51:0;;;;;;;;;;;;;;;;;;;:5;:51::i;:::-;31416:130;;;:::o;842:98::-;887:15;922:10;915:17;;842:98;:::o;49278:146::-;47923:7;;;;;;;;;;;47922:8;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49378:38;49393:6;49401:7;49410:5;49378:14;:38::i;:::-;49278:146;;;:::o;40907:488::-;41138:19;27100:42;41160:32;;;41193:4;27578:66;41199:28;;41160:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41160:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41160:68:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41160:68:0;;;;;;;;;;;;;;;;41138:90;;41266:1;41243:25;;:11;:25;;;;41239:149;;;41299:11;41285:39;;;41325:8;41335:4;41341:2;41345:6;41353:8;41363:12;41285:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;41285:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;41285:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41285:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41285:91:0;;;;41239:149;40907:488;;;;;;;:::o;48958:312::-;47923:7;;;;;;;;;;;47922:8;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49199:63;49211:8;49221:4;49227:2;49231:6;49239:8;49249:12;49199:11;:63::i;:::-;48958:312;;;;;;:::o;14519:192::-;14605:7;14638:1;14633;:6;;14641:12;14625:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14625:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14665:9;14681:1;14677;:5;14665:17;;14702:1;14695:8;;;14519:192;;;;;:::o;42097:693::-;42365:19;27100:42;42387:32;;;42420:2;27764:66;42424:31;;42387:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42387:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42387:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42387:69:0;;;;;;;;;;;;;;;;42365:91;;42494:1;42471:25;;:11;:25;;;;42467:316;;;42530:11;42513:44;;;42558:8;42568:4;42574:2;42578:6;42586:8;42596:12;42513:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;42513:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;42513:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42513:96:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42513:96:0;;;;42467:316;;;42631:19;42627:156;;;42676:15;:2;:13;;;:15::i;:::-;42675:16;42667:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42627:156;42467:316;42097:693;;;;;;;;:::o;43618:203::-;43690:4;43734:1;43715:21;;:7;:21;;;;43707:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43793:4;:11;;:20;43805:7;43793:20;;;;;;;;;;;;;;;;;;;;;;;;;43786:27;;43618:203;;;;:::o;49432:361::-;47923:7;;;;;;;;;;;47922:8;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49701:84;49713:8;49723:4;49729:2;49733:6;49741:8;49751:12;49765:19;49701:11;:84::i;:::-;49432:361;;;;;;;:::o;46438:130::-;46498:24;46514:7;46498:8;:15;;:24;;;;:::i;:::-;46552:7;46538:22;;;;;;;;;;;;46438:130;:::o;46308:122::-;46365:21;46378:7;46365:8;:12;;:21;;;;:::i;:::-;46414:7;46402:20;;;;;;;;;;;;46308:122;:::o;49801:286::-;47923:7;;;;;;;;;;;47922:8;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50017:62;50029:8;50039:7;50048:6;50056:8;50066:12;50017:11;:62::i;:::-;49801:286;;;;;:::o;50375:122::-;47923:7;;;;;;;;;;;47922:8;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50455:34;50480:8;50455:24;:34::i;:::-;50375:122;:::o;44611:::-;44668:21;44681:7;44668:8;:12;;:21;;;;:::i;:::-;44717:7;44705:20;;;;;;;;;;;;44611:122;:::o;44741:130::-;44801:24;44817:7;44801:8;:15;;:24;;;;:::i;:::-;44855:7;44841:22;;;;;;;;;;;;44741:130;:::o;50505:116::-;47923:7;;;;;;;;;;;47922:8;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50582:31;50604:8;50582:21;:31::i;:::-;50505:116;:::o;50095:272::-;47923:7;;;;;;;;;;;47922:8;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50304:55;50316:8;50326:4;50332:6;50340:4;50346:12;50304:11;:55::i;:::-;50095:272;;;;;:::o;39923:500::-;40276:1;40257:21;;:7;:21;;;;40249:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40362:5;40331:11;:19;40343:6;40331:19;;;;;;;;;;;;;;;:28;40351:7;40331:28;;;;;;;;;;;;;;;:36;;;;40400:7;40383:32;;40392:6;40383:32;;;40409:5;40383:32;;;;;;;;;;;;;;;;;;39923:500;;;:::o;51048:493::-;51268:11;51282:21;51296:6;51282:13;:21::i;:::-;51268:35;;51314:18;51335:53;51346:3;51335:53;;;;;;;;;;;;;;;;;;;;;;;:6;:10;;:53;;;;;:::i;:::-;51314:74;;51399:56;51411:8;51421:4;51427:3;51432:8;51442:12;51399:11;:56::i;:::-;51466:67;51478:8;51488:4;51494:2;51498:10;51510:8;51520:12;51466:11;:67::i;:::-;51048:493;;;;;;;;:::o;18773:810::-;18833:4;19286:16;19313:19;19335:66;19313:88;;;;19504:7;19492:20;19480:32;;19544:3;19532:15;;:8;:15;;:42;;;;;19563:11;19551:8;:23;;19532:42;19524:51;;;;18773:810;;;:::o;37732:657::-;38011:1;37995:18;;:4;:18;;;;37987:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38085:1;38071:16;;:2;:16;;;;38063:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38137:69;38155:8;38165:4;38171:2;38175:6;38183:8;38193:12;38137:17;:69::i;:::-;38219:57;38225:8;38235:4;38241:2;38245:6;38253:8;38263:12;38219:5;:57::i;:::-;38289:92;38309:8;38319:4;38325:2;38329:6;38337:8;38347:12;38361:19;38289;:92::i;:::-;37732:657;;;;;;;:::o;43340:183::-;43420:18;43424:4;43430:7;43420:3;:18::i;:::-;43412:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43510:5;43487:4;:11;;:20;43499:7;43487:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;43340:183;;:::o;43082:178::-;43160:18;43164:4;43170:7;43160:3;:18::i;:::-;43159:19;43151:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43248:4;43225;:11;;:20;43237:7;43225:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;43082:178;;:::o;36530:650::-;36755:1;36736:21;;:7;:21;;;;36728:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36857:24;36874:6;36857:12;;:16;;:24;;;;:::i;:::-;36842:12;:39;;;;36913:30;36936:6;36913:9;:18;36923:7;36913:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;36892:9;:18;36902:7;36892:18;;;;;;;;;;;;;;;:51;;;;36956:88;36976:8;36994:1;36998:7;37007:6;37015:8;37025:12;37039:4;36956:19;:88::i;:::-;37079:7;37062:57;;37069:8;37062:57;;;37088:6;37096:8;37106:12;37062:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;37062:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;37062:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37156:7;37135:37;;37152:1;37135:37;;;37165:6;37135:37;;;;;;;;;;;;;;;;;;36530:650;;;;;:::o;32106:408::-;32196:8;32180:24;;:12;:10;:12::i;:::-;:24;;;;32172:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32262:17;:27;32280:8;32262:27;;;;;;;;;;;;;;;;;;;;;;;;;32258:189;;;32313:24;:38;32338:12;:10;:12::i;:::-;32313:38;;;;;;;;;;;;;;;:48;32352:8;32313:48;;;;;;;;;;;;;;;;32306:55;;;;;;;;;;;32258:189;;;32431:4;32394:10;:24;32405:12;:10;:12::i;:::-;32394:24;;;;;;;;;;;;;;;:34;32419:8;32394:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;32258:189;32493:12;:10;:12::i;:::-;32464:42;;32483:8;32464:42;;;;;;;;;;;;32106:408;:::o;32686:399::-;32769:12;:10;:12::i;:::-;32757:24;;:8;:24;;;;32749:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32836:17;:27;32854:8;32836:27;;;;;;;;;;;;;;;;;;;;;;;;;32832:189;;;32931:4;32880:24;:38;32905:12;:10;:12::i;:::-;32880:38;;;;;;;;;;;;;;;:48;32919:8;32880:48;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;32832:189;;;32975:10;:24;32986:12;:10;:12::i;:::-;32975:24;;;;;;;;;;;;;;;:34;33000:8;32975:34;;;;;;;;;;;;;;;;32968:41;;;;;;;;;;;32832:189;33064:12;:10;:12::i;:::-;33038:39;;33054:8;33038:39;;;;;;;;;;;;32686:399;:::o;38769:654::-;38988:1;38972:18;;:4;:18;;;;38964:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39042:73;39060:8;39070:4;39084:1;39088:6;39096:4;39102:12;39042:17;:73::i;:::-;39181:66;39201:6;39181:66;;;;;;;;;;;;;;;;;;;;;;;:9;:15;39191:4;39181:15;;;;;;;;;;;;;;;;:19;;:66;;;;;:::i;:::-;39163:9;:15;39173:4;39163:15;;;;;;;;;;;;;;;:84;;;;39273:24;39290:6;39273:12;;:16;;:24;;;;:::i;:::-;39258:12;:39;;;;39332:4;39315:50;;39322:8;39315:50;;;39338:6;39346:4;39352:12;39315:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39315:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39315:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39404:1;39381:34;;39390:4;39381:34;;;39408:6;39381:34;;;;;;;;;;;;;;;;;;38769:654;;;;;:::o;51549:188::-;51611:7;51643:86;50966:1;51710:2;:18;51643:62;51664:40;51018:17;51664:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51664:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51664:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51664:18:0;;;;;;;;;;;;;;;;:22;;:40;;;;:::i;:::-;51643:16;50916:3;51643:16;;:6;:10;;:16;;;;:::i;:::-;:20;;:62;;;;:::i;:::-;:66;;:86;;;;:::i;:::-;51636:93;;51549:188;;;:::o;39431:484::-;39669:70;39689:6;39669:70;;;;;;;;;;;;;;;;;;;;;;;:9;:15;39679:4;39669:15;;;;;;;;;;;;;;;;:19;;:70;;;;;:::i;:::-;39651:9;:15;39661:4;39651:15;;;;;;;;;;;;;;;:88;;;;39766:25;39784:6;39766:9;:13;39776:2;39766:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;39750:9;:13;39760:2;39750:13;;;;;;;;;;;;;;;:41;;;;39830:2;39809:56;;39824:4;39809:56;;39814:8;39809:56;;;39834:6;39842:8;39852:12;39809:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39809:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39809:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39896:2;39881:26;;39890:4;39881:26;;;39900:6;39881:26;;;;;;;;;;;;;;;;;;39431:484;;;;;;:::o;13590:181::-;13648:7;13668:9;13684:1;13680;:5;13668:17;;13709:1;13704;:6;;13696:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13762:1;13755:8;;;13590:181;;;;:::o;14046:136::-;14104:7;14131:43;14135:1;14138;14131:43;;;;;;;;;;;;;;;;;;:3;:43::i;:::-;14124:50;;14046:136;;;;:::o;15901:132::-;15959:7;15986:39;15990:1;15993;15986:39;;;;;;;;;;;;;;;;;;:3;:39::i;:::-;15979:46;;15901:132;;;;:::o;14962:471::-;15020:7;15270:1;15265;:6;15261:47;;;15295:1;15288:8;;;;15261:47;15320:9;15336:1;15332;:5;15320:17;;15365:1;15360;15356;:5;;;;;;;;:10;15348:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15424:1;15417:8;;;14962:471;;;;;:::o;16563:345::-;16649:7;16748:1;16744;:5;16751:12;16736:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;16736:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16775:9;16791:1;16787;:5;;;;;;;;16775:17;;16899:1;16892:8;;;16563:345;;;;;:::o

Swarm Source

bzzr://c1bab4b5e3e40f4294e652b388dfc625ccf21445b4e184e78b601a51d58a2cc2
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.