GLMR Price: $0.265113 (-2.41%)
Gas: 137 GWei

Token

TicketDeployer (TIDE)

Overview

Max Total Supply

0 TIDE

Holders

1

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
TicketDeployer

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-08-09
*/

// SPDX-License-Identifier: MIT

/**
     ___           ___           ___     
     /\  \         /\__\         /\  \    
    /::\  \       /::|  |       /::\  \   
   /:/\:\  \     /:|:|  |      /:/\:\  \  
  /:/  \:\  \   /:/|:|  |__   /::\~\:\  \ 
 /:/__/ \:\__\ /:/ |:| /\__\ /:/\:\ \:\__\
 \:\  \  \/__/ \/__|:|/:/  / \/__\:\/:/  /
  \:\  \           |:/:/  /       \::/  / 
   \:\  \          |::/  /        /:/  /  
    \:\__\         /:/  /        /:/  /   
     \/__/         \/__/         \/__/    
/*

// https://www.canarynetwork.agency/


// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non-ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non-ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: MyToken.sol

pragma solidity ^0.8.0;

contract TicketDeployer is ERC1155, Ownable {
    
  string public name;
  string public symbol;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "TicketDeployer";
    symbol = "TIDE";
  }

  function mint(address _to, uint _id, uint _amount) external onlyOwner {
    _mint(_to, _id, _amount, "");
  }

  function burn(uint _id, uint _amount) external {
    _burn(msg.sender, _id, _amount);
  }

  function setURI(uint _id, string memory _uri) external onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

  function uri(uint _id) public override view returns (string memory) {
    return tokenURI[_id];
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f660201b60201c565b5062000054620000486200011260201b60201c565b6200011a60201b60201c565b6040518060400160405280600e81526020017f5469636b65744465706c6f79657200000000000000000000000000000000000081525060049080519060200190620000a1929190620001e0565b506040518060400160405280600481526020017f544944450000000000000000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620001e0565b50620002f5565b80600290805190602001906200010e929190620001e0565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee9062000290565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b60006002820490506001821680620002a957607f821691505b60208210811415620002c057620002bf620002c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61348080620003056000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c8063862440e2116100a2578063b390c0ab11610071578063b390c0ab146102a3578063c87b56dd146102bf578063e985e9c5146102ef578063f242432a1461031f578063f2fde38b1461033b5761010a565b8063862440e21461022f5780638da5cb5b1461024b57806395d89b4114610269578063a22cb465146102875761010a565b8063156e29f6116100de578063156e29f6146101bd5780632eb2c2d6146101d95780634e1273f4146101f5578063715018a6146102255761010a565b8062fdd58e1461010f57806301ffc9a71461013f57806306fdde031461016f5780630e89341c1461018d575b600080fd5b6101296004803603810190610124919061225c565b610357565b6040516101369190612acb565b60405180910390f35b61015960048036038101906101549190612367565b610420565b60405161016691906128ce565b60405180910390f35b610177610502565b60405161018491906128e9565b60405180910390f35b6101a760048036038101906101a291906123c1565b610590565b6040516101b491906128e9565b60405180910390f35b6101d760048036038101906101d2919061229c565b610635565b005b6101f360048036038101906101ee91906120b6565b61065d565b005b61020f600480360381019061020a91906122ef565b6106fe565b60405161021c9190612875565b60405180910390f35b61022d610817565b005b610249600480360381019061024491906123ee565b61082b565b005b610253610897565b6040516102609190612798565b60405180910390f35b6102716108c1565b60405161027e91906128e9565b60405180910390f35b6102a1600480360381019061029c919061221c565b61094f565b005b6102bd60048036038101906102b8919061244a565b610965565b005b6102d960048036038101906102d491906123c1565b610974565b6040516102e691906128e9565b60405180910390f35b61030960048036038101906103049190612076565b610a14565b60405161031691906128ce565b60405180910390f35b61033960048036038101906103349190612185565b610aa8565b005b61035560048036038101906103509190612049565b610b49565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bf9061296b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104eb57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104fb57506104fa82610bcd565b5b9050919050565b6004805461050f90612d6b565b80601f016020809104026020016040519081016040528092919081815260200182805461053b90612d6b565b80156105885780601f1061055d57610100808354040283529160200191610588565b820191906000526020600020905b81548152906001019060200180831161056b57829003601f168201915b505050505081565b60606006600083815260200190815260200160002080546105b090612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546105dc90612d6b565b80156106295780601f106105fe57610100808354040283529160200191610629565b820191906000526020600020905b81548152906001019060200180831161060c57829003601f168201915b50505050509050919050565b61063d610c37565b61065883838360405180602001604052806000815250610cb5565b505050565b610665610e66565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106ab57506106aa856106a5610e66565b610a14565b5b6106ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e19061298b565b60405180910390fd5b6106f78585858585610e6e565b5050505050565b60608151835114610744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073b90612a4b565b60405180910390fd5b6000835167ffffffffffffffff81111561076157610760612ea4565b5b60405190808252806020026020018201604052801561078f5781602001602082028036833780820191505090505b50905060005b845181101561080c576107dc8582815181106107b4576107b3612e75565b5b60200260200101518583815181106107cf576107ce612e75565b5b6020026020010151610357565b8282815181106107ef576107ee612e75565b5b6020026020010181815250508061080590612dce565b9050610795565b508091505092915050565b61081f610c37565b6108296000611190565b565b610833610c37565b8060066000848152602001908152602001600020908051906020019061085a929190611d21565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161088b91906128e9565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600580546108ce90612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fa90612d6b565b80156109475780601f1061091c57610100808354040283529160200191610947565b820191906000526020600020905b81548152906001019060200180831161092a57829003601f168201915b505050505081565b61096161095a610e66565b8383611256565b5050565b6109703383836113c3565b5050565b6006602052806000526040600020600091509050805461099390612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90612d6b565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ab0610e66565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610af65750610af585610af0610e66565b610a14565b5b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c9061298b565b60405180910390fd5b610b42858585858561160a565b5050505050565b610b51610c37565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb89061292b565b60405180910390fd5b610bca81611190565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610c3f610e66565b73ffffffffffffffffffffffffffffffffffffffff16610c5d610897565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90612a0b565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90612a8b565b60405180910390fd5b6000610d2f610e66565b90506000610d3c856118a6565b90506000610d49856118a6565b9050610d5a83600089858589611920565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610db99190612c5f565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610e37929190612ae6565b60405180910390a4610e4e83600089858589611928565b610e5d83600089898989611930565b50505050505050565b600033905090565b8151835114610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990612a6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f19906129ab565b60405180910390fd5b6000610f2c610e66565b9050610f3c818787878787611920565b60005b84518110156110ed576000858281518110610f5d57610f5c612e75565b5b602002602001015190506000858381518110610f7c57610f7b612e75565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561101d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611014906129eb565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d29190612c5f565b92505081905550505050806110e690612dce565b9050610f3f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611164929190612897565b60405180910390a461117a818787878787611928565b611188818787878787611b17565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90612a2b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113b691906128ce565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a906129cb565b60405180910390fd5b600061143d610e66565b9050600061144a846118a6565b90506000611457846118a6565b905061147783876000858560405180602001604052806000815250611920565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561150e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115059061294b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516115db929190612ae6565b60405180910390a461160184886000868660405180602001604052806000815250611928565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561167a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611671906129ab565b60405180910390fd5b6000611684610e66565b90506000611691856118a6565b9050600061169e856118a6565b90506116ae838989858589611920565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c906129eb565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fa9190612c5f565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611877929190612ae6565b60405180910390a461188d848a8a86868a611928565b61189b848a8a8a8a8a611930565b505050505050505050565b60606000600167ffffffffffffffff8111156118c5576118c4612ea4565b5b6040519080825280602002602001820160405280156118f35781602001602082028036833780820191505090505b509050828160008151811061190b5761190a612e75565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b61194f8473ffffffffffffffffffffffffffffffffffffffff16611cfe565b15611b0f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161199595949392919061281b565b602060405180830381600087803b1580156119af57600080fd5b505af19250505080156119e057506040513d601f19601f820116820180604052508101906119dd9190612394565b60015b611a86576119ec612ed3565b806308c379a01415611a495750611a01613358565b80611a0c5750611a4b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4091906128e9565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90612aab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b049061290b565b60405180910390fd5b505b505050505050565b611b368473ffffffffffffffffffffffffffffffffffffffff16611cfe565b15611cf6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b7c9594939291906127b3565b602060405180830381600087803b158015611b9657600080fd5b505af1925050508015611bc757506040513d601f19601f82011682018060405250810190611bc49190612394565b60015b611c6d57611bd3612ed3565b806308c379a01415611c305750611be8613358565b80611bf35750611c32565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2791906128e9565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490612aab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb9061290b565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611d2d90612d6b565b90600052602060002090601f016020900481019282611d4f5760008555611d96565b82601f10611d6857805160ff1916838001178555611d96565b82800160010185558215611d96579182015b82811115611d95578251825591602001919060010190611d7a565b5b509050611da39190611da7565b5090565b5b80821115611dc0576000816000905550600101611da8565b5090565b6000611dd7611dd284612b34565b612b0f565b90508083825260208201905082856020860282011115611dfa57611df9612efa565b5b60005b85811015611e2a5781611e108882611f28565b845260208401935060208301925050600181019050611dfd565b5050509392505050565b6000611e47611e4284612b60565b612b0f565b90508083825260208201905082856020860282011115611e6a57611e69612efa565b5b60005b85811015611e9a5781611e808882612034565b845260208401935060208301925050600181019050611e6d565b5050509392505050565b6000611eb7611eb284612b8c565b612b0f565b905082815260208101848484011115611ed357611ed2612eff565b5b611ede848285612d29565b509392505050565b6000611ef9611ef484612bbd565b612b0f565b905082815260208101848484011115611f1557611f14612eff565b5b611f20848285612d29565b509392505050565b600081359050611f37816133ee565b92915050565b600082601f830112611f5257611f51612ef5565b5b8135611f62848260208601611dc4565b91505092915050565b600082601f830112611f8057611f7f612ef5565b5b8135611f90848260208601611e34565b91505092915050565b600081359050611fa881613405565b92915050565b600081359050611fbd8161341c565b92915050565b600081519050611fd28161341c565b92915050565b600082601f830112611fed57611fec612ef5565b5b8135611ffd848260208601611ea4565b91505092915050565b600082601f83011261201b5761201a612ef5565b5b813561202b848260208601611ee6565b91505092915050565b60008135905061204381613433565b92915050565b60006020828403121561205f5761205e612f09565b5b600061206d84828501611f28565b91505092915050565b6000806040838503121561208d5761208c612f09565b5b600061209b85828601611f28565b92505060206120ac85828601611f28565b9150509250929050565b600080600080600060a086880312156120d2576120d1612f09565b5b60006120e088828901611f28565b95505060206120f188828901611f28565b945050604086013567ffffffffffffffff81111561211257612111612f04565b5b61211e88828901611f6b565b935050606086013567ffffffffffffffff81111561213f5761213e612f04565b5b61214b88828901611f6b565b925050608086013567ffffffffffffffff81111561216c5761216b612f04565b5b61217888828901611fd8565b9150509295509295909350565b600080600080600060a086880312156121a1576121a0612f09565b5b60006121af88828901611f28565b95505060206121c088828901611f28565b94505060406121d188828901612034565b93505060606121e288828901612034565b925050608086013567ffffffffffffffff81111561220357612202612f04565b5b61220f88828901611fd8565b9150509295509295909350565b6000806040838503121561223357612232612f09565b5b600061224185828601611f28565b925050602061225285828601611f99565b9150509250929050565b6000806040838503121561227357612272612f09565b5b600061228185828601611f28565b925050602061229285828601612034565b9150509250929050565b6000806000606084860312156122b5576122b4612f09565b5b60006122c386828701611f28565b93505060206122d486828701612034565b92505060406122e586828701612034565b9150509250925092565b6000806040838503121561230657612305612f09565b5b600083013567ffffffffffffffff81111561232457612323612f04565b5b61233085828601611f3d565b925050602083013567ffffffffffffffff81111561235157612350612f04565b5b61235d85828601611f6b565b9150509250929050565b60006020828403121561237d5761237c612f09565b5b600061238b84828501611fae565b91505092915050565b6000602082840312156123aa576123a9612f09565b5b60006123b884828501611fc3565b91505092915050565b6000602082840312156123d7576123d6612f09565b5b60006123e584828501612034565b91505092915050565b6000806040838503121561240557612404612f09565b5b600061241385828601612034565b925050602083013567ffffffffffffffff81111561243457612433612f04565b5b61244085828601612006565b9150509250929050565b6000806040838503121561246157612460612f09565b5b600061246f85828601612034565b925050602061248085828601612034565b9150509250929050565b6000612496838361277a565b60208301905092915050565b6124ab81612cb5565b82525050565b60006124bc82612bfe565b6124c68185612c2c565b93506124d183612bee565b8060005b838110156125025781516124e9888261248a565b97506124f483612c1f565b9250506001810190506124d5565b5085935050505092915050565b61251881612cc7565b82525050565b600061252982612c09565b6125338185612c3d565b9350612543818560208601612d38565b61254c81612f0e565b840191505092915050565b600061256282612c14565b61256c8185612c4e565b935061257c818560208601612d38565b61258581612f0e565b840191505092915050565b600061259d602883612c4e565b91506125a882612f2c565b604082019050919050565b60006125c0602683612c4e565b91506125cb82612f7b565b604082019050919050565b60006125e3602483612c4e565b91506125ee82612fca565b604082019050919050565b6000612606602a83612c4e565b915061261182613019565b604082019050919050565b6000612629602e83612c4e565b915061263482613068565b604082019050919050565b600061264c602583612c4e565b9150612657826130b7565b604082019050919050565b600061266f602383612c4e565b915061267a82613106565b604082019050919050565b6000612692602a83612c4e565b915061269d82613155565b604082019050919050565b60006126b5602083612c4e565b91506126c0826131a4565b602082019050919050565b60006126d8602983612c4e565b91506126e3826131cd565b604082019050919050565b60006126fb602983612c4e565b91506127068261321c565b604082019050919050565b600061271e602883612c4e565b91506127298261326b565b604082019050919050565b6000612741602183612c4e565b915061274c826132ba565b604082019050919050565b6000612764603483612c4e565b915061276f82613309565b604082019050919050565b61278381612d1f565b82525050565b61279281612d1f565b82525050565b60006020820190506127ad60008301846124a2565b92915050565b600060a0820190506127c860008301886124a2565b6127d560208301876124a2565b81810360408301526127e781866124b1565b905081810360608301526127fb81856124b1565b9050818103608083015261280f818461251e565b90509695505050505050565b600060a08201905061283060008301886124a2565b61283d60208301876124a2565b61284a6040830186612789565b6128576060830185612789565b8181036080830152612869818461251e565b90509695505050505050565b6000602082019050818103600083015261288f81846124b1565b905092915050565b600060408201905081810360008301526128b181856124b1565b905081810360208301526128c581846124b1565b90509392505050565b60006020820190506128e3600083018461250f565b92915050565b600060208201905081810360008301526129038184612557565b905092915050565b6000602082019050818103600083015261292481612590565b9050919050565b60006020820190508181036000830152612944816125b3565b9050919050565b60006020820190508181036000830152612964816125d6565b9050919050565b60006020820190508181036000830152612984816125f9565b9050919050565b600060208201905081810360008301526129a48161261c565b9050919050565b600060208201905081810360008301526129c48161263f565b9050919050565b600060208201905081810360008301526129e481612662565b9050919050565b60006020820190508181036000830152612a0481612685565b9050919050565b60006020820190508181036000830152612a24816126a8565b9050919050565b60006020820190508181036000830152612a44816126cb565b9050919050565b60006020820190508181036000830152612a64816126ee565b9050919050565b60006020820190508181036000830152612a8481612711565b9050919050565b60006020820190508181036000830152612aa481612734565b9050919050565b60006020820190508181036000830152612ac481612757565b9050919050565b6000602082019050612ae06000830184612789565b92915050565b6000604082019050612afb6000830185612789565b612b086020830184612789565b9392505050565b6000612b19612b2a565b9050612b258282612d9d565b919050565b6000604051905090565b600067ffffffffffffffff821115612b4f57612b4e612ea4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b7b57612b7a612ea4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612ba757612ba6612ea4565b5b612bb082612f0e565b9050602081019050919050565b600067ffffffffffffffff821115612bd857612bd7612ea4565b5b612be182612f0e565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612c6a82612d1f565b9150612c7583612d1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612caa57612ca9612e17565b5b828201905092915050565b6000612cc082612cff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612d56578082015181840152602081019050612d3b565b83811115612d65576000848401525b50505050565b60006002820490506001821680612d8357607f821691505b60208210811415612d9757612d96612e46565b5b50919050565b612da682612f0e565b810181811067ffffffffffffffff82111715612dc557612dc4612ea4565b5b80604052505050565b6000612dd982612d1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e0c57612e0b612e17565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612ef25760046000803e612eef600051612f1f565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600060443d1015613368576133eb565b613370612b2a565b60043d036004823e80513d602482011167ffffffffffffffff821117156133985750506133eb565b808201805167ffffffffffffffff8111156133b657505050506133eb565b80602083010160043d0385018111156133d35750505050506133eb565b6133e282602001850186612d9d565b82955050505050505b90565b6133f781612cb5565b811461340257600080fd5b50565b61340e81612cc7565b811461341957600080fd5b50565b61342581612cd3565b811461343057600080fd5b50565b61343c81612d1f565b811461344757600080fd5b5056fea264697066735822122025f55ef07bf173f0a1a031872c253f645e63a4ecc17f6b3350434774f1677c2764736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010a5760003560e01c8063862440e2116100a2578063b390c0ab11610071578063b390c0ab146102a3578063c87b56dd146102bf578063e985e9c5146102ef578063f242432a1461031f578063f2fde38b1461033b5761010a565b8063862440e21461022f5780638da5cb5b1461024b57806395d89b4114610269578063a22cb465146102875761010a565b8063156e29f6116100de578063156e29f6146101bd5780632eb2c2d6146101d95780634e1273f4146101f5578063715018a6146102255761010a565b8062fdd58e1461010f57806301ffc9a71461013f57806306fdde031461016f5780630e89341c1461018d575b600080fd5b6101296004803603810190610124919061225c565b610357565b6040516101369190612acb565b60405180910390f35b61015960048036038101906101549190612367565b610420565b60405161016691906128ce565b60405180910390f35b610177610502565b60405161018491906128e9565b60405180910390f35b6101a760048036038101906101a291906123c1565b610590565b6040516101b491906128e9565b60405180910390f35b6101d760048036038101906101d2919061229c565b610635565b005b6101f360048036038101906101ee91906120b6565b61065d565b005b61020f600480360381019061020a91906122ef565b6106fe565b60405161021c9190612875565b60405180910390f35b61022d610817565b005b610249600480360381019061024491906123ee565b61082b565b005b610253610897565b6040516102609190612798565b60405180910390f35b6102716108c1565b60405161027e91906128e9565b60405180910390f35b6102a1600480360381019061029c919061221c565b61094f565b005b6102bd60048036038101906102b8919061244a565b610965565b005b6102d960048036038101906102d491906123c1565b610974565b6040516102e691906128e9565b60405180910390f35b61030960048036038101906103049190612076565b610a14565b60405161031691906128ce565b60405180910390f35b61033960048036038101906103349190612185565b610aa8565b005b61035560048036038101906103509190612049565b610b49565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bf9061296b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104eb57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104fb57506104fa82610bcd565b5b9050919050565b6004805461050f90612d6b565b80601f016020809104026020016040519081016040528092919081815260200182805461053b90612d6b565b80156105885780601f1061055d57610100808354040283529160200191610588565b820191906000526020600020905b81548152906001019060200180831161056b57829003601f168201915b505050505081565b60606006600083815260200190815260200160002080546105b090612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546105dc90612d6b565b80156106295780601f106105fe57610100808354040283529160200191610629565b820191906000526020600020905b81548152906001019060200180831161060c57829003601f168201915b50505050509050919050565b61063d610c37565b61065883838360405180602001604052806000815250610cb5565b505050565b610665610e66565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106ab57506106aa856106a5610e66565b610a14565b5b6106ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e19061298b565b60405180910390fd5b6106f78585858585610e6e565b5050505050565b60608151835114610744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073b90612a4b565b60405180910390fd5b6000835167ffffffffffffffff81111561076157610760612ea4565b5b60405190808252806020026020018201604052801561078f5781602001602082028036833780820191505090505b50905060005b845181101561080c576107dc8582815181106107b4576107b3612e75565b5b60200260200101518583815181106107cf576107ce612e75565b5b6020026020010151610357565b8282815181106107ef576107ee612e75565b5b6020026020010181815250508061080590612dce565b9050610795565b508091505092915050565b61081f610c37565b6108296000611190565b565b610833610c37565b8060066000848152602001908152602001600020908051906020019061085a929190611d21565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161088b91906128e9565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600580546108ce90612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fa90612d6b565b80156109475780601f1061091c57610100808354040283529160200191610947565b820191906000526020600020905b81548152906001019060200180831161092a57829003601f168201915b505050505081565b61096161095a610e66565b8383611256565b5050565b6109703383836113c3565b5050565b6006602052806000526040600020600091509050805461099390612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90612d6b565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ab0610e66565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610af65750610af585610af0610e66565b610a14565b5b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c9061298b565b60405180910390fd5b610b42858585858561160a565b5050505050565b610b51610c37565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb89061292b565b60405180910390fd5b610bca81611190565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610c3f610e66565b73ffffffffffffffffffffffffffffffffffffffff16610c5d610897565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90612a0b565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90612a8b565b60405180910390fd5b6000610d2f610e66565b90506000610d3c856118a6565b90506000610d49856118a6565b9050610d5a83600089858589611920565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610db99190612c5f565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610e37929190612ae6565b60405180910390a4610e4e83600089858589611928565b610e5d83600089898989611930565b50505050505050565b600033905090565b8151835114610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990612a6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f19906129ab565b60405180910390fd5b6000610f2c610e66565b9050610f3c818787878787611920565b60005b84518110156110ed576000858281518110610f5d57610f5c612e75565b5b602002602001015190506000858381518110610f7c57610f7b612e75565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561101d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611014906129eb565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d29190612c5f565b92505081905550505050806110e690612dce565b9050610f3f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611164929190612897565b60405180910390a461117a818787878787611928565b611188818787878787611b17565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90612a2b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113b691906128ce565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a906129cb565b60405180910390fd5b600061143d610e66565b9050600061144a846118a6565b90506000611457846118a6565b905061147783876000858560405180602001604052806000815250611920565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561150e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115059061294b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516115db929190612ae6565b60405180910390a461160184886000868660405180602001604052806000815250611928565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561167a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611671906129ab565b60405180910390fd5b6000611684610e66565b90506000611691856118a6565b9050600061169e856118a6565b90506116ae838989858589611920565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c906129eb565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fa9190612c5f565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611877929190612ae6565b60405180910390a461188d848a8a86868a611928565b61189b848a8a8a8a8a611930565b505050505050505050565b60606000600167ffffffffffffffff8111156118c5576118c4612ea4565b5b6040519080825280602002602001820160405280156118f35781602001602082028036833780820191505090505b509050828160008151811061190b5761190a612e75565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b61194f8473ffffffffffffffffffffffffffffffffffffffff16611cfe565b15611b0f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161199595949392919061281b565b602060405180830381600087803b1580156119af57600080fd5b505af19250505080156119e057506040513d601f19601f820116820180604052508101906119dd9190612394565b60015b611a86576119ec612ed3565b806308c379a01415611a495750611a01613358565b80611a0c5750611a4b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4091906128e9565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90612aab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b049061290b565b60405180910390fd5b505b505050505050565b611b368473ffffffffffffffffffffffffffffffffffffffff16611cfe565b15611cf6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b7c9594939291906127b3565b602060405180830381600087803b158015611b9657600080fd5b505af1925050508015611bc757506040513d601f19601f82011682018060405250810190611bc49190612394565b60015b611c6d57611bd3612ed3565b806308c379a01415611c305750611be8613358565b80611bf35750611c32565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2791906128e9565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490612aab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb9061290b565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611d2d90612d6b565b90600052602060002090601f016020900481019282611d4f5760008555611d96565b82601f10611d6857805160ff1916838001178555611d96565b82800160010185558215611d96579182015b82811115611d95578251825591602001919060010190611d7a565b5b509050611da39190611da7565b5090565b5b80821115611dc0576000816000905550600101611da8565b5090565b6000611dd7611dd284612b34565b612b0f565b90508083825260208201905082856020860282011115611dfa57611df9612efa565b5b60005b85811015611e2a5781611e108882611f28565b845260208401935060208301925050600181019050611dfd565b5050509392505050565b6000611e47611e4284612b60565b612b0f565b90508083825260208201905082856020860282011115611e6a57611e69612efa565b5b60005b85811015611e9a5781611e808882612034565b845260208401935060208301925050600181019050611e6d565b5050509392505050565b6000611eb7611eb284612b8c565b612b0f565b905082815260208101848484011115611ed357611ed2612eff565b5b611ede848285612d29565b509392505050565b6000611ef9611ef484612bbd565b612b0f565b905082815260208101848484011115611f1557611f14612eff565b5b611f20848285612d29565b509392505050565b600081359050611f37816133ee565b92915050565b600082601f830112611f5257611f51612ef5565b5b8135611f62848260208601611dc4565b91505092915050565b600082601f830112611f8057611f7f612ef5565b5b8135611f90848260208601611e34565b91505092915050565b600081359050611fa881613405565b92915050565b600081359050611fbd8161341c565b92915050565b600081519050611fd28161341c565b92915050565b600082601f830112611fed57611fec612ef5565b5b8135611ffd848260208601611ea4565b91505092915050565b600082601f83011261201b5761201a612ef5565b5b813561202b848260208601611ee6565b91505092915050565b60008135905061204381613433565b92915050565b60006020828403121561205f5761205e612f09565b5b600061206d84828501611f28565b91505092915050565b6000806040838503121561208d5761208c612f09565b5b600061209b85828601611f28565b92505060206120ac85828601611f28565b9150509250929050565b600080600080600060a086880312156120d2576120d1612f09565b5b60006120e088828901611f28565b95505060206120f188828901611f28565b945050604086013567ffffffffffffffff81111561211257612111612f04565b5b61211e88828901611f6b565b935050606086013567ffffffffffffffff81111561213f5761213e612f04565b5b61214b88828901611f6b565b925050608086013567ffffffffffffffff81111561216c5761216b612f04565b5b61217888828901611fd8565b9150509295509295909350565b600080600080600060a086880312156121a1576121a0612f09565b5b60006121af88828901611f28565b95505060206121c088828901611f28565b94505060406121d188828901612034565b93505060606121e288828901612034565b925050608086013567ffffffffffffffff81111561220357612202612f04565b5b61220f88828901611fd8565b9150509295509295909350565b6000806040838503121561223357612232612f09565b5b600061224185828601611f28565b925050602061225285828601611f99565b9150509250929050565b6000806040838503121561227357612272612f09565b5b600061228185828601611f28565b925050602061229285828601612034565b9150509250929050565b6000806000606084860312156122b5576122b4612f09565b5b60006122c386828701611f28565b93505060206122d486828701612034565b92505060406122e586828701612034565b9150509250925092565b6000806040838503121561230657612305612f09565b5b600083013567ffffffffffffffff81111561232457612323612f04565b5b61233085828601611f3d565b925050602083013567ffffffffffffffff81111561235157612350612f04565b5b61235d85828601611f6b565b9150509250929050565b60006020828403121561237d5761237c612f09565b5b600061238b84828501611fae565b91505092915050565b6000602082840312156123aa576123a9612f09565b5b60006123b884828501611fc3565b91505092915050565b6000602082840312156123d7576123d6612f09565b5b60006123e584828501612034565b91505092915050565b6000806040838503121561240557612404612f09565b5b600061241385828601612034565b925050602083013567ffffffffffffffff81111561243457612433612f04565b5b61244085828601612006565b9150509250929050565b6000806040838503121561246157612460612f09565b5b600061246f85828601612034565b925050602061248085828601612034565b9150509250929050565b6000612496838361277a565b60208301905092915050565b6124ab81612cb5565b82525050565b60006124bc82612bfe565b6124c68185612c2c565b93506124d183612bee565b8060005b838110156125025781516124e9888261248a565b97506124f483612c1f565b9250506001810190506124d5565b5085935050505092915050565b61251881612cc7565b82525050565b600061252982612c09565b6125338185612c3d565b9350612543818560208601612d38565b61254c81612f0e565b840191505092915050565b600061256282612c14565b61256c8185612c4e565b935061257c818560208601612d38565b61258581612f0e565b840191505092915050565b600061259d602883612c4e565b91506125a882612f2c565b604082019050919050565b60006125c0602683612c4e565b91506125cb82612f7b565b604082019050919050565b60006125e3602483612c4e565b91506125ee82612fca565b604082019050919050565b6000612606602a83612c4e565b915061261182613019565b604082019050919050565b6000612629602e83612c4e565b915061263482613068565b604082019050919050565b600061264c602583612c4e565b9150612657826130b7565b604082019050919050565b600061266f602383612c4e565b915061267a82613106565b604082019050919050565b6000612692602a83612c4e565b915061269d82613155565b604082019050919050565b60006126b5602083612c4e565b91506126c0826131a4565b602082019050919050565b60006126d8602983612c4e565b91506126e3826131cd565b604082019050919050565b60006126fb602983612c4e565b91506127068261321c565b604082019050919050565b600061271e602883612c4e565b91506127298261326b565b604082019050919050565b6000612741602183612c4e565b915061274c826132ba565b604082019050919050565b6000612764603483612c4e565b915061276f82613309565b604082019050919050565b61278381612d1f565b82525050565b61279281612d1f565b82525050565b60006020820190506127ad60008301846124a2565b92915050565b600060a0820190506127c860008301886124a2565b6127d560208301876124a2565b81810360408301526127e781866124b1565b905081810360608301526127fb81856124b1565b9050818103608083015261280f818461251e565b90509695505050505050565b600060a08201905061283060008301886124a2565b61283d60208301876124a2565b61284a6040830186612789565b6128576060830185612789565b8181036080830152612869818461251e565b90509695505050505050565b6000602082019050818103600083015261288f81846124b1565b905092915050565b600060408201905081810360008301526128b181856124b1565b905081810360208301526128c581846124b1565b90509392505050565b60006020820190506128e3600083018461250f565b92915050565b600060208201905081810360008301526129038184612557565b905092915050565b6000602082019050818103600083015261292481612590565b9050919050565b60006020820190508181036000830152612944816125b3565b9050919050565b60006020820190508181036000830152612964816125d6565b9050919050565b60006020820190508181036000830152612984816125f9565b9050919050565b600060208201905081810360008301526129a48161261c565b9050919050565b600060208201905081810360008301526129c48161263f565b9050919050565b600060208201905081810360008301526129e481612662565b9050919050565b60006020820190508181036000830152612a0481612685565b9050919050565b60006020820190508181036000830152612a24816126a8565b9050919050565b60006020820190508181036000830152612a44816126cb565b9050919050565b60006020820190508181036000830152612a64816126ee565b9050919050565b60006020820190508181036000830152612a8481612711565b9050919050565b60006020820190508181036000830152612aa481612734565b9050919050565b60006020820190508181036000830152612ac481612757565b9050919050565b6000602082019050612ae06000830184612789565b92915050565b6000604082019050612afb6000830185612789565b612b086020830184612789565b9392505050565b6000612b19612b2a565b9050612b258282612d9d565b919050565b6000604051905090565b600067ffffffffffffffff821115612b4f57612b4e612ea4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b7b57612b7a612ea4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612ba757612ba6612ea4565b5b612bb082612f0e565b9050602081019050919050565b600067ffffffffffffffff821115612bd857612bd7612ea4565b5b612be182612f0e565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612c6a82612d1f565b9150612c7583612d1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612caa57612ca9612e17565b5b828201905092915050565b6000612cc082612cff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612d56578082015181840152602081019050612d3b565b83811115612d65576000848401525b50505050565b60006002820490506001821680612d8357607f821691505b60208210811415612d9757612d96612e46565b5b50919050565b612da682612f0e565b810181811067ffffffffffffffff82111715612dc557612dc4612ea4565b5b80604052505050565b6000612dd982612d1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e0c57612e0b612e17565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612ef25760046000803e612eef600051612f1f565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600060443d1015613368576133eb565b613370612b2a565b60043d036004823e80513d602482011167ffffffffffffffff821117156133985750506133eb565b808201805167ffffffffffffffff8111156133b657505050506133eb565b80602083010160043d0385018111156133d35750505050506133eb565b6133e282602001850186612d9d565b82955050505050505b90565b6133f781612cb5565b811461340257600080fd5b50565b61340e81612cc7565b811461341957600080fd5b50565b61342581612cd3565b811461343057600080fd5b50565b61343c81612d1f565b811461344757600080fd5b5056fea264697066735822122025f55ef07bf173f0a1a031872c253f645e63a4ecc17f6b3350434774f1677c2764736f6c63430008070033

Deployed Bytecode Sourcemap

41123:691:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25547:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24570:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41178:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41708:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41364:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27490:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25943:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3453:103;;;:::i;:::-;;41578:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2805:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41201:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26540:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41481:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41228:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26767:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27007:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3711:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25547:230;25633:7;25680:1;25661:21;;:7;:21;;;;25653:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25747:9;:13;25757:2;25747:13;;;;;;;;;;;:22;25761:7;25747:22;;;;;;;;;;;;;;;;25740:29;;25547:230;;;;:::o;24570:310::-;24672:4;24724:26;24709:41;;;:11;:41;;;;:110;;;;24782:37;24767:52;;;:11;:52;;;;24709:110;:163;;;;24836:36;24860:11;24836:23;:36::i;:::-;24709:163;24689:183;;24570:310;;;:::o;41178:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41708:101::-;41761:13;41790:8;:13;41799:3;41790:13;;;;;;;;;;;41783:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41708:101;;;:::o;41364:111::-;2691:13;:11;:13::i;:::-;41441:28:::1;41447:3;41452;41457:7;41441:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;41364:111:::0;;;:::o;27490:438::-;27731:12;:10;:12::i;:::-;27723:20;;:4;:20;;;:60;;;;27747:36;27764:4;27770:12;:10;:12::i;:::-;27747:16;:36::i;:::-;27723:60;27701:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;27868:52;27891:4;27897:2;27901:3;27906:7;27915:4;27868:22;:52::i;:::-;27490:438;;;;;:::o;25943:524::-;26099:16;26160:3;:10;26141:8;:15;:29;26133:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26229:30;26276:8;:15;26262:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26229:63;;26310:9;26305:122;26329:8;:15;26325:1;:19;26305:122;;;26385:30;26395:8;26404:1;26395:11;;;;;;;;:::i;:::-;;;;;;;;26408:3;26412:1;26408:6;;;;;;;;:::i;:::-;;;;;;;;26385:9;:30::i;:::-;26366:13;26380:1;26366:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26346:3;;;;:::i;:::-;;;26305:122;;;;26446:13;26439:20;;;25943:524;;;;:::o;3453:103::-;2691:13;:11;:13::i;:::-;3518:30:::1;3545:1;3518:18;:30::i;:::-;3453:103::o:0;41578:124::-;2691:13;:11;:13::i;:::-;41666:4:::1;41650:8;:13;41659:3;41650:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;41692:3;41682:14;41686:4;41682:14;;;;;;:::i;:::-;;;;;;;;41578:124:::0;;:::o;2805:87::-;2851:7;2878:6;;;;;;;;;;;2871:13;;2805:87;:::o;41201:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26540:155::-;26635:52;26654:12;:10;:12::i;:::-;26668:8;26678;26635:18;:52::i;:::-;26540:155;;:::o;41481:91::-;41535:31;41541:10;41553:3;41558:7;41535:5;:31::i;:::-;41481:91;;:::o;41228:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26767:168::-;26866:4;26890:18;:27;26909:7;26890:27;;;;;;;;;;;;;;;:37;26918:8;26890:37;;;;;;;;;;;;;;;;;;;;;;;;;26883:44;;26767:168;;;;:::o;27007:406::-;27223:12;:10;:12::i;:::-;27215:20;;:4;:20;;;:60;;;;27239:36;27256:4;27262:12;:10;:12::i;:::-;27239:16;:36::i;:::-;27215:60;27193:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;27360:45;27378:4;27384:2;27388;27392:6;27400:4;27360:17;:45::i;:::-;27007:406;;;;;:::o;3711:201::-;2691:13;:11;:13::i;:::-;3820:1:::1;3800:22;;:8;:22;;;;3792:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3876:28;3895:8;3876:18;:28::i;:::-;3711:201:::0;:::o;15639:157::-;15724:4;15763:25;15748:40;;;:11;:40;;;;15741:47;;15639:157;;;:::o;2970:132::-;3045:12;:10;:12::i;:::-;3034:23;;:7;:5;:7::i;:::-;:23;;;3026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2970:132::o;32188:729::-;32355:1;32341:16;;:2;:16;;;;32333:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32408:16;32427:12;:10;:12::i;:::-;32408:31;;32450:20;32473:21;32491:2;32473:17;:21::i;:::-;32450:44;;32505:24;32532:25;32550:6;32532:17;:25::i;:::-;32505:52;;32570:66;32591:8;32609:1;32613:2;32617:3;32622:7;32631:4;32570:20;:66::i;:::-;32670:6;32649:9;:13;32659:2;32649:13;;;;;;;;;;;:17;32663:2;32649:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32729:2;32692:52;;32725:1;32692:52;;32707:8;32692:52;;;32733:2;32737:6;32692:52;;;;;;;:::i;:::-;;;;;;;;32757:65;32777:8;32795:1;32799:2;32803:3;32808:7;32817:4;32757:19;:65::i;:::-;32835:74;32866:8;32884:1;32888:2;32892;32896:6;32904:4;32835:30;:74::i;:::-;32322:595;;;32188:729;;;;:::o;1303:98::-;1356:7;1383:10;1376:17;;1303:98;:::o;29724:1146::-;29951:7;:14;29937:3;:10;:28;29929:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30043:1;30029:16;;:2;:16;;;;30021:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30100:16;30119:12;:10;:12::i;:::-;30100:31;;30144:60;30165:8;30175:4;30181:2;30185:3;30190:7;30199:4;30144:20;:60::i;:::-;30222:9;30217:421;30241:3;:10;30237:1;:14;30217:421;;;30273:10;30286:3;30290:1;30286:6;;;;;;;;:::i;:::-;;;;;;;;30273:19;;30307:14;30324:7;30332:1;30324:10;;;;;;;;:::i;:::-;;;;;;;;30307:27;;30351:19;30373:9;:13;30383:2;30373:13;;;;;;;;;;;:19;30387:4;30373:19;;;;;;;;;;;;;;;;30351:41;;30430:6;30415:11;:21;;30407:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30563:6;30549:11;:20;30527:9;:13;30537:2;30527:13;;;;;;;;;;;:19;30541:4;30527:19;;;;;;;;;;;;;;;:42;;;;30620:6;30599:9;:13;30609:2;30599:13;;;;;;;;;;;:17;30613:2;30599:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30258:380;;;30253:3;;;;:::i;:::-;;;30217:421;;;;30685:2;30655:47;;30679:4;30655:47;;30669:8;30655:47;;;30689:3;30694:7;30655:47;;;;;;;:::i;:::-;;;;;;;;30715:59;30735:8;30745:4;30751:2;30755:3;30760:7;30769:4;30715:19;:59::i;:::-;30787:75;30823:8;30833:4;30839:2;30843:3;30848:7;30857:4;30787:35;:75::i;:::-;29918:952;29724:1146;;;;;:::o;4072:191::-;4146:16;4165:6;;;;;;;;;;;4146:25;;4191:8;4182:6;;:17;;;;;;;;;;;;;;;;;;4246:8;4215:40;;4236:8;4215:40;;;;;;;;;;;;4135:128;4072:191;:::o;36601:331::-;36756:8;36747:17;;:5;:17;;;;36739:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36859:8;36821:18;:25;36840:5;36821:25;;;;;;;;;;;;;;;:35;36847:8;36821:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36905:8;36883:41;;36898:5;36883:41;;;36915:8;36883:41;;;;;;:::i;:::-;;;;;;;;36601:331;;;:::o;34431:808::-;34574:1;34558:18;;:4;:18;;;;34550:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34629:16;34648:12;:10;:12::i;:::-;34629:31;;34671:20;34694:21;34712:2;34694:17;:21::i;:::-;34671:44;;34726:24;34753:25;34771:6;34753:17;:25::i;:::-;34726:52;;34791:66;34812:8;34822:4;34836:1;34840:3;34845:7;34791:66;;;;;;;;;;;;:20;:66::i;:::-;34870:19;34892:9;:13;34902:2;34892:13;;;;;;;;;;;:19;34906:4;34892:19;;;;;;;;;;;;;;;;34870:41;;34945:6;34930:11;:21;;34922:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35064:6;35050:11;:20;35028:9;:13;35038:2;35028:13;;;;;;;;;;;:19;35042:4;35028:19;;;;;;;;;;;;;;;:42;;;;35138:1;35099:54;;35124:4;35099:54;;35114:8;35099:54;;;35142:2;35146:6;35099:54;;;;;;;:::i;:::-;;;;;;;;35166:65;35186:8;35196:4;35210:1;35214:3;35219:7;35166:65;;;;;;;;;;;;:19;:65::i;:::-;34539:700;;;;34431:808;;;:::o;28392:974::-;28594:1;28580:16;;:2;:16;;;;28572:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28651:16;28670:12;:10;:12::i;:::-;28651:31;;28693:20;28716:21;28734:2;28716:17;:21::i;:::-;28693:44;;28748:24;28775:25;28793:6;28775:17;:25::i;:::-;28748:52;;28813:60;28834:8;28844:4;28850:2;28854:3;28859:7;28868:4;28813:20;:60::i;:::-;28886:19;28908:9;:13;28918:2;28908:13;;;;;;;;;;;:19;28922:4;28908:19;;;;;;;;;;;;;;;;28886:41;;28961:6;28946:11;:21;;28938:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29086:6;29072:11;:20;29050:9;:13;29060:2;29050:13;;;;;;;;;;;:19;29064:4;29050:19;;;;;;;;;;;;;;;:42;;;;29135:6;29114:9;:13;29124:2;29114:13;;;;;;;;;;;:17;29128:2;29114:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29190:2;29159:46;;29184:4;29159:46;;29174:8;29159:46;;;29194:2;29198:6;29159:46;;;;;;;:::i;:::-;;;;;;;;29218:59;29238:8;29248:4;29254:2;29258:3;29263:7;29272:4;29218:19;:59::i;:::-;29290:68;29321:8;29331:4;29337:2;29341;29345:6;29353:4;29290:30;:68::i;:::-;28561:805;;;;28392:974;;;;;:::o;40867:198::-;40933:16;40962:22;41001:1;40987:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40962:41;;41025:7;41014:5;41020:1;41014:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;41052:5;41045:12;;;40867:198;;;:::o;37890:221::-;;;;;;;:::o;39066:220::-;;;;;;;:::o;39294:744::-;39509:15;:2;:13;;;:15::i;:::-;39505:526;;;39562:2;39545:38;;;39584:8;39594:4;39600:2;39604:6;39612:4;39545:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39541:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39893:6;39886:14;;;;;;;;;;;:::i;:::-;;;;;;;;39541:479;;;39942:62;;;;;;;;;;:::i;:::-;;;;;;;;39541:479;39679:43;;;39667:55;;;:8;:55;;;;39663:154;;39747:50;;;;;;;;;;:::i;:::-;;;;;;;;39663:154;39618:214;39505:526;39294:744;;;;;;:::o;40046:813::-;40286:15;:2;:13;;;:15::i;:::-;40282:570;;;40339:2;40322:43;;;40366:8;40376:4;40382:3;40387:7;40396:4;40322:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40318:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40714:6;40707:14;;;;;;;;;;;:::i;:::-;;;;;;;;40318:523;;;40763:62;;;;;;;;;;:::i;:::-;;;;;;;;40318:523;40495:48;;;40483:60;;;:8;:60;;;;40479:159;;40568:50;;;;;;;;;;:::i;:::-;;;;;;;;40479:159;40402:251;40282:570;40046:813;;;;;;:::o;5556:326::-;5616:4;5873:1;5851:7;:19;;;:23;5844:30;;5556:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:619::-;9009:6;9017;9025;9074:2;9062:9;9053:7;9049:23;9045:32;9042:119;;;9080:79;;:::i;:::-;9042:119;9200:1;9225:53;9270:7;9261:6;9250:9;9246:22;9225:53;:::i;:::-;9215:63;;9171:117;9327:2;9353:53;9398:7;9389:6;9378:9;9374:22;9353:53;:::i;:::-;9343:63;;9298:118;9455:2;9481:53;9526:7;9517:6;9506:9;9502:22;9481:53;:::i;:::-;9471:63;;9426:118;8932:619;;;;;:::o;9557:894::-;9675:6;9683;9732:2;9720:9;9711:7;9707:23;9703:32;9700:119;;;9738:79;;:::i;:::-;9700:119;9886:1;9875:9;9871:17;9858:31;9916:18;9908:6;9905:30;9902:117;;;9938:79;;:::i;:::-;9902:117;10043:78;10113:7;10104:6;10093:9;10089:22;10043:78;:::i;:::-;10033:88;;9829:302;10198:2;10187:9;10183:18;10170:32;10229:18;10221:6;10218:30;10215:117;;;10251:79;;:::i;:::-;10215:117;10356:78;10426:7;10417:6;10406:9;10402:22;10356:78;:::i;:::-;10346:88;;10141:303;9557:894;;;;;:::o;10457:327::-;10515:6;10564:2;10552:9;10543:7;10539:23;10535:32;10532:119;;;10570:79;;:::i;:::-;10532:119;10690:1;10715:52;10759:7;10750:6;10739:9;10735:22;10715:52;:::i;:::-;10705:62;;10661:116;10457:327;;;;:::o;10790:349::-;10859:6;10908:2;10896:9;10887:7;10883:23;10879:32;10876:119;;;10914:79;;:::i;:::-;10876:119;11034:1;11059:63;11114:7;11105:6;11094:9;11090:22;11059:63;:::i;:::-;11049:73;;11005:127;10790:349;;;;:::o;11145:329::-;11204:6;11253:2;11241:9;11232:7;11228:23;11224:32;11221:119;;;11259:79;;:::i;:::-;11221:119;11379:1;11404:53;11449:7;11440:6;11429:9;11425:22;11404:53;:::i;:::-;11394:63;;11350:117;11145:329;;;;:::o;11480:654::-;11558:6;11566;11615:2;11603:9;11594:7;11590:23;11586:32;11583:119;;;11621:79;;:::i;:::-;11583:119;11741:1;11766:53;11811:7;11802:6;11791:9;11787:22;11766:53;:::i;:::-;11756:63;;11712:117;11896:2;11885:9;11881:18;11868:32;11927:18;11919:6;11916:30;11913:117;;;11949:79;;:::i;:::-;11913:117;12054:63;12109:7;12100:6;12089:9;12085:22;12054:63;:::i;:::-;12044:73;;11839:288;11480:654;;;;;:::o;12140:474::-;12208:6;12216;12265:2;12253:9;12244:7;12240:23;12236:32;12233:119;;;12271:79;;:::i;:::-;12233:119;12391:1;12416:53;12461:7;12452:6;12441:9;12437:22;12416:53;:::i;:::-;12406:63;;12362:117;12518:2;12544:53;12589:7;12580:6;12569:9;12565:22;12544:53;:::i;:::-;12534:63;;12489:118;12140:474;;;;;:::o;12620:179::-;12689:10;12710:46;12752:3;12744:6;12710:46;:::i;:::-;12788:4;12783:3;12779:14;12765:28;;12620:179;;;;:::o;12805:118::-;12892:24;12910:5;12892:24;:::i;:::-;12887:3;12880:37;12805:118;;:::o;12959:732::-;13078:3;13107:54;13155:5;13107:54;:::i;:::-;13177:86;13256:6;13251:3;13177:86;:::i;:::-;13170:93;;13287:56;13337:5;13287:56;:::i;:::-;13366:7;13397:1;13382:284;13407:6;13404:1;13401:13;13382:284;;;13483:6;13477:13;13510:63;13569:3;13554:13;13510:63;:::i;:::-;13503:70;;13596:60;13649:6;13596:60;:::i;:::-;13586:70;;13442:224;13429:1;13426;13422:9;13417:14;;13382:284;;;13386:14;13682:3;13675:10;;13083:608;;;12959:732;;;;:::o;13697:109::-;13778:21;13793:5;13778:21;:::i;:::-;13773:3;13766:34;13697:109;;:::o;13812:360::-;13898:3;13926:38;13958:5;13926:38;:::i;:::-;13980:70;14043:6;14038:3;13980:70;:::i;:::-;13973:77;;14059:52;14104:6;14099:3;14092:4;14085:5;14081:16;14059:52;:::i;:::-;14136:29;14158:6;14136:29;:::i;:::-;14131:3;14127:39;14120:46;;13902:270;13812:360;;;;:::o;14178:364::-;14266:3;14294:39;14327:5;14294:39;:::i;:::-;14349:71;14413:6;14408:3;14349:71;:::i;:::-;14342:78;;14429:52;14474:6;14469:3;14462:4;14455:5;14451:16;14429:52;:::i;:::-;14506:29;14528:6;14506:29;:::i;:::-;14501:3;14497:39;14490:46;;14270:272;14178:364;;;;:::o;14548:366::-;14690:3;14711:67;14775:2;14770:3;14711:67;:::i;:::-;14704:74;;14787:93;14876:3;14787:93;:::i;:::-;14905:2;14900:3;14896:12;14889:19;;14548:366;;;:::o;14920:::-;15062:3;15083:67;15147:2;15142:3;15083:67;:::i;:::-;15076:74;;15159:93;15248:3;15159:93;:::i;:::-;15277:2;15272:3;15268:12;15261:19;;14920:366;;;:::o;15292:::-;15434:3;15455:67;15519:2;15514:3;15455:67;:::i;:::-;15448:74;;15531:93;15620:3;15531:93;:::i;:::-;15649:2;15644:3;15640:12;15633:19;;15292:366;;;:::o;15664:::-;15806:3;15827:67;15891:2;15886:3;15827:67;:::i;:::-;15820:74;;15903:93;15992:3;15903:93;:::i;:::-;16021:2;16016:3;16012:12;16005:19;;15664:366;;;:::o;16036:::-;16178:3;16199:67;16263:2;16258:3;16199:67;:::i;:::-;16192:74;;16275:93;16364:3;16275:93;:::i;:::-;16393:2;16388:3;16384:12;16377:19;;16036:366;;;:::o;16408:::-;16550:3;16571:67;16635:2;16630:3;16571:67;:::i;:::-;16564:74;;16647:93;16736:3;16647:93;:::i;:::-;16765:2;16760:3;16756:12;16749:19;;16408:366;;;:::o;16780:::-;16922:3;16943:67;17007:2;17002:3;16943:67;:::i;:::-;16936:74;;17019:93;17108:3;17019:93;:::i;:::-;17137:2;17132:3;17128:12;17121:19;;16780:366;;;:::o;17152:::-;17294:3;17315:67;17379:2;17374:3;17315:67;:::i;:::-;17308:74;;17391:93;17480:3;17391:93;:::i;:::-;17509:2;17504:3;17500:12;17493:19;;17152:366;;;:::o;17524:::-;17666:3;17687:67;17751:2;17746:3;17687:67;:::i;:::-;17680:74;;17763:93;17852:3;17763:93;:::i;:::-;17881:2;17876:3;17872:12;17865:19;;17524:366;;;:::o;17896:::-;18038:3;18059:67;18123:2;18118:3;18059:67;:::i;:::-;18052:74;;18135:93;18224:3;18135:93;:::i;:::-;18253:2;18248:3;18244:12;18237:19;;17896:366;;;:::o;18268:::-;18410:3;18431:67;18495:2;18490:3;18431:67;:::i;:::-;18424:74;;18507:93;18596:3;18507:93;:::i;:::-;18625:2;18620:3;18616:12;18609:19;;18268:366;;;:::o;18640:::-;18782:3;18803:67;18867:2;18862:3;18803:67;:::i;:::-;18796:74;;18879:93;18968:3;18879:93;:::i;:::-;18997:2;18992:3;18988:12;18981:19;;18640:366;;;:::o;19012:::-;19154:3;19175:67;19239:2;19234:3;19175:67;:::i;:::-;19168:74;;19251:93;19340:3;19251:93;:::i;:::-;19369:2;19364:3;19360:12;19353:19;;19012:366;;;:::o;19384:::-;19526:3;19547:67;19611:2;19606:3;19547:67;:::i;:::-;19540:74;;19623:93;19712:3;19623:93;:::i;:::-;19741:2;19736:3;19732:12;19725:19;;19384:366;;;:::o;19756:108::-;19833:24;19851:5;19833:24;:::i;:::-;19828:3;19821:37;19756:108;;:::o;19870:118::-;19957:24;19975:5;19957:24;:::i;:::-;19952:3;19945:37;19870:118;;:::o;19994:222::-;20087:4;20125:2;20114:9;20110:18;20102:26;;20138:71;20206:1;20195:9;20191:17;20182:6;20138:71;:::i;:::-;19994:222;;;;:::o;20222:1053::-;20545:4;20583:3;20572:9;20568:19;20560:27;;20597:71;20665:1;20654:9;20650:17;20641:6;20597:71;:::i;:::-;20678:72;20746:2;20735:9;20731:18;20722:6;20678:72;:::i;:::-;20797:9;20791:4;20787:20;20782:2;20771:9;20767:18;20760:48;20825:108;20928:4;20919:6;20825:108;:::i;:::-;20817:116;;20980:9;20974:4;20970:20;20965:2;20954:9;20950:18;20943:48;21008:108;21111:4;21102:6;21008:108;:::i;:::-;21000:116;;21164:9;21158:4;21154:20;21148:3;21137:9;21133:19;21126:49;21192:76;21263:4;21254:6;21192:76;:::i;:::-;21184:84;;20222:1053;;;;;;;;:::o;21281:751::-;21504:4;21542:3;21531:9;21527:19;21519:27;;21556:71;21624:1;21613:9;21609:17;21600:6;21556:71;:::i;:::-;21637:72;21705:2;21694:9;21690:18;21681:6;21637:72;:::i;:::-;21719;21787:2;21776:9;21772:18;21763:6;21719:72;:::i;:::-;21801;21869:2;21858:9;21854:18;21845:6;21801:72;:::i;:::-;21921:9;21915:4;21911:20;21905:3;21894:9;21890:19;21883:49;21949:76;22020:4;22011:6;21949:76;:::i;:::-;21941:84;;21281:751;;;;;;;;:::o;22038:373::-;22181:4;22219:2;22208:9;22204:18;22196:26;;22268:9;22262:4;22258:20;22254:1;22243:9;22239:17;22232:47;22296:108;22399:4;22390:6;22296:108;:::i;:::-;22288:116;;22038:373;;;;:::o;22417:634::-;22638:4;22676:2;22665:9;22661:18;22653:26;;22725:9;22719:4;22715:20;22711:1;22700:9;22696:17;22689:47;22753:108;22856:4;22847:6;22753:108;:::i;:::-;22745:116;;22908:9;22902:4;22898:20;22893:2;22882:9;22878:18;22871:48;22936:108;23039:4;23030:6;22936:108;:::i;:::-;22928:116;;22417:634;;;;;:::o;23057:210::-;23144:4;23182:2;23171:9;23167:18;23159:26;;23195:65;23257:1;23246:9;23242:17;23233:6;23195:65;:::i;:::-;23057:210;;;;:::o;23273:313::-;23386:4;23424:2;23413:9;23409:18;23401:26;;23473:9;23467:4;23463:20;23459:1;23448:9;23444:17;23437:47;23501:78;23574:4;23565:6;23501:78;:::i;:::-;23493:86;;23273:313;;;;:::o;23592:419::-;23758:4;23796:2;23785:9;23781:18;23773:26;;23845:9;23839:4;23835:20;23831:1;23820:9;23816:17;23809:47;23873:131;23999:4;23873:131;:::i;:::-;23865:139;;23592:419;;;:::o;24017:::-;24183:4;24221:2;24210:9;24206:18;24198:26;;24270:9;24264:4;24260:20;24256:1;24245:9;24241:17;24234:47;24298:131;24424:4;24298:131;:::i;:::-;24290:139;;24017:419;;;:::o;24442:::-;24608:4;24646:2;24635:9;24631:18;24623:26;;24695:9;24689:4;24685:20;24681:1;24670:9;24666:17;24659:47;24723:131;24849:4;24723:131;:::i;:::-;24715:139;;24442:419;;;:::o;24867:::-;25033:4;25071:2;25060:9;25056:18;25048:26;;25120:9;25114:4;25110:20;25106:1;25095:9;25091:17;25084:47;25148:131;25274:4;25148:131;:::i;:::-;25140:139;;24867:419;;;:::o;25292:::-;25458:4;25496:2;25485:9;25481:18;25473:26;;25545:9;25539:4;25535:20;25531:1;25520:9;25516:17;25509:47;25573:131;25699:4;25573:131;:::i;:::-;25565:139;;25292:419;;;:::o;25717:::-;25883:4;25921:2;25910:9;25906:18;25898:26;;25970:9;25964:4;25960:20;25956:1;25945:9;25941:17;25934:47;25998:131;26124:4;25998:131;:::i;:::-;25990:139;;25717:419;;;:::o;26142:::-;26308:4;26346:2;26335:9;26331:18;26323:26;;26395:9;26389:4;26385:20;26381:1;26370:9;26366:17;26359:47;26423:131;26549:4;26423:131;:::i;:::-;26415:139;;26142:419;;;:::o;26567:::-;26733:4;26771:2;26760:9;26756:18;26748:26;;26820:9;26814:4;26810:20;26806:1;26795:9;26791:17;26784:47;26848:131;26974:4;26848:131;:::i;:::-;26840:139;;26567:419;;;:::o;26992:::-;27158:4;27196:2;27185:9;27181:18;27173:26;;27245:9;27239:4;27235:20;27231:1;27220:9;27216:17;27209:47;27273:131;27399:4;27273:131;:::i;:::-;27265:139;;26992:419;;;:::o;27417:::-;27583:4;27621:2;27610:9;27606:18;27598:26;;27670:9;27664:4;27660:20;27656:1;27645:9;27641:17;27634:47;27698:131;27824:4;27698:131;:::i;:::-;27690:139;;27417:419;;;:::o;27842:::-;28008:4;28046:2;28035:9;28031:18;28023:26;;28095:9;28089:4;28085:20;28081:1;28070:9;28066:17;28059:47;28123:131;28249:4;28123:131;:::i;:::-;28115:139;;27842:419;;;:::o;28267:::-;28433:4;28471:2;28460:9;28456:18;28448:26;;28520:9;28514:4;28510:20;28506:1;28495:9;28491:17;28484:47;28548:131;28674:4;28548:131;:::i;:::-;28540:139;;28267:419;;;:::o;28692:::-;28858:4;28896:2;28885:9;28881:18;28873:26;;28945:9;28939:4;28935:20;28931:1;28920:9;28916:17;28909:47;28973:131;29099:4;28973:131;:::i;:::-;28965:139;;28692:419;;;:::o;29117:::-;29283:4;29321:2;29310:9;29306:18;29298:26;;29370:9;29364:4;29360:20;29356:1;29345:9;29341:17;29334:47;29398:131;29524:4;29398:131;:::i;:::-;29390:139;;29117:419;;;:::o;29542:222::-;29635:4;29673:2;29662:9;29658:18;29650:26;;29686:71;29754:1;29743:9;29739:17;29730:6;29686:71;:::i;:::-;29542:222;;;;:::o;29770:332::-;29891:4;29929:2;29918:9;29914:18;29906:26;;29942:71;30010:1;29999:9;29995:17;29986:6;29942:71;:::i;:::-;30023:72;30091:2;30080:9;30076:18;30067:6;30023:72;:::i;:::-;29770:332;;;;;:::o;30108:129::-;30142:6;30169:20;;:::i;:::-;30159:30;;30198:33;30226:4;30218:6;30198:33;:::i;:::-;30108:129;;;:::o;30243:75::-;30276:6;30309:2;30303:9;30293:19;;30243:75;:::o;30324:311::-;30401:4;30491:18;30483:6;30480:30;30477:56;;;30513:18;;:::i;:::-;30477:56;30563:4;30555:6;30551:17;30543:25;;30623:4;30617;30613:15;30605:23;;30324:311;;;:::o;30641:::-;30718:4;30808:18;30800:6;30797:30;30794:56;;;30830:18;;:::i;:::-;30794:56;30880:4;30872:6;30868:17;30860:25;;30940:4;30934;30930:15;30922:23;;30641:311;;;:::o;30958:307::-;31019:4;31109:18;31101:6;31098:30;31095:56;;;31131:18;;:::i;:::-;31095:56;31169:29;31191:6;31169:29;:::i;:::-;31161:37;;31253:4;31247;31243:15;31235:23;;30958:307;;;:::o;31271:308::-;31333:4;31423:18;31415:6;31412:30;31409:56;;;31445:18;;:::i;:::-;31409:56;31483:29;31505:6;31483:29;:::i;:::-;31475:37;;31567:4;31561;31557:15;31549:23;;31271:308;;;:::o;31585:132::-;31652:4;31675:3;31667:11;;31705:4;31700:3;31696:14;31688:22;;31585:132;;;:::o;31723:114::-;31790:6;31824:5;31818:12;31808:22;;31723:114;;;:::o;31843:98::-;31894:6;31928:5;31922:12;31912:22;;31843:98;;;:::o;31947:99::-;31999:6;32033:5;32027:12;32017:22;;31947:99;;;:::o;32052:113::-;32122:4;32154;32149:3;32145:14;32137:22;;32052:113;;;:::o;32171:184::-;32270:11;32304:6;32299:3;32292:19;32344:4;32339:3;32335:14;32320:29;;32171:184;;;;:::o;32361:168::-;32444:11;32478:6;32473:3;32466:19;32518:4;32513:3;32509:14;32494:29;;32361:168;;;;:::o;32535:169::-;32619:11;32653:6;32648:3;32641:19;32693:4;32688:3;32684:14;32669:29;;32535:169;;;;:::o;32710:305::-;32750:3;32769:20;32787:1;32769:20;:::i;:::-;32764:25;;32803:20;32821:1;32803:20;:::i;:::-;32798:25;;32957:1;32889:66;32885:74;32882:1;32879:81;32876:107;;;32963:18;;:::i;:::-;32876:107;33007:1;33004;33000:9;32993:16;;32710:305;;;;:::o;33021:96::-;33058:7;33087:24;33105:5;33087:24;:::i;:::-;33076:35;;33021:96;;;:::o;33123:90::-;33157:7;33200:5;33193:13;33186:21;33175:32;;33123:90;;;:::o;33219:149::-;33255:7;33295:66;33288:5;33284:78;33273:89;;33219:149;;;:::o;33374:126::-;33411:7;33451:42;33444:5;33440:54;33429:65;;33374:126;;;:::o;33506:77::-;33543:7;33572:5;33561:16;;33506:77;;;:::o;33589:154::-;33673:6;33668:3;33663;33650:30;33735:1;33726:6;33721:3;33717:16;33710:27;33589:154;;;:::o;33749:307::-;33817:1;33827:113;33841:6;33838:1;33835:13;33827:113;;;33926:1;33921:3;33917:11;33911:18;33907:1;33902:3;33898:11;33891:39;33863:2;33860:1;33856:10;33851:15;;33827:113;;;33958:6;33955:1;33952:13;33949:101;;;34038:1;34029:6;34024:3;34020:16;34013:27;33949:101;33798:258;33749:307;;;:::o;34062:320::-;34106:6;34143:1;34137:4;34133:12;34123:22;;34190:1;34184:4;34180:12;34211:18;34201:81;;34267:4;34259:6;34255:17;34245:27;;34201:81;34329:2;34321:6;34318:14;34298:18;34295:38;34292:84;;;34348:18;;:::i;:::-;34292:84;34113:269;34062:320;;;:::o;34388:281::-;34471:27;34493:4;34471:27;:::i;:::-;34463:6;34459:40;34601:6;34589:10;34586:22;34565:18;34553:10;34550:34;34547:62;34544:88;;;34612:18;;:::i;:::-;34544:88;34652:10;34648:2;34641:22;34431:238;34388:281;;:::o;34675:233::-;34714:3;34737:24;34755:5;34737:24;:::i;:::-;34728:33;;34783:66;34776:5;34773:77;34770:103;;;34853:18;;:::i;:::-;34770:103;34900:1;34893:5;34889:13;34882:20;;34675:233;;;:::o;34914:180::-;34962:77;34959:1;34952:88;35059:4;35056:1;35049:15;35083:4;35080:1;35073:15;35100:180;35148:77;35145:1;35138:88;35245:4;35242:1;35235:15;35269:4;35266:1;35259:15;35286:180;35334:77;35331:1;35324:88;35431:4;35428:1;35421:15;35455:4;35452:1;35445:15;35472:180;35520:77;35517:1;35510:88;35617:4;35614:1;35607:15;35641:4;35638:1;35631:15;35658:183;35693:3;35731:1;35713:16;35710:23;35707:128;;;35769:1;35766;35763;35748:23;35791:34;35822:1;35816:8;35791:34;:::i;:::-;35784:41;;35707:128;35658:183;:::o;35847:117::-;35956:1;35953;35946:12;35970:117;36079:1;36076;36069:12;36093:117;36202:1;36199;36192:12;36216:117;36325:1;36322;36315:12;36339:117;36448:1;36445;36438:12;36462:102;36503:6;36554:2;36550:7;36545:2;36538:5;36534:14;36530:28;36520:38;;36462:102;;;:::o;36570:106::-;36614:8;36663:5;36658:3;36654:15;36633:36;;36570:106;;;:::o;36682:227::-;36822:34;36818:1;36810:6;36806:14;36799:58;36891:10;36886:2;36878:6;36874:15;36867:35;36682:227;:::o;36915:225::-;37055:34;37051:1;37043:6;37039:14;37032:58;37124:8;37119:2;37111:6;37107:15;37100:33;36915:225;:::o;37146:223::-;37286:34;37282:1;37274:6;37270:14;37263:58;37355:6;37350:2;37342:6;37338:15;37331:31;37146:223;:::o;37375:229::-;37515:34;37511:1;37503:6;37499:14;37492:58;37584:12;37579:2;37571:6;37567:15;37560:37;37375:229;:::o;37610:233::-;37750:34;37746:1;37738:6;37734:14;37727:58;37819:16;37814:2;37806:6;37802:15;37795:41;37610:233;:::o;37849:224::-;37989:34;37985:1;37977:6;37973:14;37966:58;38058:7;38053:2;38045:6;38041:15;38034:32;37849:224;:::o;38079:222::-;38219:34;38215:1;38207:6;38203:14;38196:58;38288:5;38283:2;38275:6;38271:15;38264:30;38079:222;:::o;38307:229::-;38447:34;38443:1;38435:6;38431:14;38424:58;38516:12;38511:2;38503:6;38499:15;38492:37;38307:229;:::o;38542:182::-;38682:34;38678:1;38670:6;38666:14;38659:58;38542:182;:::o;38730:228::-;38870:34;38866:1;38858:6;38854:14;38847:58;38939:11;38934:2;38926:6;38922:15;38915:36;38730:228;:::o;38964:::-;39104:34;39100:1;39092:6;39088:14;39081:58;39173:11;39168:2;39160:6;39156:15;39149:36;38964:228;:::o;39198:227::-;39338:34;39334:1;39326:6;39322:14;39315:58;39407:10;39402:2;39394:6;39390:15;39383:35;39198:227;:::o;39431:220::-;39571:34;39567:1;39559:6;39555:14;39548:58;39640:3;39635:2;39627:6;39623:15;39616:28;39431:220;:::o;39657:239::-;39797:34;39793:1;39785:6;39781:14;39774:58;39866:22;39861:2;39853:6;39849:15;39842:47;39657:239;:::o;39902:711::-;39941:3;39979:4;39961:16;39958:26;39955:39;;;39987:5;;39955:39;40016:20;;:::i;:::-;40091:1;40073:16;40069:24;40066:1;40060:4;40045:49;40124:4;40118:11;40223:16;40216:4;40208:6;40204:17;40201:39;40168:18;40160:6;40157:30;40141:113;40138:146;;;40269:5;;;;40138:146;40315:6;40309:4;40305:17;40351:3;40345:10;40378:18;40370:6;40367:30;40364:43;;;40400:5;;;;;;40364:43;40448:6;40441:4;40436:3;40432:14;40428:27;40507:1;40489:16;40485:24;40479:4;40475:35;40470:3;40467:44;40464:57;;;40514:5;;;;;;;40464:57;40531;40579:6;40573:4;40569:17;40561:6;40557:30;40551:4;40531:57;:::i;:::-;40604:3;40597:10;;39945:668;;;;;39902:711;;:::o;40619:122::-;40692:24;40710:5;40692:24;:::i;:::-;40685:5;40682:35;40672:63;;40731:1;40728;40721:12;40672:63;40619:122;:::o;40747:116::-;40817:21;40832:5;40817:21;:::i;:::-;40810:5;40807:32;40797:60;;40853:1;40850;40843:12;40797:60;40747:116;:::o;40869:120::-;40941:23;40958:5;40941:23;:::i;:::-;40934:5;40931:34;40921:62;;40979:1;40976;40969:12;40921:62;40869:120;:::o;40995:122::-;41068:24;41086:5;41068:24;:::i;:::-;41061:5;41058:35;41048:63;;41107:1;41104;41097:12;41048:63;40995:122;:::o

Swarm Source

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