ERC-1155
Overview
Max Total Supply
96 IT v3
Holders
85
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
infoTokenV3
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-04 */ // File: base64.sol pragma solidity >=0.6.0; /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides functions for encoding/decoding base64 library Base64 { string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; bytes internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000" hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000" hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000" hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000"; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE_ENCODE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { // read 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // write 4 characters mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and( input, 0x3F)))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } function decode(string memory _data) internal pure returns (bytes memory) { bytes memory data = bytes(_data); if (data.length == 0) return new bytes(0); require(data.length % 4 == 0, "invalid base64 decoder input"); // load the table into memory bytes memory table = TABLE_DECODE; // every 4 characters represent 3 bytes uint256 decodedLen = (data.length / 4) * 3; // add some extra buffer at the end required for the writing bytes memory result = new bytes(decodedLen + 32); assembly { // padding with '=' let lastBytes := mload(add(data, mload(data))) if eq(and(lastBytes, 0xFF), 0x3d) { decodedLen := sub(decodedLen, 1) if eq(and(lastBytes, 0xFFFF), 0x3d3d) { decodedLen := sub(decodedLen, 1) } } // set the actual output length mstore(result, decodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 4 characters at a time for {} lt(dataPtr, endPtr) {} { // read 4 characters dataPtr := add(dataPtr, 4) let input := mload(dataPtr) // write 3 bytes let output := add( add( shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)), shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))), add( shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)), and(mload(add(tablePtr, and( input , 0xFF))), 0xFF) ) ) mstore(resultPtr, shl(232, output)) resultPtr := add(resultPtr, 3) } } return result; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason 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 { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (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: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (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. 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. 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: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (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 be 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: @openzeppelin/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: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (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: balance query for the zero address"); 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 owner nor 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: transfer caller is not owner nor 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(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), 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); _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); _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(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * 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(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); 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); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * 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); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {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 `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 _beforeTokenTransfer( 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: InformationTokenv3.sol pragma solidity ^0.8.7; contract infoTokenV3 is ERC1155, Ownable, ERC1155Receiver { string public name = "Information Token"; string public symbol = "IT v3"; uint _totalSupply; uint oldinfotokenv1; uint oldinfotokenv2; uint mintTimestamp; address Rarible; constructor(uint _mintTimestamp) ERC1155(uri(0)) { _totalSupply = 0; oldinfotokenv1 = 747508; oldinfotokenv2 = 752414; mintTimestamp = _mintTimestamp; Rarible = 0xd07dc4262BCDbf85190C01c996b4C06a461d2430; } function totalSupply() external view returns (uint256) { return _totalSupply; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, ERC1155Receiver) returns (bool) { return super.supportsInterface(interfaceId); } //Sets minting timestamp. Can only be called by the Treasury multisig after construction. function setMintTimestamp(uint _timestamp) external onlyOwner { mintTimestamp = _timestamp; } function onERC1155Received(address operator, address from, uint256 id, uint256 value, bytes calldata data) external override returns (bytes4) { if(tx.origin != owner()) { require(block.timestamp > mintTimestamp, "You're early! Minting starts later."); } require(msg.sender == Rarible, "The token being sent must be a Rarible Info Token."); require(id == oldinfotokenv1 || id == oldinfotokenv2, "The token being sent must be a v1 or v2 Info Token."); _totalSupply += value; require(_totalSupply <= 100, "There can only be 100 Info Token v3s."); _mint(from, 0, value, "0x"); return bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")); } function onERC1155BatchReceived(address operator, address from, uint256[] memory ids, uint256[] memory values, bytes calldata data) external override returns (bytes4) { if(tx.origin != owner()) { require(block.timestamp > mintTimestamp, "You're early! Minting starts later."); } require(msg.sender == Rarible, "The token being sent must be a Rarible Info Token."); for(uint i = 0; i < ids.length; i++) { require(ids[i] == oldinfotokenv1 || ids[i] == oldinfotokenv2, "The tokens being sent must be a v1 or v2 Info Token."); _totalSupply += values[i]; require(_totalSupply <= 100, "There can only be 100 Info Token v3s."); _mint(from, 0, values[i], "0x"); } return bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")); } function uri(uint id) public pure override returns (string memory output){ require(id == 0, "There is only one token id (0) for Info Token v3."); string memory image64 = Base64.encode(bytes('<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 250 250"><style>.base { fill: black; font-family: menlo; font-size: 14px; }</style><rect width="100%" height="100%" fill="white"/><text x="10" y="60" class="base">Information Token</text><text x="10" y="80" class="base">v3</text></svg>')); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Information Token", "description": "What is information worth to you?", "image": "data:image/svg+xml;base64,', image64, '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); } //Treasury multisig rescue function, in case the DAO decides to reuse old Info Tokens. Can potentially mint duds if supply limit is not yet reached, so be careful! //The original Info Tokens are otherwise unretrievable without this function if deposited into this contract. function treasuryRescue(uint[] memory _amounts, uint[] memory _versions) external onlyOwner { for(uint i = 0; i < _versions.length; i++) { require(_versions[i] == 1 || _versions[i] == 2, "You must use '1' for Information Token v1 and '2' for Information Token v2 in version argument."); if(_versions[i] == 1) { IERC1155(Rarible).safeTransferFrom(address(this), owner(), oldinfotokenv1, _amounts[i], "0x"); } if(_versions[i] == 2) { IERC1155(Rarible).safeTransferFrom(address(this), owner(), oldinfotokenv2, _amounts[i], "0x"); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_mintTimestamp","type":"uint256"}],"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":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","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":"_timestamp","type":"uint256"}],"name":"setMintTimestamp","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_versions","type":"uint256[]"}],"name":"treasuryRescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"output","type":"string"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
60806040526040518060400160405280601181526020017f496e666f726d6174696f6e20546f6b656e0000000000000000000000000000008152506004908051906020019062000051929190620004f2565b506040518060400160405280600581526020017f4954207633000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f929190620004f2565b50348015620000ad57600080fd5b50604051620050b2380380620050b28339818101604052810190620000d39190620005b9565b620000e560006200019660201b60201c565b620000f6816200027a60201b60201c565b50620001176200010b6200029660201b60201c565b6200029e60201b60201c565b6000600681905550620b67f4600781905550620b7b1e6008819055508060098190555073d07dc4262bcdbf85190c01c996b4c06a461d2430600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000ae3565b606060008214620001de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d59062000717565b60405180910390fd5b600062000212604051806101800160405280610144815260200162004f2e61014491396200036460201b620013481760201c565b905060006200024d826040516020016200022d9190620006be565b6040516020818303038152906040526200036460201b620013481760201c565b905080604051602001620002629190620006f1565b60405160208183030381529060405292505050919050565b806002908051906020019062000292929190620004f2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000825114156200038957604051806020016040528060008152509050620004ed565b6000604051806060016040528060408152602001620050726040913990506000600360028551620003bb919062000760565b620003c79190620007bd565b6004620003d59190620007f5565b90506000602082620003e8919062000760565b67ffffffffffffffff81111562000404576200040362000959565b5b6040519080825280601f01601f191660200182016040528015620004375781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015620004a8576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253600182019150506200044b565b600389510660018114620004c55760028114620004d657620004e1565b613d3d60f01b6002830352620004e1565b603d60f81b60018303525b50505050508093505050505b919050565b828054620005009062000896565b90600052602060002090601f01602090048101928262000524576000855562000570565b82601f106200053f57805160ff191683800117855562000570565b8280016001018555821562000570579182015b828111156200056f57825182559160200191906001019062000552565b5b5090506200057f919062000583565b5090565b5b808211156200059e57600081600090555060010162000584565b5090565b600081519050620005b38162000ac9565b92915050565b600060208284031215620005d257620005d162000988565b5b6000620005e284828501620005a2565b91505092915050565b6000620005f88262000739565b62000604818562000755565b93506200061681856020860162000860565b80840191505092915050565b60006200063160768362000755565b91506200063e826200098d565b607682019050919050565b60006200065860318362000744565b9150620006658262000a28565b604082019050919050565b60006200067f60028362000755565b91506200068c8262000a77565b600282019050919050565b6000620006a6601d8362000755565b9150620006b38262000aa0565b601d82019050919050565b6000620006cb8262000622565b9150620006d98284620005eb565b9150620006e68262000670565b915081905092915050565b6000620006fe8262000697565b91506200070c8284620005eb565b915081905092915050565b60006020820190508181036000830152620007328162000649565b9050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006200076d8262000856565b91506200077a8362000856565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007b257620007b1620008cc565b5b828201905092915050565b6000620007ca8262000856565b9150620007d78362000856565b925082620007ea57620007e9620008fb565b5b828204905092915050565b6000620008028262000856565b91506200080f8362000856565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200084b576200084a620008cc565b5b828202905092915050565b6000819050919050565b60005b838110156200088057808201518184015260208101905062000863565b8381111562000890576000848401525b50505050565b60006002820490506001821680620008af57607f821691505b60208210811415620008c657620008c56200092a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b7f7b226e616d65223a2022496e666f726d6174696f6e20546f6b656e222c20226460008201527f65736372697074696f6e223a20225768617420697320696e666f726d6174696f60208201527f6e20776f72746820746f20796f753f222c2022696d616765223a20226461746160408201527f3a696d6167652f7376672b786d6c3b6261736536342c00000000000000000000606082015250565b7f5468657265206973206f6e6c79206f6e6520746f6b656e20696420283029206660008201527f6f7220496e666f20546f6b656e2076332e000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b62000ad48162000856565b811462000ae057600080fd5b50565b61443b8062000af36000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c80638da5cb5b116100a2578063bd257ea411610071578063bd257ea4146102e0578063e985e9c5146102fc578063f23a6e611461032c578063f242432a1461035c578063f2fde38b1461037857610115565b80638da5cb5b1461025857806395d89b4114610276578063a22cb46514610294578063bc197c81146102b057610115565b806318160ddd116100e957806318160ddd146101c85780632eb2c2d6146101e65780634e1273f414610202578063715018a614610232578063777635ec1461023c57610115565b8062fdd58e1461011a57806301ffc9a71461014a57806306fdde031461017a5780630e89341c14610198575b600080fd5b610134600480360381019061012f9190612a3b565b610394565b6040516101419190613553565b60405180910390f35b610164600480360381019061015f9190612b6b565b61045d565b604051610171919061327b565b60405180910390f35b61018261046f565b60405161018f91906132b1565b60405180910390f35b6101b260048036038101906101ad9190612bc5565b6104fd565b6040516101bf91906132b1565b60405180910390f35b6101d06105bf565b6040516101dd9190613553565b60405180910390f35b61020060048036038101906101fb91906127fb565b6105c9565b005b61021c60048036038101906102179190612a7b565b61066a565b6040516102299190613222565b60405180910390f35b61023a610783565b005b61025660048036038101906102519190612bc5565b61080b565b005b610260610891565b60405161026d91906130ed565b60405180910390f35b61027e6108bb565b60405161028b91906132b1565b60405180910390f35b6102ae60048036038101906102a991906129fb565b610949565b005b6102ca60048036038101906102c59190612729565b61095f565b6040516102d79190613296565b60405180910390f35b6102fa60048036038101906102f59190612af3565b610c16565b005b610316600480360381019061031191906126e9565b610eec565b604051610323919061327b565b60405180910390f35b610346600480360381019061034191906128ca565b610f80565b6040516103539190613296565b60405180910390f35b61037660048036038101906103719190612964565b6111af565b005b610392600480360381019061038d91906126bc565b611250565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fc90613333565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610468826114c1565b9050919050565b6004805461047c90613858565b80601f01602080910402602001604051908101604052809291908181526020018280546104a890613858565b80156104f55780601f106104ca576101008083540402835291602001916104f5565b820191906000526020600020905b8154815290600101906020018083116104d857829003601f168201915b505050505081565b606060008214610542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053990613413565b60405180910390fd5b600061056860405180610180016040528061014481526020016142826101449139611348565b9050600061059482604051602001610580919061309e565b604051602081830303815290604052611348565b9050806040516020016105a791906130cb565b60405160208183030381529060405292505050919050565b6000600654905090565b6105d161153b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061061757506106168561061161153b565b610eec565b5b610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d906133f3565b60405180910390fd5b6106638585858585611543565b5050505050565b606081518351146106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a7906134f3565b60405180910390fd5b6000835167ffffffffffffffff8111156106cd576106cc6139c0565b5b6040519080825280602002602001820160405280156106fb5781602001602082028036833780820191505090505b50905060005b8451811015610778576107488582815181106107205761071f613991565b5b602002602001015185838151811061073b5761073a613991565b5b6020026020010151610394565b82828151811061075b5761075a613991565b5b60200260200101818152505080610771906138bb565b9050610701565b508091505092915050565b61078b61153b565b73ffffffffffffffffffffffffffffffffffffffff166107a9610891565b73ffffffffffffffffffffffffffffffffffffffff16146107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690613493565b60405180910390fd5b6108096000611857565b565b61081361153b565b73ffffffffffffffffffffffffffffffffffffffff16610831610891565b73ffffffffffffffffffffffffffffffffffffffff1614610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90613493565b60405180910390fd5b8060098190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600580546108c890613858565b80601f01602080910402602001604051908101604052809291908181526020018280546108f490613858565b80156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b505050505081565b61095b61095461153b565b838361191d565b5050565b6000610969610891565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146109e05760095442116109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613373565b60405180910390fd5b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a67906133b3565b60405180910390fd5b60005b8551811015610be857600754868281518110610a9257610a91613991565b5b60200260200101511480610ac15750600854868281518110610ab757610ab6613991565b5b6020026020010151145b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613473565b60405180910390fd5b848181518110610b1357610b12613991565b5b602002602001015160066000828254610b2c91906136c1565b9250508190555060646006541115610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b70906134b3565b60405180910390fd5b610bd5876000878481518110610b9257610b91613991565b5b60200260200101516040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250611a8a565b8080610be0906138bb565b915050610a73565b507ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf9790509695505050505050565b610c1e61153b565b73ffffffffffffffffffffffffffffffffffffffff16610c3c610891565b73ffffffffffffffffffffffffffffffffffffffff1614610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8990613493565b60405180910390fd5b60005b8151811015610ee7576001828281518110610cb357610cb2613991565b5b60200260200101511480610ce157506002828281518110610cd757610cd6613991565b5b6020026020010151145b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613313565b60405180910390fd5b6001828281518110610d3557610d34613991565b5b60200260200101511415610dfa57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30610d8a610891565b600754878681518110610da057610d9f613991565b5b60200260200101516040518563ffffffff1660e01b8152600401610dc794939291906131ca565b600060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505050505b6002828281518110610e0f57610e0e613991565b5b60200260200101511415610ed457600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30610e64610891565b600854878681518110610e7a57610e79613991565b5b60200260200101516040518563ffffffff1660e01b8152600401610ea194939291906131ca565b600060405180830381600087803b158015610ebb57600080fd5b505af1158015610ecf573d6000803e3d6000fd5b505050505b8080610edf906138bb565b915050610c95565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000610f8a610891565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611001576009544211611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790613373565b60405180910390fd5b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906133b3565b60405180910390fd5b6007548514806110a2575060085485145b6110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890613433565b60405180910390fd5b83600660008282546110f391906136c1565b9250508190555060646006541115611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611137906134b3565b60405180910390fd5b611182866000866040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250611a8a565b7ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf9790509695505050505050565b6111b761153b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111fd57506111fc856111f761153b565b610eec565b5b61123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390613393565b60405180910390fd5b6112498585858585611c20565b5050505050565b61125861153b565b73ffffffffffffffffffffffffffffffffffffffff16611276610891565b73ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390613493565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390613353565b60405180910390fd5b61134581611857565b50565b606060008251141561136b576040518060200160405280600081525090506114bc565b60006040518060600160405280604081526020016143c6604091399050600060036002855161139a91906136c1565b6113a49190613717565b60046113b09190613748565b905060006020826113c191906136c1565b67ffffffffffffffff8111156113da576113d96139c0565b5b6040519080825280601f01601f19166020018201604052801561140c5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b8183101561147b576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050611420565b60038951066001811461149557600281146114a5576114b0565b613d3d60f01b60028303526114b0565b603d60f81b60018303525b50505050508093505050505b919050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611534575061153382611ea2565b5b9050919050565b600033905090565b8151835114611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90613513565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee906133d3565b60405180910390fd5b600061160161153b565b9050611611818787878787611f84565b60005b84518110156117c257600085828151811061163257611631613991565b5b60200260200101519050600085838151811061165157611650613991565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990613453565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117a791906136c1565b92505081905550505050806117bb906138bb565b9050611614565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611839929190613244565b60405180910390a461184f818787878787611f8c565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561198c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611983906134d3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a7d919061327b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af190613533565b60405180910390fd5b6000611b0461153b565b9050611b2581600087611b1688612173565b611b1f88612173565b87611f84565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8491906136c1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c0292919061356e565b60405180910390a4611c19816000878787876121ed565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c87906133d3565b60405180910390fd5b6000611c9a61153b565b9050611cba818787611cab88612173565b611cb488612173565b87611f84565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890613453565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0691906136c1565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e8392919061356e565b60405180910390a4611e998288888888886121ed565b50505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f6d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f7d5750611f7c826123d4565b5b9050919050565b505050505050565b611fab8473ffffffffffffffffffffffffffffffffffffffff1661243e565b1561216b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611ff1959493929190613108565b602060405180830381600087803b15801561200b57600080fd5b505af192505050801561203c57506040513d601f19601f820116820180604052508101906120399190612b98565b60015b6120e2576120486139ef565b806308c379a014156120a5575061205d61418f565b8061206857506120a7565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c91906132b1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d9906132d3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612160906132f3565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612192576121916139c0565b5b6040519080825280602002602001820160405280156121c05781602001602082028036833780820191505090505b50905082816000815181106121d8576121d7613991565b5b60200260200101818152505080915050919050565b61220c8473ffffffffffffffffffffffffffffffffffffffff1661243e565b156123cc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612252959493929190613170565b602060405180830381600087803b15801561226c57600080fd5b505af192505050801561229d57506040513d601f19601f8201168201806040525081019061229a9190612b98565b60015b612343576122a96139ef565b806308c379a0141561230657506122be61418f565b806122c95750612308565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fd91906132b1565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a906132d3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c1906132f3565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b600061246461245f846135bc565b613597565b9050808382526020820190508285602086028201111561248757612486613a1b565b5b60005b858110156124b7578161249d8882612573565b84526020840193506020830192505060018101905061248a565b5050509392505050565b60006124d46124cf846135e8565b613597565b905080838252602082019050828560208602820111156124f7576124f6613a1b565b5b60005b85811015612527578161250d88826126a7565b8452602084019350602083019250506001810190506124fa565b5050509392505050565b600061254461253f84613614565b613597565b9050828152602081018484840111156125605761255f613a20565b5b61256b848285613816565b509392505050565b60008135905061258281614225565b92915050565b600082601f83011261259d5761259c613a16565b5b81356125ad848260208601612451565b91505092915050565b600082601f8301126125cb576125ca613a16565b5b81356125db8482602086016124c1565b91505092915050565b6000813590506125f38161423c565b92915050565b60008135905061260881614253565b92915050565b60008151905061261d81614253565b92915050565b60008083601f84011261263957612638613a16565b5b8235905067ffffffffffffffff81111561265657612655613a11565b5b60208301915083600182028301111561267257612671613a1b565b5b9250929050565b600082601f83011261268e5761268d613a16565b5b813561269e848260208601612531565b91505092915050565b6000813590506126b68161426a565b92915050565b6000602082840312156126d2576126d1613a2a565b5b60006126e084828501612573565b91505092915050565b60008060408385031215612700576126ff613a2a565b5b600061270e85828601612573565b925050602061271f85828601612573565b9150509250929050565b60008060008060008060a0878903121561274657612745613a2a565b5b600061275489828a01612573565b965050602061276589828a01612573565b955050604087013567ffffffffffffffff81111561278657612785613a25565b5b61279289828a016125b6565b945050606087013567ffffffffffffffff8111156127b3576127b2613a25565b5b6127bf89828a016125b6565b935050608087013567ffffffffffffffff8111156127e0576127df613a25565b5b6127ec89828a01612623565b92509250509295509295509295565b600080600080600060a0868803121561281757612816613a2a565b5b600061282588828901612573565b955050602061283688828901612573565b945050604086013567ffffffffffffffff81111561285757612856613a25565b5b612863888289016125b6565b935050606086013567ffffffffffffffff81111561288457612883613a25565b5b612890888289016125b6565b925050608086013567ffffffffffffffff8111156128b1576128b0613a25565b5b6128bd88828901612679565b9150509295509295909350565b60008060008060008060a087890312156128e7576128e6613a2a565b5b60006128f589828a01612573565b965050602061290689828a01612573565b955050604061291789828a016126a7565b945050606061292889828a016126a7565b935050608087013567ffffffffffffffff81111561294957612948613a25565b5b61295589828a01612623565b92509250509295509295509295565b600080600080600060a086880312156129805761297f613a2a565b5b600061298e88828901612573565b955050602061299f88828901612573565b94505060406129b0888289016126a7565b93505060606129c1888289016126a7565b925050608086013567ffffffffffffffff8111156129e2576129e1613a25565b5b6129ee88828901612679565b9150509295509295909350565b60008060408385031215612a1257612a11613a2a565b5b6000612a2085828601612573565b9250506020612a31858286016125e4565b9150509250929050565b60008060408385031215612a5257612a51613a2a565b5b6000612a6085828601612573565b9250506020612a71858286016126a7565b9150509250929050565b60008060408385031215612a9257612a91613a2a565b5b600083013567ffffffffffffffff811115612ab057612aaf613a25565b5b612abc85828601612588565b925050602083013567ffffffffffffffff811115612add57612adc613a25565b5b612ae9858286016125b6565b9150509250929050565b60008060408385031215612b0a57612b09613a2a565b5b600083013567ffffffffffffffff811115612b2857612b27613a25565b5b612b34858286016125b6565b925050602083013567ffffffffffffffff811115612b5557612b54613a25565b5b612b61858286016125b6565b9150509250929050565b600060208284031215612b8157612b80613a2a565b5b6000612b8f848285016125f9565b91505092915050565b600060208284031215612bae57612bad613a2a565b5b6000612bbc8482850161260e565b91505092915050565b600060208284031215612bdb57612bda613a2a565b5b6000612be9848285016126a7565b91505092915050565b6000612bfe8383613080565b60208301905092915050565b612c13816137a2565b82525050565b6000612c2482613655565b612c2e8185613683565b9350612c3983613645565b8060005b83811015612c6a578151612c518882612bf2565b9750612c5c83613676565b925050600181019050612c3d565b5085935050505092915050565b612c80816137b4565b82525050565b612c8f816137c0565b82525050565b6000612ca082613660565b612caa8185613694565b9350612cba818560208601613825565b612cc381613a2f565b840191505092915050565b6000612cd98261366b565b612ce381856136a5565b9350612cf3818560208601613825565b612cfc81613a2f565b840191505092915050565b6000612d128261366b565b612d1c81856136b6565b9350612d2c818560208601613825565b80840191505092915050565b6000612d456034836136a5565b9150612d5082613a4d565b604082019050919050565b6000612d686028836136a5565b9150612d7382613a9c565b604082019050919050565b6000612d8b605f836136a5565b9150612d9682613aeb565b606082019050919050565b6000612dae602b836136a5565b9150612db982613b60565b604082019050919050565b6000612dd16026836136a5565b9150612ddc82613baf565b604082019050919050565b6000612df46023836136a5565b9150612dff82613bfe565b604082019050919050565b6000612e176029836136a5565b9150612e2282613c4d565b604082019050919050565b6000612e3a600283613694565b9150612e4582613c9c565b602082019050919050565b6000612e5d6032836136a5565b9150612e6882613cc5565b604082019050919050565b6000612e806076836136b6565b9150612e8b82613d14565b607682019050919050565b6000612ea36025836136a5565b9150612eae82613daf565b604082019050919050565b6000612ec66032836136a5565b9150612ed182613dfe565b604082019050919050565b6000612ee96031836136a5565b9150612ef482613e4d565b604082019050919050565b6000612f0c6002836136b6565b9150612f1782613e9c565b600282019050919050565b6000612f2f6033836136a5565b9150612f3a82613ec5565b604082019050919050565b6000612f52602a836136a5565b9150612f5d82613f14565b604082019050919050565b6000612f756034836136a5565b9150612f8082613f63565b604082019050919050565b6000612f986020836136a5565b9150612fa382613fb2565b602082019050919050565b6000612fbb6025836136a5565b9150612fc682613fdb565b604082019050919050565b6000612fde601d836136b6565b9150612fe98261402a565b601d82019050919050565b60006130016029836136a5565b915061300c82614053565b604082019050919050565b60006130246029836136a5565b915061302f826140a2565b604082019050919050565b60006130476028836136a5565b9150613052826140f1565b604082019050919050565b600061306a6021836136a5565b915061307582614140565b604082019050919050565b6130898161380c565b82525050565b6130988161380c565b82525050565b60006130a982612e73565b91506130b58284612d07565b91506130c082612eff565b915081905092915050565b60006130d682612fd1565b91506130e28284612d07565b915081905092915050565b60006020820190506131026000830184612c0a565b92915050565b600060a08201905061311d6000830188612c0a565b61312a6020830187612c0a565b818103604083015261313c8186612c19565b905081810360608301526131508185612c19565b905081810360808301526131648184612c95565b90509695505050505050565b600060a0820190506131856000830188612c0a565b6131926020830187612c0a565b61319f604083018661308f565b6131ac606083018561308f565b81810360808301526131be8184612c95565b90509695505050505050565b600060a0820190506131df6000830187612c0a565b6131ec6020830186612c0a565b6131f9604083018561308f565b613206606083018461308f565b818103608083015261321781612e2d565b905095945050505050565b6000602082019050818103600083015261323c8184612c19565b905092915050565b6000604082019050818103600083015261325e8185612c19565b905081810360208301526132728184612c19565b90509392505050565b60006020820190506132906000830184612c77565b92915050565b60006020820190506132ab6000830184612c86565b92915050565b600060208201905081810360008301526132cb8184612cce565b905092915050565b600060208201905081810360008301526132ec81612d38565b9050919050565b6000602082019050818103600083015261330c81612d5b565b9050919050565b6000602082019050818103600083015261332c81612d7e565b9050919050565b6000602082019050818103600083015261334c81612da1565b9050919050565b6000602082019050818103600083015261336c81612dc4565b9050919050565b6000602082019050818103600083015261338c81612de7565b9050919050565b600060208201905081810360008301526133ac81612e0a565b9050919050565b600060208201905081810360008301526133cc81612e50565b9050919050565b600060208201905081810360008301526133ec81612e96565b9050919050565b6000602082019050818103600083015261340c81612eb9565b9050919050565b6000602082019050818103600083015261342c81612edc565b9050919050565b6000602082019050818103600083015261344c81612f22565b9050919050565b6000602082019050818103600083015261346c81612f45565b9050919050565b6000602082019050818103600083015261348c81612f68565b9050919050565b600060208201905081810360008301526134ac81612f8b565b9050919050565b600060208201905081810360008301526134cc81612fae565b9050919050565b600060208201905081810360008301526134ec81612ff4565b9050919050565b6000602082019050818103600083015261350c81613017565b9050919050565b6000602082019050818103600083015261352c8161303a565b9050919050565b6000602082019050818103600083015261354c8161305d565b9050919050565b6000602082019050613568600083018461308f565b92915050565b6000604082019050613583600083018561308f565b613590602083018461308f565b9392505050565b60006135a16135b2565b90506135ad828261388a565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d7576135d66139c0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613603576136026139c0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561362f5761362e6139c0565b5b61363882613a2f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136cc8261380c565b91506136d78361380c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561370c5761370b613904565b5b828201905092915050565b60006137228261380c565b915061372d8361380c565b92508261373d5761373c613933565b5b828204905092915050565b60006137538261380c565b915061375e8361380c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379757613796613904565b5b828202905092915050565b60006137ad826137ec565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613843578082015181840152602081019050613828565b83811115613852576000848401525b50505050565b6000600282049050600182168061387057607f821691505b6020821081141561388457613883613962565b5b50919050565b61389382613a2f565b810181811067ffffffffffffffff821117156138b2576138b16139c0565b5b80604052505050565b60006138c68261380c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138f9576138f8613904565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a0e5760046000803e613a0b600051613a40565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f596f75206d757374207573652027312720666f7220496e666f726d6174696f6e60008201527f20546f6b656e20763120616e642027322720666f7220496e666f726d6174696f60208201527f6e20546f6b656e20763220696e2076657273696f6e20617267756d656e742e00604082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f75277265206561726c7921204d696e74696e6720737461727473206c617460008201527f65722e0000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f3078000000000000000000000000000000000000000000000000000000000000600082015250565b7f54686520746f6b656e206265696e672073656e74206d7573742062652061205260008201527f617269626c6520496e666f20546f6b656e2e0000000000000000000000000000602082015250565b7f7b226e616d65223a2022496e666f726d6174696f6e20546f6b656e222c20226460008201527f65736372697074696f6e223a20225768617420697320696e666f726d6174696f60208201527f6e20776f72746820746f20796f753f222c2022696d616765223a20226461746160408201527f3a696d6167652f7376672b786d6c3b6261736536342c00000000000000000000606082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5468657265206973206f6e6c79206f6e6520746f6b656e20696420283029206660008201527f6f7220496e666f20546f6b656e2076332e000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f54686520746f6b656e206265696e672073656e74206d7573742062652061207660008201527f31206f7220763220496e666f20546f6b656e2e00000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f54686520746f6b656e73206265696e672073656e74206d75737420626520612060008201527f7631206f7220763220496e666f20546f6b656e2e000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686572652063616e206f6e6c792062652031303020496e666f20546f6b656e60008201527f207633732e000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561419f57614222565b6141a76135b2565b60043d036004823e80513d602482011167ffffffffffffffff821117156141cf575050614222565b808201805167ffffffffffffffff8111156141ed5750505050614222565b80602083010160043d03850181111561420a575050505050614222565b6142198260200185018661388a565b82955050505050505b90565b61422e816137a2565b811461423957600080fd5b50565b614245816137b4565b811461425057600080fd5b50565b61425c816137c0565b811461426757600080fd5b50565b6142738161380c565b811461427e57600080fd5b5056fe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302032353020323530223e3c7374796c653e2e62617365207b2066696c6c3a20626c61636b3b20666f6e742d66616d696c793a206d656e6c6f3b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d227768697465222f3e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e496e666f726d6174696f6e20546f6b656e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e76333c2f746578743e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220e17eb5f78ce53e1c6243186902e93e0b13d97229381b6e170d6afb1363e3144464736f6c634300080700333c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302032353020323530223e3c7374796c653e2e62617365207b2066696c6c3a20626c61636b3b20666f6e742d66616d696c793a206d656e6c6f3b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d227768697465222f3e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e496e666f726d6174696f6e20546f6b656e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e76333c2f746578743e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f0000000000000000000000000000000000000000000000000000000061fd5b90
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101155760003560e01c80638da5cb5b116100a2578063bd257ea411610071578063bd257ea4146102e0578063e985e9c5146102fc578063f23a6e611461032c578063f242432a1461035c578063f2fde38b1461037857610115565b80638da5cb5b1461025857806395d89b4114610276578063a22cb46514610294578063bc197c81146102b057610115565b806318160ddd116100e957806318160ddd146101c85780632eb2c2d6146101e65780634e1273f414610202578063715018a614610232578063777635ec1461023c57610115565b8062fdd58e1461011a57806301ffc9a71461014a57806306fdde031461017a5780630e89341c14610198575b600080fd5b610134600480360381019061012f9190612a3b565b610394565b6040516101419190613553565b60405180910390f35b610164600480360381019061015f9190612b6b565b61045d565b604051610171919061327b565b60405180910390f35b61018261046f565b60405161018f91906132b1565b60405180910390f35b6101b260048036038101906101ad9190612bc5565b6104fd565b6040516101bf91906132b1565b60405180910390f35b6101d06105bf565b6040516101dd9190613553565b60405180910390f35b61020060048036038101906101fb91906127fb565b6105c9565b005b61021c60048036038101906102179190612a7b565b61066a565b6040516102299190613222565b60405180910390f35b61023a610783565b005b61025660048036038101906102519190612bc5565b61080b565b005b610260610891565b60405161026d91906130ed565b60405180910390f35b61027e6108bb565b60405161028b91906132b1565b60405180910390f35b6102ae60048036038101906102a991906129fb565b610949565b005b6102ca60048036038101906102c59190612729565b61095f565b6040516102d79190613296565b60405180910390f35b6102fa60048036038101906102f59190612af3565b610c16565b005b610316600480360381019061031191906126e9565b610eec565b604051610323919061327b565b60405180910390f35b610346600480360381019061034191906128ca565b610f80565b6040516103539190613296565b60405180910390f35b61037660048036038101906103719190612964565b6111af565b005b610392600480360381019061038d91906126bc565b611250565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fc90613333565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610468826114c1565b9050919050565b6004805461047c90613858565b80601f01602080910402602001604051908101604052809291908181526020018280546104a890613858565b80156104f55780601f106104ca576101008083540402835291602001916104f5565b820191906000526020600020905b8154815290600101906020018083116104d857829003601f168201915b505050505081565b606060008214610542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053990613413565b60405180910390fd5b600061056860405180610180016040528061014481526020016142826101449139611348565b9050600061059482604051602001610580919061309e565b604051602081830303815290604052611348565b9050806040516020016105a791906130cb565b60405160208183030381529060405292505050919050565b6000600654905090565b6105d161153b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061061757506106168561061161153b565b610eec565b5b610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d906133f3565b60405180910390fd5b6106638585858585611543565b5050505050565b606081518351146106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a7906134f3565b60405180910390fd5b6000835167ffffffffffffffff8111156106cd576106cc6139c0565b5b6040519080825280602002602001820160405280156106fb5781602001602082028036833780820191505090505b50905060005b8451811015610778576107488582815181106107205761071f613991565b5b602002602001015185838151811061073b5761073a613991565b5b6020026020010151610394565b82828151811061075b5761075a613991565b5b60200260200101818152505080610771906138bb565b9050610701565b508091505092915050565b61078b61153b565b73ffffffffffffffffffffffffffffffffffffffff166107a9610891565b73ffffffffffffffffffffffffffffffffffffffff16146107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690613493565b60405180910390fd5b6108096000611857565b565b61081361153b565b73ffffffffffffffffffffffffffffffffffffffff16610831610891565b73ffffffffffffffffffffffffffffffffffffffff1614610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90613493565b60405180910390fd5b8060098190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600580546108c890613858565b80601f01602080910402602001604051908101604052809291908181526020018280546108f490613858565b80156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b505050505081565b61095b61095461153b565b838361191d565b5050565b6000610969610891565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146109e05760095442116109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613373565b60405180910390fd5b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a67906133b3565b60405180910390fd5b60005b8551811015610be857600754868281518110610a9257610a91613991565b5b60200260200101511480610ac15750600854868281518110610ab757610ab6613991565b5b6020026020010151145b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613473565b60405180910390fd5b848181518110610b1357610b12613991565b5b602002602001015160066000828254610b2c91906136c1565b9250508190555060646006541115610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b70906134b3565b60405180910390fd5b610bd5876000878481518110610b9257610b91613991565b5b60200260200101516040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250611a8a565b8080610be0906138bb565b915050610a73565b507ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf9790509695505050505050565b610c1e61153b565b73ffffffffffffffffffffffffffffffffffffffff16610c3c610891565b73ffffffffffffffffffffffffffffffffffffffff1614610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8990613493565b60405180910390fd5b60005b8151811015610ee7576001828281518110610cb357610cb2613991565b5b60200260200101511480610ce157506002828281518110610cd757610cd6613991565b5b6020026020010151145b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613313565b60405180910390fd5b6001828281518110610d3557610d34613991565b5b60200260200101511415610dfa57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30610d8a610891565b600754878681518110610da057610d9f613991565b5b60200260200101516040518563ffffffff1660e01b8152600401610dc794939291906131ca565b600060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505050505b6002828281518110610e0f57610e0e613991565b5b60200260200101511415610ed457600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30610e64610891565b600854878681518110610e7a57610e79613991565b5b60200260200101516040518563ffffffff1660e01b8152600401610ea194939291906131ca565b600060405180830381600087803b158015610ebb57600080fd5b505af1158015610ecf573d6000803e3d6000fd5b505050505b8080610edf906138bb565b915050610c95565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000610f8a610891565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611001576009544211611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790613373565b60405180910390fd5b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906133b3565b60405180910390fd5b6007548514806110a2575060085485145b6110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890613433565b60405180910390fd5b83600660008282546110f391906136c1565b9250508190555060646006541115611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611137906134b3565b60405180910390fd5b611182866000866040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250611a8a565b7ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf9790509695505050505050565b6111b761153b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111fd57506111fc856111f761153b565b610eec565b5b61123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390613393565b60405180910390fd5b6112498585858585611c20565b5050505050565b61125861153b565b73ffffffffffffffffffffffffffffffffffffffff16611276610891565b73ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390613493565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390613353565b60405180910390fd5b61134581611857565b50565b606060008251141561136b576040518060200160405280600081525090506114bc565b60006040518060600160405280604081526020016143c6604091399050600060036002855161139a91906136c1565b6113a49190613717565b60046113b09190613748565b905060006020826113c191906136c1565b67ffffffffffffffff8111156113da576113d96139c0565b5b6040519080825280601f01601f19166020018201604052801561140c5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b8183101561147b576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050611420565b60038951066001811461149557600281146114a5576114b0565b613d3d60f01b60028303526114b0565b603d60f81b60018303525b50505050508093505050505b919050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611534575061153382611ea2565b5b9050919050565b600033905090565b8151835114611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90613513565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee906133d3565b60405180910390fd5b600061160161153b565b9050611611818787878787611f84565b60005b84518110156117c257600085828151811061163257611631613991565b5b60200260200101519050600085838151811061165157611650613991565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990613453565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117a791906136c1565b92505081905550505050806117bb906138bb565b9050611614565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611839929190613244565b60405180910390a461184f818787878787611f8c565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561198c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611983906134d3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a7d919061327b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af190613533565b60405180910390fd5b6000611b0461153b565b9050611b2581600087611b1688612173565b611b1f88612173565b87611f84565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8491906136c1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c0292919061356e565b60405180910390a4611c19816000878787876121ed565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c87906133d3565b60405180910390fd5b6000611c9a61153b565b9050611cba818787611cab88612173565b611cb488612173565b87611f84565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890613453565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0691906136c1565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e8392919061356e565b60405180910390a4611e998288888888886121ed565b50505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f6d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f7d5750611f7c826123d4565b5b9050919050565b505050505050565b611fab8473ffffffffffffffffffffffffffffffffffffffff1661243e565b1561216b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611ff1959493929190613108565b602060405180830381600087803b15801561200b57600080fd5b505af192505050801561203c57506040513d601f19601f820116820180604052508101906120399190612b98565b60015b6120e2576120486139ef565b806308c379a014156120a5575061205d61418f565b8061206857506120a7565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c91906132b1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d9906132d3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612160906132f3565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612192576121916139c0565b5b6040519080825280602002602001820160405280156121c05781602001602082028036833780820191505090505b50905082816000815181106121d8576121d7613991565b5b60200260200101818152505080915050919050565b61220c8473ffffffffffffffffffffffffffffffffffffffff1661243e565b156123cc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612252959493929190613170565b602060405180830381600087803b15801561226c57600080fd5b505af192505050801561229d57506040513d601f19601f8201168201806040525081019061229a9190612b98565b60015b612343576122a96139ef565b806308c379a0141561230657506122be61418f565b806122c95750612308565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fd91906132b1565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a906132d3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c1906132f3565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b600061246461245f846135bc565b613597565b9050808382526020820190508285602086028201111561248757612486613a1b565b5b60005b858110156124b7578161249d8882612573565b84526020840193506020830192505060018101905061248a565b5050509392505050565b60006124d46124cf846135e8565b613597565b905080838252602082019050828560208602820111156124f7576124f6613a1b565b5b60005b85811015612527578161250d88826126a7565b8452602084019350602083019250506001810190506124fa565b5050509392505050565b600061254461253f84613614565b613597565b9050828152602081018484840111156125605761255f613a20565b5b61256b848285613816565b509392505050565b60008135905061258281614225565b92915050565b600082601f83011261259d5761259c613a16565b5b81356125ad848260208601612451565b91505092915050565b600082601f8301126125cb576125ca613a16565b5b81356125db8482602086016124c1565b91505092915050565b6000813590506125f38161423c565b92915050565b60008135905061260881614253565b92915050565b60008151905061261d81614253565b92915050565b60008083601f84011261263957612638613a16565b5b8235905067ffffffffffffffff81111561265657612655613a11565b5b60208301915083600182028301111561267257612671613a1b565b5b9250929050565b600082601f83011261268e5761268d613a16565b5b813561269e848260208601612531565b91505092915050565b6000813590506126b68161426a565b92915050565b6000602082840312156126d2576126d1613a2a565b5b60006126e084828501612573565b91505092915050565b60008060408385031215612700576126ff613a2a565b5b600061270e85828601612573565b925050602061271f85828601612573565b9150509250929050565b60008060008060008060a0878903121561274657612745613a2a565b5b600061275489828a01612573565b965050602061276589828a01612573565b955050604087013567ffffffffffffffff81111561278657612785613a25565b5b61279289828a016125b6565b945050606087013567ffffffffffffffff8111156127b3576127b2613a25565b5b6127bf89828a016125b6565b935050608087013567ffffffffffffffff8111156127e0576127df613a25565b5b6127ec89828a01612623565b92509250509295509295509295565b600080600080600060a0868803121561281757612816613a2a565b5b600061282588828901612573565b955050602061283688828901612573565b945050604086013567ffffffffffffffff81111561285757612856613a25565b5b612863888289016125b6565b935050606086013567ffffffffffffffff81111561288457612883613a25565b5b612890888289016125b6565b925050608086013567ffffffffffffffff8111156128b1576128b0613a25565b5b6128bd88828901612679565b9150509295509295909350565b60008060008060008060a087890312156128e7576128e6613a2a565b5b60006128f589828a01612573565b965050602061290689828a01612573565b955050604061291789828a016126a7565b945050606061292889828a016126a7565b935050608087013567ffffffffffffffff81111561294957612948613a25565b5b61295589828a01612623565b92509250509295509295509295565b600080600080600060a086880312156129805761297f613a2a565b5b600061298e88828901612573565b955050602061299f88828901612573565b94505060406129b0888289016126a7565b93505060606129c1888289016126a7565b925050608086013567ffffffffffffffff8111156129e2576129e1613a25565b5b6129ee88828901612679565b9150509295509295909350565b60008060408385031215612a1257612a11613a2a565b5b6000612a2085828601612573565b9250506020612a31858286016125e4565b9150509250929050565b60008060408385031215612a5257612a51613a2a565b5b6000612a6085828601612573565b9250506020612a71858286016126a7565b9150509250929050565b60008060408385031215612a9257612a91613a2a565b5b600083013567ffffffffffffffff811115612ab057612aaf613a25565b5b612abc85828601612588565b925050602083013567ffffffffffffffff811115612add57612adc613a25565b5b612ae9858286016125b6565b9150509250929050565b60008060408385031215612b0a57612b09613a2a565b5b600083013567ffffffffffffffff811115612b2857612b27613a25565b5b612b34858286016125b6565b925050602083013567ffffffffffffffff811115612b5557612b54613a25565b5b612b61858286016125b6565b9150509250929050565b600060208284031215612b8157612b80613a2a565b5b6000612b8f848285016125f9565b91505092915050565b600060208284031215612bae57612bad613a2a565b5b6000612bbc8482850161260e565b91505092915050565b600060208284031215612bdb57612bda613a2a565b5b6000612be9848285016126a7565b91505092915050565b6000612bfe8383613080565b60208301905092915050565b612c13816137a2565b82525050565b6000612c2482613655565b612c2e8185613683565b9350612c3983613645565b8060005b83811015612c6a578151612c518882612bf2565b9750612c5c83613676565b925050600181019050612c3d565b5085935050505092915050565b612c80816137b4565b82525050565b612c8f816137c0565b82525050565b6000612ca082613660565b612caa8185613694565b9350612cba818560208601613825565b612cc381613a2f565b840191505092915050565b6000612cd98261366b565b612ce381856136a5565b9350612cf3818560208601613825565b612cfc81613a2f565b840191505092915050565b6000612d128261366b565b612d1c81856136b6565b9350612d2c818560208601613825565b80840191505092915050565b6000612d456034836136a5565b9150612d5082613a4d565b604082019050919050565b6000612d686028836136a5565b9150612d7382613a9c565b604082019050919050565b6000612d8b605f836136a5565b9150612d9682613aeb565b606082019050919050565b6000612dae602b836136a5565b9150612db982613b60565b604082019050919050565b6000612dd16026836136a5565b9150612ddc82613baf565b604082019050919050565b6000612df46023836136a5565b9150612dff82613bfe565b604082019050919050565b6000612e176029836136a5565b9150612e2282613c4d565b604082019050919050565b6000612e3a600283613694565b9150612e4582613c9c565b602082019050919050565b6000612e5d6032836136a5565b9150612e6882613cc5565b604082019050919050565b6000612e806076836136b6565b9150612e8b82613d14565b607682019050919050565b6000612ea36025836136a5565b9150612eae82613daf565b604082019050919050565b6000612ec66032836136a5565b9150612ed182613dfe565b604082019050919050565b6000612ee96031836136a5565b9150612ef482613e4d565b604082019050919050565b6000612f0c6002836136b6565b9150612f1782613e9c565b600282019050919050565b6000612f2f6033836136a5565b9150612f3a82613ec5565b604082019050919050565b6000612f52602a836136a5565b9150612f5d82613f14565b604082019050919050565b6000612f756034836136a5565b9150612f8082613f63565b604082019050919050565b6000612f986020836136a5565b9150612fa382613fb2565b602082019050919050565b6000612fbb6025836136a5565b9150612fc682613fdb565b604082019050919050565b6000612fde601d836136b6565b9150612fe98261402a565b601d82019050919050565b60006130016029836136a5565b915061300c82614053565b604082019050919050565b60006130246029836136a5565b915061302f826140a2565b604082019050919050565b60006130476028836136a5565b9150613052826140f1565b604082019050919050565b600061306a6021836136a5565b915061307582614140565b604082019050919050565b6130898161380c565b82525050565b6130988161380c565b82525050565b60006130a982612e73565b91506130b58284612d07565b91506130c082612eff565b915081905092915050565b60006130d682612fd1565b91506130e28284612d07565b915081905092915050565b60006020820190506131026000830184612c0a565b92915050565b600060a08201905061311d6000830188612c0a565b61312a6020830187612c0a565b818103604083015261313c8186612c19565b905081810360608301526131508185612c19565b905081810360808301526131648184612c95565b90509695505050505050565b600060a0820190506131856000830188612c0a565b6131926020830187612c0a565b61319f604083018661308f565b6131ac606083018561308f565b81810360808301526131be8184612c95565b90509695505050505050565b600060a0820190506131df6000830187612c0a565b6131ec6020830186612c0a565b6131f9604083018561308f565b613206606083018461308f565b818103608083015261321781612e2d565b905095945050505050565b6000602082019050818103600083015261323c8184612c19565b905092915050565b6000604082019050818103600083015261325e8185612c19565b905081810360208301526132728184612c19565b90509392505050565b60006020820190506132906000830184612c77565b92915050565b60006020820190506132ab6000830184612c86565b92915050565b600060208201905081810360008301526132cb8184612cce565b905092915050565b600060208201905081810360008301526132ec81612d38565b9050919050565b6000602082019050818103600083015261330c81612d5b565b9050919050565b6000602082019050818103600083015261332c81612d7e565b9050919050565b6000602082019050818103600083015261334c81612da1565b9050919050565b6000602082019050818103600083015261336c81612dc4565b9050919050565b6000602082019050818103600083015261338c81612de7565b9050919050565b600060208201905081810360008301526133ac81612e0a565b9050919050565b600060208201905081810360008301526133cc81612e50565b9050919050565b600060208201905081810360008301526133ec81612e96565b9050919050565b6000602082019050818103600083015261340c81612eb9565b9050919050565b6000602082019050818103600083015261342c81612edc565b9050919050565b6000602082019050818103600083015261344c81612f22565b9050919050565b6000602082019050818103600083015261346c81612f45565b9050919050565b6000602082019050818103600083015261348c81612f68565b9050919050565b600060208201905081810360008301526134ac81612f8b565b9050919050565b600060208201905081810360008301526134cc81612fae565b9050919050565b600060208201905081810360008301526134ec81612ff4565b9050919050565b6000602082019050818103600083015261350c81613017565b9050919050565b6000602082019050818103600083015261352c8161303a565b9050919050565b6000602082019050818103600083015261354c8161305d565b9050919050565b6000602082019050613568600083018461308f565b92915050565b6000604082019050613583600083018561308f565b613590602083018461308f565b9392505050565b60006135a16135b2565b90506135ad828261388a565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d7576135d66139c0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613603576136026139c0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561362f5761362e6139c0565b5b61363882613a2f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136cc8261380c565b91506136d78361380c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561370c5761370b613904565b5b828201905092915050565b60006137228261380c565b915061372d8361380c565b92508261373d5761373c613933565b5b828204905092915050565b60006137538261380c565b915061375e8361380c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379757613796613904565b5b828202905092915050565b60006137ad826137ec565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613843578082015181840152602081019050613828565b83811115613852576000848401525b50505050565b6000600282049050600182168061387057607f821691505b6020821081141561388457613883613962565b5b50919050565b61389382613a2f565b810181811067ffffffffffffffff821117156138b2576138b16139c0565b5b80604052505050565b60006138c68261380c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138f9576138f8613904565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a0e5760046000803e613a0b600051613a40565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f596f75206d757374207573652027312720666f7220496e666f726d6174696f6e60008201527f20546f6b656e20763120616e642027322720666f7220496e666f726d6174696f60208201527f6e20546f6b656e20763220696e2076657273696f6e20617267756d656e742e00604082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f75277265206561726c7921204d696e74696e6720737461727473206c617460008201527f65722e0000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f3078000000000000000000000000000000000000000000000000000000000000600082015250565b7f54686520746f6b656e206265696e672073656e74206d7573742062652061205260008201527f617269626c6520496e666f20546f6b656e2e0000000000000000000000000000602082015250565b7f7b226e616d65223a2022496e666f726d6174696f6e20546f6b656e222c20226460008201527f65736372697074696f6e223a20225768617420697320696e666f726d6174696f60208201527f6e20776f72746820746f20796f753f222c2022696d616765223a20226461746160408201527f3a696d6167652f7376672b786d6c3b6261736536342c00000000000000000000606082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5468657265206973206f6e6c79206f6e6520746f6b656e20696420283029206660008201527f6f7220496e666f20546f6b656e2076332e000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f54686520746f6b656e206265696e672073656e74206d7573742062652061207660008201527f31206f7220763220496e666f20546f6b656e2e00000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f54686520746f6b656e73206265696e672073656e74206d75737420626520612060008201527f7631206f7220763220496e666f20546f6b656e2e000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686572652063616e206f6e6c792062652031303020496e666f20546f6b656e60008201527f207633732e000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561419f57614222565b6141a76135b2565b60043d036004823e80513d602482011167ffffffffffffffff821117156141cf575050614222565b808201805167ffffffffffffffff8111156141ed5750505050614222565b80602083010160043d03850181111561420a575050505050614222565b6142198260200185018661388a565b82955050505050505b90565b61422e816137a2565b811461423957600080fd5b50565b614245816137b4565b811461425057600080fd5b50565b61425c816137c0565b811461426757600080fd5b50565b6142738161380c565b811461427e57600080fd5b5056fe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302032353020323530223e3c7374796c653e2e62617365207b2066696c6c3a20626c61636b3b20666f6e742d66616d696c793a206d656e6c6f3b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d227768697465222f3e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e496e666f726d6174696f6e20546f6b656e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e76333c2f746578743e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220e17eb5f78ce53e1c6243186902e93e0b13d97229381b6e170d6afb1363e3144464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000061fd5b90
-----Decoded View---------------
Arg [0] : _mintTimestamp (uint256): 1643994000
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000061fd5b90
Deployed Bytecode Sourcemap
42093:4474:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28518:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42734:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42160:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44776:842;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42633:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30457:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28915:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7553:103;;;:::i;:::-;;43016:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6902:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42207:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29512:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43889:875;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45910:654;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29739:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43131:750;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29979:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7811:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28518:231;28604:7;28651:1;28632:21;;:7;:21;;;;28624:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;28719:9;:13;28729:2;28719:13;;;;;;;;;;;:22;28733:7;28719:22;;;;;;;;;;;;;;;;28712:29;;28518:231;;;;:::o;42734:179::-;42845:4;42869:36;42893:11;42869:23;:36::i;:::-;42862:43;;42734:179;;;:::o;42160:40::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44776:842::-;44828:20;44874:1;44868:2;:7;44860:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44940:21;44964:348;44978:333;;;;;;;;;;;;;;;;;44964:13;:348::i;:::-;44940:372;;45323:18;45344:183;45510:7;45371:153;;;;;;;;:::i;:::-;;;;;;;;;;;;;45344:13;:183::i;:::-;45323:204;;45604:4;45554:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;45538:72;;44849:769;;44776:842;;;:::o;42633:93::-;42679:7;42706:12;;42699:19;;42633:93;:::o;30457:442::-;30698:12;:10;:12::i;:::-;30690:20;;:4;:20;;;:60;;;;30714:36;30731:4;30737:12;:10;:12::i;:::-;30714:16;:36::i;:::-;30690:60;30668:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;30839:52;30862:4;30868:2;30872:3;30877:7;30886:4;30839:22;:52::i;:::-;30457:442;;;;;:::o;28915:524::-;29071:16;29132:3;:10;29113:8;:15;:29;29105:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29201:30;29248:8;:15;29234:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29201:63;;29282:9;29277:122;29301:8;:15;29297:1;:19;29277:122;;;29357:30;29367:8;29376:1;29367:11;;;;;;;;:::i;:::-;;;;;;;;29380:3;29384:1;29380:6;;;;;;;;:::i;:::-;;;;;;;;29357:9;:30::i;:::-;29338:13;29352:1;29338:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;29318:3;;;;:::i;:::-;;;29277:122;;;;29418:13;29411:20;;;28915:524;;;;:::o;7553:103::-;7133:12;:10;:12::i;:::-;7122:23;;:7;:5;:7::i;:::-;:23;;;7114:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7618:30:::1;7645:1;7618:18;:30::i;:::-;7553:103::o:0;43016:107::-;7133:12;:10;:12::i;:::-;7122:23;;:7;:5;:7::i;:::-;:23;;;7114:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43105:10:::1;43089:13;:26;;;;43016:107:::0;:::o;6902:87::-;6948:7;6975:6;;;;;;;;;;;6968:13;;6902:87;:::o;42207:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29512:155::-;29607:52;29626:12;:10;:12::i;:::-;29640:8;29650;29607:18;:52::i;:::-;29512:155;;:::o;43889:875::-;44048:6;44083:7;:5;:7::i;:::-;44070:20;;:9;:20;;;44067:131;;44133:13;;44115:15;:31;44107:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;44067:131;44238:7;;;;;;;;;;;44224:21;;:10;:21;;;44216:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;44315:6;44311:351;44331:3;:10;44327:1;:14;44311:351;;;44381:14;;44371:3;44375:1;44371:6;;;;;;;;:::i;:::-;;;;;;;;:24;:52;;;;44409:14;;44399:3;44403:1;44399:6;;;;;;;;:::i;:::-;;;;;;;;:24;44371:52;44363:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;44511:6;44518:1;44511:9;;;;;;;;:::i;:::-;;;;;;;;44495:12;;:25;;;;;;;:::i;:::-;;;;;;;;44559:3;44543:12;;:19;;44535:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44619:31;44625:4;44631:1;44634:6;44641:1;44634:9;;;;;;;;:::i;:::-;;;;;;;;44619:31;;;;;;;;;;;;;;;;;:5;:31::i;:::-;44343:3;;;;;:::i;:::-;;;;44311:351;;;;44686:69;44672:84;;43889:875;;;;;;;;:::o;45910:654::-;7133:12;:10;:12::i;:::-;7122:23;;:7;:5;:7::i;:::-;:23;;;7114:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46017:6:::1;46013:544;46033:9;:16;46029:1;:20;46013:544;;;46095:1;46079:9;46089:1;46079:12;;;;;;;;:::i;:::-;;;;;;;;:17;:38;;;;46116:1;46100:9;46110:1;46100:12;;;;;;;;:::i;:::-;;;;;;;;:17;46079:38;46071:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;46251:1;46235:9;46245:1;46235:12;;;;;;;;:::i;:::-;;;;;;;;:17;46232:150;;;46282:7;;;;;;;;;;;46273:34;;;46316:4;46323:7;:5;:7::i;:::-;46332:14;;46348:8;46357:1;46348:11;;;;;;;;:::i;:::-;;;;;;;;46273:93;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46232:150;46415:1;46399:9;46409:1;46399:12;;;;;;;;:::i;:::-;;;;;;;;:17;46396:150;;;46446:7;;;;;;;;;;;46437:34;;;46480:4;46487:7;:5;:7::i;:::-;46496:14;;46512:8;46521:1;46512:11;;;;;;;;:::i;:::-;;;;;;;;46437:93;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46396:150;46051:3;;;;;:::i;:::-;;;;46013:544;;;;45910:654:::0;;:::o;29739:168::-;29838:4;29862:18;:27;29881:7;29862:27;;;;;;;;;;;;;;;:37;29890:8;29862:37;;;;;;;;;;;;;;;;;;;;;;;;;29855:44;;29739:168;;;;:::o;43131:750::-;43265:6;43300:7;:5;:7::i;:::-;43287:20;;:9;:20;;;43284:131;;43350:13;;43332:15;:31;43324:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;43284:131;43447:7;;;;;;;;;;;43433:21;;:10;:21;;;43425:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;43534:14;;43528:2;:20;:44;;;;43558:14;;43552:2;:20;43528:44;43520:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;43655:5;43639:12;;:21;;;;;;;:::i;:::-;;;;;;;;43695:3;43679:12;;:19;;43671:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43751:27;43757:4;43763:1;43766:5;43751:27;;;;;;;;;;;;;;;;;:5;:27::i;:::-;43803:69;43789:84;;43131:750;;;;;;;;:::o;29979:401::-;30195:12;:10;:12::i;:::-;30187:20;;:4;:20;;;:60;;;;30211:36;30228:4;30234:12;:10;:12::i;:::-;30211:16;:36::i;:::-;30187:60;30165:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;30327:45;30345:4;30351:2;30355;30359:6;30367:4;30327:17;:45::i;:::-;29979:401;;;;;:::o;7811:201::-;7133:12;:10;:12::i;:::-;7122:23;;:7;:5;:7::i;:::-;:23;;;7114:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7920:1:::1;7900:22;;:8;:22;;;;7892:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7976:28;7995:8;7976:18;:28::i;:::-;7811:201:::0;:::o;783:1912::-;841:13;886:1;871:4;:11;:16;867:31;;;889:9;;;;;;;;;;;;;;;;867:31;950:19;972:12;;;;;;;;;;;;;;;;;950:34;;1036:18;1082:1;1077;1063:4;:11;:15;;;;:::i;:::-;1062:21;;;;:::i;:::-;1057:1;:27;;;;:::i;:::-;1036:48;;1167:20;1214:2;1201:10;:15;;;;:::i;:::-;1190:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1167:50;;1314:10;1306:6;1299:26;1409:1;1402:5;1398:13;1468:4;1519;1513:11;1504:7;1500:25;1615:2;1607:6;1603:15;1688:754;1707:6;1698:7;1695:19;1688:754;;;1807:1;1798:7;1794:15;1783:26;;1846:7;1840:14;1972:4;1964:5;1960:2;1956:14;1952:25;1942:8;1938:40;1932:47;1921:9;1913:67;2026:1;2015:9;2011:17;1998:30;;2105:4;2097:5;2093:2;2089:14;2085:25;2075:8;2071:40;2065:47;2054:9;2046:67;2159:1;2148:9;2144:17;2131:30;;2238:4;2230:5;2227:1;2222:14;2218:25;2208:8;2204:40;2198:47;2187:9;2179:67;2292:1;2281:9;2277:17;2264:30;;2371:4;2363:5;2351:25;2341:8;2337:40;2331:47;2320:9;2312:67;2425:1;2414:9;2410:17;2397:30;;1731:711;1688:754;;;2515:1;2508:4;2502:11;2498:19;2536:1;2531:54;;;;2604:1;2599:52;;;;2491:160;;2531:54;2575:6;2570:3;2566:16;2562:1;2551:9;2547:17;2540:43;2531:54;;2599:52;2643:4;2638:3;2634:14;2630:1;2619:9;2615:17;2608:41;2491:160;;1239:1423;;;;2681:6;2674:13;;;;;783:1912;;;;:::o;21336:223::-;21438:4;21477:34;21462:49;;;:11;:49;;;;:89;;;;21515:36;21539:11;21515:23;:36::i;:::-;21462:89;21455:96;;21336:223;;;:::o;5626:98::-;5679:7;5706:10;5699:17;;5626:98;:::o;32541:1074::-;32768:7;:14;32754:3;:10;:28;32746:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32860:1;32846:16;;:2;:16;;;;32838:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32917:16;32936:12;:10;:12::i;:::-;32917:31;;32961:60;32982:8;32992:4;32998:2;33002:3;33007:7;33016:4;32961:20;:60::i;:::-;33039:9;33034:421;33058:3;:10;33054:1;:14;33034:421;;;33090:10;33103:3;33107:1;33103:6;;;;;;;;:::i;:::-;;;;;;;;33090:19;;33124:14;33141:7;33149:1;33141:10;;;;;;;;:::i;:::-;;;;;;;;33124:27;;33168:19;33190:9;:13;33200:2;33190:13;;;;;;;;;;;:19;33204:4;33190:19;;;;;;;;;;;;;;;;33168:41;;33247:6;33232:11;:21;;33224:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33380:6;33366:11;:20;33344:9;:13;33354:2;33344:13;;;;;;;;;;;:19;33358:4;33344:19;;;;;;;;;;;;;;;:42;;;;33437:6;33416:9;:13;33426:2;33416:13;;;;;;;;;;;:17;33430:2;33416:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33075:380;;;33070:3;;;;:::i;:::-;;;33034:421;;;;33502:2;33472:47;;33496:4;33472:47;;33486:8;33472:47;;;33506:3;33511:7;33472:47;;;;;;;:::i;:::-;;;;;;;;33532:75;33568:8;33578:4;33584:2;33588:3;33593:7;33602:4;33532:35;:75::i;:::-;32735:880;32541:1074;;;;;:::o;8172:191::-;8246:16;8265:6;;;;;;;;;;;8246:25;;8291:8;8282:6;;:17;;;;;;;;;;;;;;;;;;8346:8;8315:40;;8336:8;8315:40;;;;;;;;;;;;8235:128;8172:191;:::o;38727:331::-;38882:8;38873:17;;:5;:17;;;;38865:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38985:8;38947:18;:25;38966:5;38947:25;;;;;;;;;;;;;;;:35;38973:8;38947:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39031:8;39009:41;;39024:5;39009:41;;;39041:8;39009:41;;;;;;:::i;:::-;;;;;;;;38727:331;;;:::o;34933:569::-;35100:1;35086:16;;:2;:16;;;;35078:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35153:16;35172:12;:10;:12::i;:::-;35153:31;;35197:102;35218:8;35236:1;35240:2;35244:21;35262:2;35244:17;:21::i;:::-;35267:25;35285:6;35267:17;:25::i;:::-;35294:4;35197:20;:102::i;:::-;35333:6;35312:9;:13;35322:2;35312:13;;;;;;;;;;;:17;35326:2;35312:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;35392:2;35355:52;;35388:1;35355:52;;35370:8;35355:52;;;35396:2;35400:6;35355:52;;;;;;;:::i;:::-;;;;;;;;35420:74;35451:8;35469:1;35473:2;35477;35481:6;35489:4;35420:30;:74::i;:::-;35067:435;34933:569;;;;:::o;31363:820::-;31565:1;31551:16;;:2;:16;;;;31543:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31622:16;31641:12;:10;:12::i;:::-;31622:31;;31666:96;31687:8;31697:4;31703:2;31707:21;31725:2;31707:17;:21::i;:::-;31730:25;31748:6;31730:17;:25::i;:::-;31757:4;31666:20;:96::i;:::-;31775:19;31797:9;:13;31807:2;31797:13;;;;;;;;;;;:19;31811:4;31797:19;;;;;;;;;;;;;;;;31775:41;;31850:6;31835:11;:21;;31827:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31975:6;31961:11;:20;31939:9;:13;31949:2;31939:13;;;;;;;;;;;:19;31953:4;31939:19;;;;;;;;;;;;;;;:42;;;;32024:6;32003:9;:13;32013:2;32003:13;;;;;;;;;;;:17;32017:2;32003:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32079:2;32048:46;;32073:4;32048:46;;32063:8;32048:46;;;32083:2;32087:6;32048:46;;;;;;;:::i;:::-;;;;;;;;32107:68;32138:8;32148:4;32154:2;32158;32162:6;32170:4;32107:30;:68::i;:::-;31532:651;;31363:820;;;;;:::o;27541:310::-;27643:4;27695:26;27680:41;;;:11;:41;;;;:110;;;;27753:37;27738:52;;;:11;:52;;;;27680:110;:163;;;;27807:36;27831:11;27807:23;:36::i;:::-;27680:163;27660:183;;27541:310;;;:::o;40014:221::-;;;;;;;:::o;40995:813::-;41235:15;:2;:13;;;:15::i;:::-;41231:570;;;41288:2;41271:43;;;41315:8;41325:4;41331:3;41336:7;41345:4;41271:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41267:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41663:6;41656:14;;;;;;;;;;;:::i;:::-;;;;;;;;41267:523;;;41712:62;;;;;;;;;;:::i;:::-;;;;;;;;41267:523;41444:48;;;41432:60;;;:8;:60;;;;41428:159;;41517:50;;;;;;;;;;:::i;:::-;;;;;;;;41428:159;41351:251;41231:570;40995:813;;;;;;:::o;41816:198::-;41882:16;41911:22;41950:1;41936:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41911:41;;41974:7;41963:5;41969:1;41963:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;42001:5;41994:12;;;41816:198;;;:::o;40243:744::-;40458:15;:2;:13;;;:15::i;:::-;40454:526;;;40511:2;40494:38;;;40533:8;40543:4;40549:2;40553:6;40561:4;40494:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40490:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40842:6;40835:14;;;;;;;;;;;:::i;:::-;;;;;;;;40490:479;;;40891:62;;;;;;;;;;:::i;:::-;;;;;;;;40490:479;40628:43;;;40616:55;;;:8;:55;;;;40612:154;;40696:50;;;;;;;;;;:::i;:::-;;;;;;;;40612:154;40567:214;40454:526;40243:744;;;;;;:::o;18303:157::-;18388:4;18427:25;18412:40;;;:11;:40;;;;18405:47;;18303:157;;;:::o;9190:387::-;9250:4;9458:12;9525:7;9513:20;9505:28;;9568:1;9561:4;:8;9554:15;;;9190:387;;;:::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:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:552::-;3343:8;3353:6;3403:3;3396:4;3388:6;3384:17;3380:27;3370:122;;3411:79;;:::i;:::-;3370:122;3524:6;3511:20;3501:30;;3554:18;3546:6;3543:30;3540:117;;;3576:79;;:::i;:::-;3540:117;3690:4;3682:6;3678:17;3666:29;;3744:3;3736:4;3728:6;3724:17;3714:8;3710:32;3707:41;3704:128;;;3751:79;;:::i;:::-;3704:128;3286:552;;;;;:::o;3857:338::-;3912:5;3961:3;3954:4;3946:6;3942:17;3938:27;3928:122;;3969:79;;:::i;:::-;3928:122;4086:6;4073:20;4111:78;4185:3;4177:6;4170:4;4162:6;4158:17;4111:78;:::i;:::-;4102:87;;3918:277;3857:338;;;;:::o;4201:139::-;4247:5;4285:6;4272:20;4263:29;;4301:33;4328:5;4301:33;:::i;:::-;4201:139;;;;:::o;4346:329::-;4405:6;4454:2;4442:9;4433:7;4429:23;4425:32;4422:119;;;4460:79;;:::i;:::-;4422:119;4580:1;4605:53;4650:7;4641:6;4630:9;4626:22;4605:53;:::i;:::-;4595:63;;4551:117;4346:329;;;;:::o;4681:474::-;4749:6;4757;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;5059:2;5085:53;5130:7;5121:6;5110:9;5106:22;5085:53;:::i;:::-;5075:63;;5030:118;4681:474;;;;;:::o;5161:1529::-;5317:6;5325;5333;5341;5349;5357;5406:3;5394:9;5385:7;5381:23;5377:33;5374:120;;;5413:79;;:::i;:::-;5374:120;5533:1;5558:53;5603:7;5594:6;5583:9;5579:22;5558:53;:::i;:::-;5548:63;;5504:117;5660:2;5686:53;5731:7;5722:6;5711:9;5707:22;5686:53;:::i;:::-;5676:63;;5631:118;5816:2;5805:9;5801:18;5788:32;5847:18;5839:6;5836:30;5833:117;;;5869:79;;:::i;:::-;5833:117;5974:78;6044:7;6035:6;6024:9;6020:22;5974:78;:::i;:::-;5964:88;;5759:303;6129:2;6118:9;6114:18;6101:32;6160:18;6152:6;6149:30;6146:117;;;6182:79;;:::i;:::-;6146:117;6287:78;6357:7;6348:6;6337:9;6333:22;6287:78;:::i;:::-;6277:88;;6072:303;6442:3;6431:9;6427:19;6414:33;6474:18;6466:6;6463:30;6460:117;;;6496:79;;:::i;:::-;6460:117;6609:64;6665:7;6656:6;6645:9;6641:22;6609:64;:::i;:::-;6591:82;;;;6385:298;5161:1529;;;;;;;;:::o;6696:1509::-;6850:6;6858;6866;6874;6882;6931:3;6919:9;6910:7;6906:23;6902:33;6899:120;;;6938:79;;:::i;:::-;6899:120;7058:1;7083:53;7128:7;7119:6;7108:9;7104:22;7083:53;:::i;:::-;7073:63;;7029:117;7185:2;7211:53;7256:7;7247:6;7236:9;7232:22;7211:53;:::i;:::-;7201:63;;7156:118;7341:2;7330:9;7326:18;7313:32;7372:18;7364:6;7361:30;7358:117;;;7394:79;;:::i;:::-;7358:117;7499:78;7569:7;7560:6;7549:9;7545:22;7499:78;:::i;:::-;7489:88;;7284:303;7654:2;7643:9;7639:18;7626:32;7685:18;7677:6;7674:30;7671:117;;;7707:79;;:::i;:::-;7671:117;7812:78;7882:7;7873:6;7862:9;7858:22;7812:78;:::i;:::-;7802:88;;7597:303;7967:3;7956:9;7952:19;7939:33;7999:18;7991:6;7988:30;7985:117;;;8021:79;;:::i;:::-;7985:117;8126:62;8180:7;8171:6;8160:9;8156:22;8126:62;:::i;:::-;8116:72;;7910:288;6696:1509;;;;;;;;:::o;8211:1109::-;8317:6;8325;8333;8341;8349;8357;8406:3;8394:9;8385:7;8381:23;8377:33;8374:120;;;8413:79;;:::i;:::-;8374:120;8533:1;8558:53;8603:7;8594:6;8583:9;8579:22;8558:53;:::i;:::-;8548:63;;8504:117;8660:2;8686:53;8731:7;8722:6;8711:9;8707:22;8686:53;:::i;:::-;8676:63;;8631:118;8788:2;8814:53;8859:7;8850:6;8839:9;8835:22;8814:53;:::i;:::-;8804:63;;8759:118;8916:2;8942:53;8987:7;8978:6;8967:9;8963:22;8942:53;:::i;:::-;8932:63;;8887:118;9072:3;9061:9;9057:19;9044:33;9104:18;9096:6;9093:30;9090:117;;;9126:79;;:::i;:::-;9090:117;9239:64;9295:7;9286:6;9275:9;9271:22;9239:64;:::i;:::-;9221:82;;;;9015:298;8211:1109;;;;;;;;:::o;9326:1089::-;9430:6;9438;9446;9454;9462;9511:3;9499:9;9490:7;9486:23;9482:33;9479:120;;;9518:79;;:::i;:::-;9479:120;9638:1;9663:53;9708:7;9699:6;9688:9;9684:22;9663:53;:::i;:::-;9653:63;;9609:117;9765:2;9791:53;9836:7;9827:6;9816:9;9812:22;9791:53;:::i;:::-;9781:63;;9736:118;9893:2;9919:53;9964:7;9955:6;9944:9;9940:22;9919:53;:::i;:::-;9909:63;;9864:118;10021:2;10047:53;10092:7;10083:6;10072:9;10068:22;10047:53;:::i;:::-;10037:63;;9992:118;10177:3;10166:9;10162:19;10149:33;10209:18;10201:6;10198:30;10195:117;;;10231:79;;:::i;:::-;10195:117;10336:62;10390:7;10381:6;10370:9;10366:22;10336:62;:::i;:::-;10326:72;;10120:288;9326:1089;;;;;;;;:::o;10421:468::-;10486:6;10494;10543:2;10531:9;10522:7;10518:23;10514:32;10511:119;;;10549:79;;:::i;:::-;10511:119;10669:1;10694:53;10739:7;10730:6;10719:9;10715:22;10694:53;:::i;:::-;10684:63;;10640:117;10796:2;10822:50;10864:7;10855:6;10844:9;10840:22;10822:50;:::i;:::-;10812:60;;10767:115;10421:468;;;;;:::o;10895:474::-;10963:6;10971;11020:2;11008:9;10999:7;10995:23;10991:32;10988:119;;;11026:79;;:::i;:::-;10988:119;11146:1;11171:53;11216:7;11207:6;11196:9;11192:22;11171:53;:::i;:::-;11161:63;;11117:117;11273:2;11299:53;11344:7;11335:6;11324:9;11320:22;11299:53;:::i;:::-;11289:63;;11244:118;10895:474;;;;;:::o;11375:894::-;11493:6;11501;11550:2;11538:9;11529:7;11525:23;11521:32;11518:119;;;11556:79;;:::i;:::-;11518:119;11704:1;11693:9;11689:17;11676:31;11734:18;11726:6;11723:30;11720:117;;;11756:79;;:::i;:::-;11720:117;11861:78;11931:7;11922:6;11911:9;11907:22;11861:78;:::i;:::-;11851:88;;11647:302;12016:2;12005:9;12001:18;11988:32;12047:18;12039:6;12036:30;12033:117;;;12069:79;;:::i;:::-;12033:117;12174:78;12244:7;12235:6;12224:9;12220:22;12174:78;:::i;:::-;12164:88;;11959:303;11375:894;;;;;:::o;12275:::-;12393:6;12401;12450:2;12438:9;12429:7;12425:23;12421:32;12418:119;;;12456:79;;:::i;:::-;12418:119;12604:1;12593:9;12589:17;12576:31;12634:18;12626:6;12623:30;12620:117;;;12656:79;;:::i;:::-;12620:117;12761:78;12831:7;12822:6;12811:9;12807:22;12761:78;:::i;:::-;12751:88;;12547:302;12916:2;12905:9;12901:18;12888:32;12947:18;12939:6;12936:30;12933:117;;;12969:79;;:::i;:::-;12933:117;13074:78;13144:7;13135:6;13124:9;13120:22;13074:78;:::i;:::-;13064:88;;12859:303;12275:894;;;;;:::o;13175:327::-;13233:6;13282:2;13270:9;13261:7;13257:23;13253:32;13250:119;;;13288:79;;:::i;:::-;13250:119;13408:1;13433:52;13477:7;13468:6;13457:9;13453:22;13433:52;:::i;:::-;13423:62;;13379:116;13175:327;;;;:::o;13508:349::-;13577:6;13626:2;13614:9;13605:7;13601:23;13597:32;13594:119;;;13632:79;;:::i;:::-;13594:119;13752:1;13777:63;13832:7;13823:6;13812:9;13808:22;13777:63;:::i;:::-;13767:73;;13723:127;13508:349;;;;:::o;13863:329::-;13922:6;13971:2;13959:9;13950:7;13946:23;13942:32;13939:119;;;13977:79;;:::i;:::-;13939:119;14097:1;14122:53;14167:7;14158:6;14147:9;14143:22;14122:53;:::i;:::-;14112:63;;14068:117;13863:329;;;;:::o;14198:179::-;14267:10;14288:46;14330:3;14322:6;14288:46;:::i;:::-;14366:4;14361:3;14357:14;14343:28;;14198:179;;;;:::o;14383:118::-;14470:24;14488:5;14470:24;:::i;:::-;14465:3;14458:37;14383:118;;:::o;14537:732::-;14656:3;14685:54;14733:5;14685:54;:::i;:::-;14755:86;14834:6;14829:3;14755:86;:::i;:::-;14748:93;;14865:56;14915:5;14865:56;:::i;:::-;14944:7;14975:1;14960:284;14985:6;14982:1;14979:13;14960:284;;;15061:6;15055:13;15088:63;15147:3;15132:13;15088:63;:::i;:::-;15081:70;;15174:60;15227:6;15174:60;:::i;:::-;15164:70;;15020:224;15007:1;15004;15000:9;14995:14;;14960:284;;;14964:14;15260:3;15253:10;;14661:608;;;14537:732;;;;:::o;15275:109::-;15356:21;15371:5;15356:21;:::i;:::-;15351:3;15344:34;15275:109;;:::o;15390:115::-;15475:23;15492:5;15475:23;:::i;:::-;15470:3;15463:36;15390:115;;:::o;15511:360::-;15597:3;15625:38;15657:5;15625:38;:::i;:::-;15679:70;15742:6;15737:3;15679:70;:::i;:::-;15672:77;;15758:52;15803:6;15798:3;15791:4;15784:5;15780:16;15758:52;:::i;:::-;15835:29;15857:6;15835:29;:::i;:::-;15830:3;15826:39;15819:46;;15601:270;15511:360;;;;:::o;15877:364::-;15965:3;15993:39;16026:5;15993:39;:::i;:::-;16048:71;16112:6;16107:3;16048:71;:::i;:::-;16041:78;;16128:52;16173:6;16168:3;16161:4;16154:5;16150:16;16128:52;:::i;:::-;16205:29;16227:6;16205:29;:::i;:::-;16200:3;16196:39;16189:46;;15969:272;15877:364;;;;:::o;16247:377::-;16353:3;16381:39;16414:5;16381:39;:::i;:::-;16436:89;16518:6;16513:3;16436:89;:::i;:::-;16429:96;;16534:52;16579:6;16574:3;16567:4;16560:5;16556:16;16534:52;:::i;:::-;16611:6;16606:3;16602:16;16595:23;;16357:267;16247:377;;;;:::o;16630:366::-;16772:3;16793:67;16857:2;16852:3;16793:67;:::i;:::-;16786:74;;16869:93;16958:3;16869:93;:::i;:::-;16987:2;16982:3;16978:12;16971:19;;16630:366;;;:::o;17002:::-;17144:3;17165:67;17229:2;17224:3;17165:67;:::i;:::-;17158:74;;17241:93;17330:3;17241:93;:::i;:::-;17359:2;17354:3;17350:12;17343:19;;17002:366;;;:::o;17374:::-;17516:3;17537:67;17601:2;17596:3;17537:67;:::i;:::-;17530:74;;17613:93;17702:3;17613:93;:::i;:::-;17731:2;17726:3;17722:12;17715:19;;17374:366;;;:::o;17746:::-;17888:3;17909:67;17973:2;17968:3;17909:67;:::i;:::-;17902:74;;17985:93;18074:3;17985:93;:::i;:::-;18103:2;18098:3;18094:12;18087:19;;17746:366;;;:::o;18118:::-;18260:3;18281:67;18345:2;18340:3;18281:67;:::i;:::-;18274:74;;18357:93;18446:3;18357:93;:::i;:::-;18475:2;18470:3;18466:12;18459:19;;18118:366;;;:::o;18490:::-;18632:3;18653:67;18717:2;18712:3;18653:67;:::i;:::-;18646:74;;18729:93;18818:3;18729:93;:::i;:::-;18847:2;18842:3;18838:12;18831:19;;18490:366;;;:::o;18862:::-;19004:3;19025:67;19089:2;19084:3;19025:67;:::i;:::-;19018:74;;19101:93;19190:3;19101:93;:::i;:::-;19219:2;19214:3;19210:12;19203:19;;18862:366;;;:::o;19234:363::-;19375:3;19396:65;19459:1;19454:3;19396:65;:::i;:::-;19389:72;;19470:93;19559:3;19470:93;:::i;:::-;19588:2;19583:3;19579:12;19572:19;;19234:363;;;:::o;19603:366::-;19745:3;19766:67;19830:2;19825:3;19766:67;:::i;:::-;19759:74;;19842:93;19931:3;19842:93;:::i;:::-;19960:2;19955:3;19951:12;19944:19;;19603:366;;;:::o;19975:404::-;20135:3;20156:86;20238:3;20233;20156:86;:::i;:::-;20149:93;;20251;20340:3;20251:93;:::i;:::-;20369:3;20364;20360:13;20353:20;;19975:404;;;:::o;20385:366::-;20527:3;20548:67;20612:2;20607:3;20548:67;:::i;:::-;20541:74;;20624:93;20713:3;20624:93;:::i;:::-;20742:2;20737:3;20733:12;20726:19;;20385:366;;;:::o;20757:::-;20899:3;20920:67;20984:2;20979:3;20920:67;:::i;:::-;20913:74;;20996:93;21085:3;20996:93;:::i;:::-;21114:2;21109:3;21105:12;21098:19;;20757:366;;;:::o;21129:::-;21271:3;21292:67;21356:2;21351:3;21292:67;:::i;:::-;21285:74;;21368:93;21457:3;21368:93;:::i;:::-;21486:2;21481:3;21477:12;21470:19;;21129:366;;;:::o;21501:400::-;21661:3;21682:84;21764:1;21759:3;21682:84;:::i;:::-;21675:91;;21775:93;21864:3;21775:93;:::i;:::-;21893:1;21888:3;21884:11;21877:18;;21501:400;;;:::o;21907:366::-;22049:3;22070:67;22134:2;22129:3;22070:67;:::i;:::-;22063:74;;22146:93;22235:3;22146:93;:::i;:::-;22264:2;22259:3;22255:12;22248:19;;21907:366;;;:::o;22279:::-;22421:3;22442:67;22506:2;22501:3;22442:67;:::i;:::-;22435:74;;22518:93;22607:3;22518:93;:::i;:::-;22636:2;22631:3;22627:12;22620:19;;22279:366;;;:::o;22651:::-;22793:3;22814:67;22878:2;22873:3;22814:67;:::i;:::-;22807:74;;22890:93;22979:3;22890:93;:::i;:::-;23008:2;23003:3;22999:12;22992:19;;22651:366;;;:::o;23023:::-;23165:3;23186:67;23250:2;23245:3;23186:67;:::i;:::-;23179:74;;23262:93;23351:3;23262:93;:::i;:::-;23380:2;23375:3;23371:12;23364:19;;23023:366;;;:::o;23395:::-;23537:3;23558:67;23622:2;23617:3;23558:67;:::i;:::-;23551:74;;23634:93;23723:3;23634:93;:::i;:::-;23752:2;23747:3;23743:12;23736:19;;23395:366;;;:::o;23767:402::-;23927:3;23948:85;24030:2;24025:3;23948:85;:::i;:::-;23941:92;;24042:93;24131:3;24042:93;:::i;:::-;24160:2;24155:3;24151:12;24144:19;;23767:402;;;:::o;24175:366::-;24317:3;24338:67;24402:2;24397:3;24338:67;:::i;:::-;24331:74;;24414:93;24503:3;24414:93;:::i;:::-;24532:2;24527:3;24523:12;24516:19;;24175:366;;;:::o;24547:::-;24689:3;24710:67;24774:2;24769:3;24710:67;:::i;:::-;24703:74;;24786:93;24875:3;24786:93;:::i;:::-;24904:2;24899:3;24895:12;24888:19;;24547:366;;;:::o;24919:::-;25061:3;25082:67;25146:2;25141:3;25082:67;:::i;:::-;25075:74;;25158:93;25247:3;25158:93;:::i;:::-;25276:2;25271:3;25267:12;25260:19;;24919:366;;;:::o;25291:::-;25433:3;25454:67;25518:2;25513:3;25454:67;:::i;:::-;25447:74;;25530:93;25619:3;25530:93;:::i;:::-;25648:2;25643:3;25639:12;25632:19;;25291:366;;;:::o;25663:108::-;25740:24;25758:5;25740:24;:::i;:::-;25735:3;25728:37;25663:108;;:::o;25777:118::-;25864:24;25882:5;25864:24;:::i;:::-;25859:3;25852:37;25777:118;;:::o;25901:807::-;26235:3;26257:148;26401:3;26257:148;:::i;:::-;26250:155;;26422:95;26513:3;26504:6;26422:95;:::i;:::-;26415:102;;26534:148;26678:3;26534:148;:::i;:::-;26527:155;;26699:3;26692:10;;25901:807;;;;:::o;26714:541::-;26947:3;26969:148;27113:3;26969:148;:::i;:::-;26962:155;;27134:95;27225:3;27216:6;27134:95;:::i;:::-;27127:102;;27246:3;27239:10;;26714:541;;;;:::o;27261:222::-;27354:4;27392:2;27381:9;27377:18;27369:26;;27405:71;27473:1;27462:9;27458:17;27449:6;27405:71;:::i;:::-;27261:222;;;;:::o;27489:1053::-;27812:4;27850:3;27839:9;27835:19;27827:27;;27864:71;27932:1;27921:9;27917:17;27908:6;27864:71;:::i;:::-;27945:72;28013:2;28002:9;27998:18;27989:6;27945:72;:::i;:::-;28064:9;28058:4;28054:20;28049:2;28038:9;28034:18;28027:48;28092:108;28195:4;28186:6;28092:108;:::i;:::-;28084:116;;28247:9;28241:4;28237:20;28232:2;28221:9;28217:18;28210:48;28275:108;28378:4;28369:6;28275:108;:::i;:::-;28267:116;;28431:9;28425:4;28421:20;28415:3;28404:9;28400:19;28393:49;28459:76;28530:4;28521:6;28459:76;:::i;:::-;28451:84;;27489:1053;;;;;;;;:::o;28548:751::-;28771:4;28809:3;28798:9;28794:19;28786:27;;28823:71;28891:1;28880:9;28876:17;28867:6;28823:71;:::i;:::-;28904:72;28972:2;28961:9;28957:18;28948:6;28904:72;:::i;:::-;28986;29054:2;29043:9;29039:18;29030:6;28986:72;:::i;:::-;29068;29136:2;29125:9;29121:18;29112:6;29068:72;:::i;:::-;29188:9;29182:4;29178:20;29172:3;29161:9;29157:19;29150:49;29216:76;29287:4;29278:6;29216:76;:::i;:::-;29208:84;;28548:751;;;;;;;;:::o;29305:859::-;29582:4;29620:3;29609:9;29605:19;29597:27;;29634:71;29702:1;29691:9;29687:17;29678:6;29634:71;:::i;:::-;29715:72;29783:2;29772:9;29768:18;29759:6;29715:72;:::i;:::-;29797;29865:2;29854:9;29850:18;29841:6;29797:72;:::i;:::-;29879;29947:2;29936:9;29932:18;29923:6;29879:72;:::i;:::-;29999:9;29993:4;29989:20;29983:3;29972:9;29968:19;29961:49;30027:130;30152:4;30027:130;:::i;:::-;30019:138;;29305:859;;;;;;;:::o;30170:373::-;30313:4;30351:2;30340:9;30336:18;30328:26;;30400:9;30394:4;30390:20;30386:1;30375:9;30371:17;30364:47;30428:108;30531:4;30522:6;30428:108;:::i;:::-;30420:116;;30170:373;;;;:::o;30549:634::-;30770:4;30808:2;30797:9;30793:18;30785:26;;30857:9;30851:4;30847:20;30843:1;30832:9;30828:17;30821:47;30885:108;30988:4;30979:6;30885:108;:::i;:::-;30877:116;;31040:9;31034:4;31030:20;31025:2;31014:9;31010:18;31003:48;31068:108;31171:4;31162:6;31068:108;:::i;:::-;31060:116;;30549:634;;;;;:::o;31189:210::-;31276:4;31314:2;31303:9;31299:18;31291:26;;31327:65;31389:1;31378:9;31374:17;31365:6;31327:65;:::i;:::-;31189:210;;;;:::o;31405:218::-;31496:4;31534:2;31523:9;31519:18;31511:26;;31547:69;31613:1;31602:9;31598:17;31589:6;31547:69;:::i;:::-;31405:218;;;;:::o;31629:313::-;31742:4;31780:2;31769:9;31765:18;31757:26;;31829:9;31823:4;31819:20;31815:1;31804:9;31800:17;31793:47;31857:78;31930:4;31921:6;31857:78;:::i;:::-;31849:86;;31629:313;;;;:::o;31948:419::-;32114:4;32152:2;32141:9;32137:18;32129:26;;32201:9;32195:4;32191:20;32187:1;32176:9;32172:17;32165:47;32229:131;32355:4;32229:131;:::i;:::-;32221:139;;31948:419;;;:::o;32373:::-;32539:4;32577:2;32566:9;32562:18;32554:26;;32626:9;32620:4;32616:20;32612:1;32601:9;32597:17;32590:47;32654:131;32780:4;32654:131;:::i;:::-;32646:139;;32373:419;;;:::o;32798:::-;32964:4;33002:2;32991:9;32987:18;32979:26;;33051:9;33045:4;33041:20;33037:1;33026:9;33022:17;33015:47;33079:131;33205:4;33079:131;:::i;:::-;33071:139;;32798:419;;;:::o;33223:::-;33389:4;33427:2;33416:9;33412:18;33404:26;;33476:9;33470:4;33466:20;33462:1;33451:9;33447:17;33440:47;33504:131;33630:4;33504:131;:::i;:::-;33496:139;;33223:419;;;:::o;33648:::-;33814:4;33852:2;33841:9;33837:18;33829:26;;33901:9;33895:4;33891:20;33887:1;33876:9;33872:17;33865:47;33929:131;34055:4;33929:131;:::i;:::-;33921:139;;33648:419;;;:::o;34073:::-;34239:4;34277:2;34266:9;34262:18;34254:26;;34326:9;34320:4;34316:20;34312:1;34301:9;34297:17;34290:47;34354:131;34480:4;34354:131;:::i;:::-;34346:139;;34073:419;;;:::o;34498:::-;34664:4;34702:2;34691:9;34687:18;34679:26;;34751:9;34745:4;34741:20;34737:1;34726:9;34722:17;34715:47;34779:131;34905:4;34779:131;:::i;:::-;34771:139;;34498:419;;;:::o;34923:::-;35089:4;35127:2;35116:9;35112:18;35104:26;;35176:9;35170:4;35166:20;35162:1;35151:9;35147:17;35140:47;35204:131;35330:4;35204:131;:::i;:::-;35196:139;;34923:419;;;:::o;35348:::-;35514:4;35552:2;35541:9;35537:18;35529:26;;35601:9;35595:4;35591:20;35587:1;35576:9;35572:17;35565:47;35629:131;35755:4;35629:131;:::i;:::-;35621:139;;35348:419;;;:::o;35773:::-;35939:4;35977:2;35966:9;35962:18;35954:26;;36026:9;36020:4;36016:20;36012:1;36001:9;35997:17;35990:47;36054:131;36180:4;36054:131;:::i;:::-;36046:139;;35773:419;;;:::o;36198:::-;36364:4;36402:2;36391:9;36387:18;36379:26;;36451:9;36445:4;36441:20;36437:1;36426:9;36422:17;36415:47;36479:131;36605:4;36479:131;:::i;:::-;36471:139;;36198:419;;;:::o;36623:::-;36789:4;36827:2;36816:9;36812:18;36804:26;;36876:9;36870:4;36866:20;36862:1;36851:9;36847:17;36840:47;36904:131;37030:4;36904:131;:::i;:::-;36896:139;;36623:419;;;:::o;37048:::-;37214:4;37252:2;37241:9;37237:18;37229:26;;37301:9;37295:4;37291:20;37287:1;37276:9;37272:17;37265:47;37329:131;37455:4;37329:131;:::i;:::-;37321:139;;37048:419;;;:::o;37473:::-;37639:4;37677:2;37666:9;37662:18;37654:26;;37726:9;37720:4;37716:20;37712:1;37701:9;37697:17;37690:47;37754:131;37880:4;37754:131;:::i;:::-;37746:139;;37473:419;;;:::o;37898:::-;38064:4;38102:2;38091:9;38087:18;38079:26;;38151:9;38145:4;38141:20;38137:1;38126:9;38122:17;38115:47;38179:131;38305:4;38179:131;:::i;:::-;38171:139;;37898:419;;;:::o;38323:::-;38489:4;38527:2;38516:9;38512:18;38504:26;;38576:9;38570:4;38566:20;38562:1;38551:9;38547:17;38540:47;38604:131;38730:4;38604:131;:::i;:::-;38596:139;;38323:419;;;:::o;38748:::-;38914:4;38952:2;38941:9;38937:18;38929:26;;39001:9;38995:4;38991:20;38987:1;38976:9;38972:17;38965:47;39029:131;39155:4;39029:131;:::i;:::-;39021:139;;38748:419;;;:::o;39173:::-;39339:4;39377:2;39366:9;39362:18;39354:26;;39426:9;39420:4;39416:20;39412:1;39401:9;39397:17;39390:47;39454:131;39580:4;39454:131;:::i;:::-;39446:139;;39173:419;;;:::o;39598:::-;39764:4;39802:2;39791:9;39787:18;39779:26;;39851:9;39845:4;39841:20;39837:1;39826:9;39822:17;39815:47;39879:131;40005:4;39879:131;:::i;:::-;39871:139;;39598:419;;;:::o;40023:::-;40189:4;40227:2;40216:9;40212:18;40204:26;;40276:9;40270:4;40266:20;40262:1;40251:9;40247:17;40240:47;40304:131;40430:4;40304:131;:::i;:::-;40296:139;;40023:419;;;:::o;40448:222::-;40541:4;40579:2;40568:9;40564:18;40556:26;;40592:71;40660:1;40649:9;40645:17;40636:6;40592:71;:::i;:::-;40448:222;;;;:::o;40676:332::-;40797:4;40835:2;40824:9;40820:18;40812:26;;40848:71;40916:1;40905:9;40901:17;40892:6;40848:71;:::i;:::-;40929:72;40997:2;40986:9;40982:18;40973:6;40929:72;:::i;:::-;40676:332;;;;;:::o;41014:129::-;41048:6;41075:20;;:::i;:::-;41065:30;;41104:33;41132:4;41124:6;41104:33;:::i;:::-;41014:129;;;:::o;41149:75::-;41182:6;41215:2;41209:9;41199:19;;41149:75;:::o;41230:311::-;41307:4;41397:18;41389:6;41386:30;41383:56;;;41419:18;;:::i;:::-;41383:56;41469:4;41461:6;41457:17;41449:25;;41529:4;41523;41519:15;41511:23;;41230:311;;;:::o;41547:::-;41624:4;41714:18;41706:6;41703:30;41700:56;;;41736:18;;:::i;:::-;41700:56;41786:4;41778:6;41774:17;41766:25;;41846:4;41840;41836:15;41828:23;;41547:311;;;:::o;41864:307::-;41925:4;42015:18;42007:6;42004:30;42001:56;;;42037:18;;:::i;:::-;42001:56;42075:29;42097:6;42075:29;:::i;:::-;42067:37;;42159:4;42153;42149:15;42141:23;;41864:307;;;:::o;42177:132::-;42244:4;42267:3;42259:11;;42297:4;42292:3;42288:14;42280:22;;42177:132;;;:::o;42315:114::-;42382:6;42416:5;42410:12;42400:22;;42315:114;;;:::o;42435:98::-;42486:6;42520:5;42514:12;42504:22;;42435:98;;;:::o;42539:99::-;42591:6;42625:5;42619:12;42609:22;;42539:99;;;:::o;42644:113::-;42714:4;42746;42741:3;42737:14;42729:22;;42644:113;;;:::o;42763:184::-;42862:11;42896:6;42891:3;42884:19;42936:4;42931:3;42927:14;42912:29;;42763:184;;;;:::o;42953:168::-;43036:11;43070:6;43065:3;43058:19;43110:4;43105:3;43101:14;43086:29;;42953:168;;;;:::o;43127:169::-;43211:11;43245:6;43240:3;43233:19;43285:4;43280:3;43276:14;43261:29;;43127:169;;;;:::o;43302:148::-;43404:11;43441:3;43426:18;;43302:148;;;;:::o;43456:305::-;43496:3;43515:20;43533:1;43515:20;:::i;:::-;43510:25;;43549:20;43567:1;43549:20;:::i;:::-;43544:25;;43703:1;43635:66;43631:74;43628:1;43625:81;43622:107;;;43709:18;;:::i;:::-;43622:107;43753:1;43750;43746:9;43739:16;;43456:305;;;;:::o;43767:185::-;43807:1;43824:20;43842:1;43824:20;:::i;:::-;43819:25;;43858:20;43876:1;43858:20;:::i;:::-;43853:25;;43897:1;43887:35;;43902:18;;:::i;:::-;43887:35;43944:1;43941;43937:9;43932:14;;43767:185;;;;:::o;43958:348::-;43998:7;44021:20;44039:1;44021:20;:::i;:::-;44016:25;;44055:20;44073:1;44055:20;:::i;:::-;44050:25;;44243:1;44175:66;44171:74;44168:1;44165:81;44160:1;44153:9;44146:17;44142:105;44139:131;;;44250:18;;:::i;:::-;44139:131;44298:1;44295;44291:9;44280:20;;43958:348;;;;:::o;44312:96::-;44349:7;44378:24;44396:5;44378:24;:::i;:::-;44367:35;;44312:96;;;:::o;44414:90::-;44448:7;44491:5;44484:13;44477:21;44466:32;;44414:90;;;:::o;44510:149::-;44546:7;44586:66;44579:5;44575:78;44564:89;;44510:149;;;:::o;44665:126::-;44702:7;44742:42;44735:5;44731:54;44720:65;;44665:126;;;:::o;44797:77::-;44834:7;44863:5;44852:16;;44797:77;;;:::o;44880:154::-;44964:6;44959:3;44954;44941:30;45026:1;45017:6;45012:3;45008:16;45001:27;44880:154;;;:::o;45040:307::-;45108:1;45118:113;45132:6;45129:1;45126:13;45118:113;;;45217:1;45212:3;45208:11;45202:18;45198:1;45193:3;45189:11;45182:39;45154:2;45151:1;45147:10;45142:15;;45118:113;;;45249:6;45246:1;45243:13;45240:101;;;45329:1;45320:6;45315:3;45311:16;45304:27;45240:101;45089:258;45040:307;;;:::o;45353:320::-;45397:6;45434:1;45428:4;45424:12;45414:22;;45481:1;45475:4;45471:12;45502:18;45492:81;;45558:4;45550:6;45546:17;45536:27;;45492:81;45620:2;45612:6;45609:14;45589:18;45586:38;45583:84;;;45639:18;;:::i;:::-;45583:84;45404:269;45353:320;;;:::o;45679:281::-;45762:27;45784:4;45762:27;:::i;:::-;45754:6;45750:40;45892:6;45880:10;45877:22;45856:18;45844:10;45841:34;45838:62;45835:88;;;45903:18;;:::i;:::-;45835:88;45943:10;45939:2;45932:22;45722:238;45679:281;;:::o;45966:233::-;46005:3;46028:24;46046:5;46028:24;:::i;:::-;46019:33;;46074:66;46067:5;46064:77;46061:103;;;46144:18;;:::i;:::-;46061:103;46191:1;46184:5;46180:13;46173:20;;45966:233;;;:::o;46205:180::-;46253:77;46250:1;46243:88;46350:4;46347:1;46340:15;46374:4;46371:1;46364:15;46391:180;46439:77;46436:1;46429:88;46536:4;46533:1;46526:15;46560:4;46557:1;46550:15;46577:180;46625:77;46622:1;46615:88;46722:4;46719:1;46712:15;46746:4;46743:1;46736:15;46763:180;46811:77;46808:1;46801:88;46908:4;46905:1;46898:15;46932:4;46929:1;46922:15;46949:180;46997:77;46994:1;46987:88;47094:4;47091:1;47084:15;47118:4;47115:1;47108:15;47135:183;47170:3;47208:1;47190:16;47187:23;47184:128;;;47246:1;47243;47240;47225:23;47268:34;47299:1;47293:8;47268:34;:::i;:::-;47261:41;;47184:128;47135:183;:::o;47324:117::-;47433:1;47430;47423:12;47447:117;47556:1;47553;47546:12;47570:117;47679:1;47676;47669:12;47693:117;47802:1;47799;47792:12;47816:117;47925:1;47922;47915:12;47939:117;48048:1;48045;48038:12;48062:102;48103:6;48154:2;48150:7;48145:2;48138:5;48134:14;48130:28;48120:38;;48062:102;;;:::o;48170:106::-;48214:8;48263:5;48258:3;48254:15;48233:36;;48170:106;;;:::o;48282:239::-;48422:34;48418:1;48410:6;48406:14;48399:58;48491:22;48486:2;48478:6;48474:15;48467:47;48282:239;:::o;48527:227::-;48667:34;48663:1;48655:6;48651:14;48644:58;48736:10;48731:2;48723:6;48719:15;48712:35;48527:227;:::o;48760:319::-;48900:34;48896:1;48888:6;48884:14;48877:58;48969:34;48964:2;48956:6;48952:15;48945:59;49038:33;49033:2;49025:6;49021:15;49014:58;48760:319;:::o;49085:230::-;49225:34;49221:1;49213:6;49209:14;49202:58;49294:13;49289:2;49281:6;49277:15;49270:38;49085:230;:::o;49321:225::-;49461:34;49457:1;49449:6;49445:14;49438:58;49530:8;49525:2;49517:6;49513:15;49506:33;49321:225;:::o;49552:222::-;49692:34;49688:1;49680:6;49676:14;49669:58;49761:5;49756:2;49748:6;49744:15;49737:30;49552:222;:::o;49780:228::-;49920:34;49916:1;49908:6;49904:14;49897:58;49989:11;49984:2;49976:6;49972:15;49965:36;49780:228;:::o;50014:152::-;50154:4;50150:1;50142:6;50138:14;50131:28;50014:152;:::o;50172:237::-;50312:34;50308:1;50300:6;50296:14;50289:58;50381:20;50376:2;50368:6;50364:15;50357:45;50172:237;:::o;50415:475::-;50555:66;50551:1;50543:6;50539:14;50532:90;50656:66;50651:2;50643:6;50639:15;50632:91;50757:66;50752:2;50744:6;50740:15;50733:91;50858:24;50853:2;50845:6;50841:15;50834:49;50415:475;:::o;50896:224::-;51036:34;51032:1;51024:6;51020:14;51013:58;51105:7;51100:2;51092:6;51088:15;51081:32;50896:224;:::o;51126:237::-;51266:34;51262:1;51254:6;51250:14;51243:58;51335:20;51330:2;51322:6;51318:15;51311:45;51126:237;:::o;51369:236::-;51509:34;51505:1;51497:6;51493:14;51486:58;51578:19;51573:2;51565:6;51561:15;51554:44;51369:236;:::o;51611:214::-;51751:66;51747:1;51739:6;51735:14;51728:90;51611:214;:::o;51831:238::-;51971:34;51967:1;51959:6;51955:14;51948:58;52040:21;52035:2;52027:6;52023:15;52016:46;51831:238;:::o;52075:229::-;52215:34;52211:1;52203:6;52199:14;52192:58;52284:12;52279:2;52271:6;52267:15;52260:37;52075:229;:::o;52310:239::-;52450:34;52446:1;52438:6;52434:14;52427:58;52519:22;52514:2;52506:6;52502:15;52495:47;52310:239;:::o;52555:182::-;52695:34;52691:1;52683:6;52679:14;52672:58;52555:182;:::o;52743:224::-;52883:34;52879:1;52871:6;52867:14;52860:58;52952:7;52947:2;52939:6;52935:15;52928:32;52743:224;:::o;52973:179::-;53113:31;53109:1;53101:6;53097:14;53090:55;52973:179;:::o;53158:228::-;53298:34;53294:1;53286:6;53282:14;53275:58;53367:11;53362:2;53354:6;53350:15;53343:36;53158:228;:::o;53392:::-;53532:34;53528:1;53520:6;53516:14;53509:58;53601:11;53596:2;53588:6;53584:15;53577:36;53392:228;:::o;53626:227::-;53766:34;53762:1;53754:6;53750:14;53743:58;53835:10;53830:2;53822:6;53818:15;53811:35;53626:227;:::o;53859:220::-;53999:34;53995:1;53987:6;53983:14;53976:58;54068:3;54063:2;54055:6;54051:15;54044:28;53859:220;:::o;54085:711::-;54124:3;54162:4;54144:16;54141:26;54138:39;;;54170:5;;54138:39;54199:20;;:::i;:::-;54274:1;54256:16;54252:24;54249:1;54243:4;54228:49;54307:4;54301:11;54406:16;54399:4;54391:6;54387:17;54384:39;54351:18;54343:6;54340:30;54324:113;54321:146;;;54452:5;;;;54321:146;54498:6;54492:4;54488:17;54534:3;54528:10;54561:18;54553:6;54550:30;54547:43;;;54583:5;;;;;;54547:43;54631:6;54624:4;54619:3;54615:14;54611:27;54690:1;54672:16;54668:24;54662:4;54658:35;54653:3;54650:44;54647:57;;;54697:5;;;;;;;54647:57;54714;54762:6;54756:4;54752:17;54744:6;54740:30;54734:4;54714:57;:::i;:::-;54787:3;54780:10;;54128:668;;;;;54085:711;;:::o;54802:122::-;54875:24;54893:5;54875:24;:::i;:::-;54868:5;54865:35;54855:63;;54914:1;54911;54904:12;54855:63;54802:122;:::o;54930:116::-;55000:21;55015:5;55000:21;:::i;:::-;54993:5;54990:32;54980:60;;55036:1;55033;55026:12;54980:60;54930:116;:::o;55052:120::-;55124:23;55141:5;55124:23;:::i;:::-;55117:5;55114:34;55104:62;;55162:1;55159;55152:12;55104:62;55052:120;:::o;55178:122::-;55251:24;55269:5;55251:24;:::i;:::-;55244:5;55241:35;55231:63;;55290:1;55287;55280:12;55231:63;55178:122;:::o
Swarm Source
ipfs://e17eb5f78ce53e1c6243186902e93e0b13d97229381b6e170d6afb1363e31444
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.