Polygon Sponsored slots available. Book your slot here!
Contract Overview
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xc8aea2c4625e0365609fed1cf6300078b6791a5bac99883d4195fa44a6639057 | 24262249 | 152 days 23 hrs ago | 0xb2f741262326b9585fd892139bb3018b271a6c8e | 0xcb34f8c36e8a67fdabca3264b8b6a3661921253c | 2.0021 MATIC |
[ Download CSV Export ]
Contract Name:
StormOfColors
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-01-03 */ // SPDX-License-Identifier: GPL-3.0 // File: contracts/Base64.sol pragma solidity ^0.8.0; /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides a function for encoding some bytes in base64 library Base64 { string internal constant TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE; // 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) {} { dataPtr := add(dataPtr, 3) // read 3 bytes let input := mload(dataPtr) // write 4 characters mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr( 6, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, 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; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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.1 (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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @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, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/StormOfColors.sol pragma solidity >=0.7.0 <0.9.0; contract StormOfColors is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI = "ipfs://Qmb6uvUcMy1JNe6ZTuzjrQFhZSrSBYE2bXbSKHJfFD2z42/"; uint256 public cost = 0 ether; bool public paused = false; // Create storm and add to blockchain struct Storm { string stormnr; } mapping (uint256 => Storm) public storms; constructor() ERC721("Storm of Colors", "SOC") {} // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint() public payable { uint256 supply = totalSupply(); require(!paused); require(supply + 1 <= 10000); // Random storm (1 - 20) uint256 luckynr = randomNr(100, block.difficulty, supply); uint256 stormnr; if (luckynr > 95) { // rare storm (16 - 20) stormnr = randomNr(4, block.difficulty, supply) + 16; } else { if (luckynr > 80) { // uncommon storm (11 - 15) stormnr = randomNr(4, block.difficulty, supply) + 11; } else { // common storm (1 - 10) stormnr = randomNr(9, block.difficulty, supply) + 1; } } // Create new storm & add to blockchain storms[supply + 1] = Storm( stormnr.toString() ); _safeMint(msg.sender, supply + 1); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); Storm memory currentstorm = storms[tokenId]; // Create JSON for OpenSea return string(abi.encodePacked( 'data:application/json;base64,', Base64.encode(abi.encodePacked( '{', '"name": "Storm of Colors #', currentstorm.stormnr, '",', '"description": "Storm of Colors #', currentstorm.stormnr, '", ', '"image": "', _baseURI(), currentstorm.stormnr, '.jpg",', '"attributes": [', '{"trait_type": "Storm Nr", "value": "' , currentstorm.stormnr, '"}', ']' '}' )) )); } function randomNr(uint256 mod, uint256 seed, uint256 salt) public view returns(uint256) { return uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender, seed, salt))) % mod; } //only owner function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { // Do not remove this otherwise you will not be able to withdraw the funds. (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mod","type":"uint256"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"}],"name":"randomNr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"storms","outputs":[{"internalType":"string","name":"stormnr","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060600160405280603681526020016200487960369139600b908051906020019062000035929190620001f8565b506000600c556000600d60006101000a81548160ff0219169083151502179055503480156200006357600080fd5b506040518060400160405280600f81526020017f53746f726d206f6620436f6c6f727300000000000000000000000000000000008152506040518060400160405280600381526020017f534f4300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e8929190620001f8565b50806001908051906020019062000101929190620001f8565b50505062000124620001186200012a60201b60201c565b6200013260201b60201c565b6200030d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020690620002a8565b90600052602060002090601f0160209004810192826200022a576000855562000276565b82601f106200024557805160ff191683800117855562000276565b8280016001018555821562000276579182015b828111156200027557825182559160200191906001019062000258565b5b50905062000285919062000289565b5090565b5b80821115620002a45760008160009055506001016200028a565b5090565b60006002820490506001821680620002c157607f821691505b60208210811415620002d857620002d7620002de565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61455c806200031d6000396000f3fe6080604052600436106101b75760003560e01c80635c975abb116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146105de578063c8dc7b341461061b578063e985e9c514610658578063f2fde38b14610695576101b7565b8063a22cb4651461054f578063b88d4fde14610578578063bfeb52fd146105a1576101b7565b806370a08231116100c657806370a08231146104a5578063715018a6146104e25780638da5cb5b146104f957806395d89b4114610524576101b7565b80635c975abb146104125780636352211e1461043d5780636c0360eb1461047a576101b7565b806318160ddd116101595780633ccfd60b116101335780633ccfd60b1461037957806342842e0e146103835780634f6ccce7146103ac57806355f804b3146103e9576101b7565b806318160ddd146102e857806323b872dd146103135780632f745c591461033c576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a5780631249c58b146102b357806313faede6146102bd576101b7565b806301ffc9a7146101bc57806302329a29146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612dbc565b6106be565b6040516101f091906135ca565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612d8f565b610738565b005b34801561022e57600080fd5b506102376107d1565b60405161024491906135e5565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612e5f565b610863565b6040516102819190613563565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190612d4f565b6108e8565b005b6102bb610a00565b005b3480156102c957600080fd5b506102d2610b30565b6040516102df9190613847565b60405180910390f35b3480156102f457600080fd5b506102fd610b36565b60405161030a9190613847565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190612c39565b610b43565b005b34801561034857600080fd5b50610363600480360381019061035e9190612d4f565b610ba3565b6040516103709190613847565b60405180910390f35b610381610c48565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190612c39565b610d44565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612e5f565b610d64565b6040516103e09190613847565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190612e16565b610dd5565b005b34801561041e57600080fd5b50610427610e6b565b60405161043491906135ca565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190612e5f565b610e7e565b6040516104719190613563565b60405180910390f35b34801561048657600080fd5b5061048f610f30565b60405161049c91906135e5565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190612bcc565b610fbe565b6040516104d99190613847565b60405180910390f35b3480156104ee57600080fd5b506104f7611076565b005b34801561050557600080fd5b5061050e6110fe565b60405161051b9190613563565b60405180910390f35b34801561053057600080fd5b50610539611128565b60405161054691906135e5565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190612d0f565b6111ba565b005b34801561058457600080fd5b5061059f600480360381019061059a9190612c8c565b6111d0565b005b3480156105ad57600080fd5b506105c860048036038101906105c39190612e8c565b611232565b6040516105d59190613847565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190612e5f565b611278565b60405161061291906135e5565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d9190612e5f565b6113e4565b60405161064f91906135e5565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190612bf9565b61148a565b60405161068c91906135ca565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612bcc565b61151e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610731575061073082611616565b5b9050919050565b6107406116f8565b73ffffffffffffffffffffffffffffffffffffffff1661075e6110fe565b73ffffffffffffffffffffffffffffffffffffffff16146107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ab90613787565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6060600080546107e090613b02565b80601f016020809104026020016040519081016040528092919081815260200182805461080c90613b02565b80156108595780601f1061082e57610100808354040283529160200191610859565b820191906000526020600020905b81548152906001019060200180831161083c57829003601f168201915b5050505050905090565b600061086e82611700565b6108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a490613767565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f382610e7e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b906137e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109836116f8565b73ffffffffffffffffffffffffffffffffffffffff1614806109b257506109b1816109ac6116f8565b61148a565b5b6109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e8906136e7565b60405180910390fd5b6109fb838361176c565b505050565b6000610a0a610b36565b9050600d60009054906101000a900460ff1615610a2657600080fd5b612710600182610a369190613937565b1115610a4157600080fd5b6000610a4f60644484611232565b90506000605f821115610a7b576010610a6a60044486611232565b610a749190613937565b9050610abf565b6050821115610aa357600b610a9260044486611232565b610a9c9190613937565b9050610abe565b6001610ab160094486611232565b610abb9190613937565b90505b5b6040518060200160405280610ad383611825565b815250600e6000600186610ae79190613937565b81526020019081526020016000206000820151816000019080519060200190610b119291906129e0565b50905050610b2b33600185610b269190613937565b611986565b505050565b600c5481565b6000600880549050905090565b610b54610b4e6116f8565b826119a4565b610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90613807565b60405180910390fd5b610b9e838383611a82565b505050565b6000610bae83610fbe565b8210610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be690613607565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c506116f8565b73ffffffffffffffffffffffffffffffffffffffff16610c6e6110fe565b73ffffffffffffffffffffffffffffffffffffffff1614610cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbb90613787565b60405180910390fd5b6000610cce6110fe565b73ffffffffffffffffffffffffffffffffffffffff1647604051610cf190613500565b60006040518083038185875af1925050503d8060008114610d2e576040519150601f19603f3d011682016040523d82523d6000602084013e610d33565b606091505b5050905080610d4157600080fd5b50565b610d5f838383604051806020016040528060008152506111d0565b505050565b6000610d6e610b36565b8210610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690613827565b60405180910390fd5b60088281548110610dc357610dc2613cc9565b5b90600052602060002001549050919050565b610ddd6116f8565b73ffffffffffffffffffffffffffffffffffffffff16610dfb6110fe565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613787565b60405180910390fd5b80600b9080519060200190610e679291906129e0565b5050565b600d60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613727565b60405180910390fd5b80915050919050565b600b8054610f3d90613b02565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6990613b02565b8015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102690613707565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61107e6116f8565b73ffffffffffffffffffffffffffffffffffffffff1661109c6110fe565b73ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613787565b60405180910390fd5b6110fc6000611cde565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461113790613b02565b80601f016020809104026020016040519081016040528092919081815260200182805461116390613b02565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b5050505050905090565b6111cc6111c56116f8565b8383611da4565b5050565b6111e16111db6116f8565b836119a4565b611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790613807565b60405180910390fd5b61122c84848484611f11565b50505050565b6000834233858560405160200161124c9493929190613515565b6040516020818303038152906040528051906020012060001c61126f9190613bdc565b90509392505050565b606061128382611700565b6112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b9906137c7565b60405180910390fd5b6000600e60008481526020019081526020016000206040518060200160405290816000820180546112f290613b02565b80601f016020809104026020016040519081016040528092919081815260200182805461131e90613b02565b801561136b5780601f106113405761010080835404028352916020019161136b565b820191906000526020600020905b81548152906001019060200180831161134e57829003601f168201915b50505050508152505090506113bd8160000151826000015161138b611f6d565b846000015185600001516040516020016113a995949392919061341a565b604051602081830303815290604052611fff565b6040516020016113cd91906134de565b604051602081830303815290604052915050919050565b600e60205280600052604060002060009150905080600001805461140790613b02565b80601f016020809104026020016040519081016040528092919081815260200182805461143390613b02565b80156114805780601f1061145557610100808354040283529160200191611480565b820191906000526020600020905b81548152906001019060200180831161146357829003601f168201915b5050505050905081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115266116f8565b73ffffffffffffffffffffffffffffffffffffffff166115446110fe565b73ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190613787565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190613647565b60405180910390fd5b61161381611cde565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116e157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116f157506116f082612184565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117df83610e7e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6060600082141561186d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611981565b600082905060005b6000821461189f57808061188890613b65565b915050600a82611898919061398d565b9150611875565b60008167ffffffffffffffff8111156118bb576118ba613cf8565b5b6040519080825280601f01601f1916602001820160405280156118ed5781602001600182028036833780820191505090505b5090505b6000851461197a576001826119069190613a18565b9150600a856119159190613bdc565b60306119219190613937565b60f81b81838151811061193757611936613cc9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611973919061398d565b94506118f1565b8093505050505b919050565b6119a08282604051806020016040528060008152506121ee565b5050565b60006119af82611700565b6119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e5906136c7565b60405180910390fd5b60006119f983610e7e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a6857508373ffffffffffffffffffffffffffffffffffffffff16611a5084610863565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a795750611a78818561148a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aa282610e7e565b73ffffffffffffffffffffffffffffffffffffffff1614611af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aef906137a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f90613687565b60405180910390fd5b611b73838383612249565b611b7e60008261176c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bce9190613a18565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c259190613937565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a906136a7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f0491906135ca565b60405180910390a3505050565b611f1c848484611a82565b611f288484848461235d565b611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90613627565b60405180910390fd5b50505050565b6060600b8054611f7c90613b02565b80601f0160208091040260200160405190810160405280929190818152602001828054611fa890613b02565b8015611ff55780601f10611fca57610100808354040283529160200191611ff5565b820191906000526020600020905b815481529060010190602001808311611fd857829003601f168201915b5050505050905090565b60606000825114156120225760405180602001604052806000815250905061217f565b60006040518060600160405280604081526020016144e760409139905060006003600285516120519190613937565b61205b919061398d565b600461206791906139be565b905060006020826120789190613937565b67ffffffffffffffff81111561209157612090613cf8565b5b6040519080825280601f01601f1916602001820160405280156120c35781602001600182028036833780820191505090505b509050818152600183018586518101602084015b8183101561213e576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b8252600182019150506120d7565b600389510660018114612158576002811461216857612173565b613d3d60f01b6002830352612173565b603d60f81b60018303525b50505050508093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121f883836124f4565b612205600084848461235d565b612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90613627565b60405180910390fd5b505050565b6122548383836126c2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561229757612292816126c7565b6122d6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122d5576122d48382612710565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612319576123148161287d565b612358565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461235757612356828261294e565b5b5b505050565b600061237e8473ffffffffffffffffffffffffffffffffffffffff166129cd565b156124e7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123a76116f8565b8786866040518563ffffffff1660e01b81526004016123c9949392919061357e565b602060405180830381600087803b1580156123e357600080fd5b505af192505050801561241457506040513d601f19601f820116820180604052508101906124119190612de9565b60015b612497573d8060008114612444576040519150601f19603f3d011682016040523d82523d6000602084013e612449565b606091505b5060008151141561248f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248690613627565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124ec565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90613747565b60405180910390fd5b61256d81611700565b156125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a490613667565b60405180910390fd5b6125b960008383612249565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126099190613937565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161271d84610fbe565b6127279190613a18565b905060006007600084815260200190815260200160002054905081811461280c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128919190613a18565b90506000600960008481526020019081526020016000205490506000600883815481106128c1576128c0613cc9565b5b9060005260206000200154905080600883815481106128e3576128e2613cc9565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061293257612931613c9a565b5b6001900381819060005260206000200160009055905550505050565b600061295983610fbe565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546129ec90613b02565b90600052602060002090601f016020900481019282612a0e5760008555612a55565b82601f10612a2757805160ff1916838001178555612a55565b82800160010185558215612a55579182015b82811115612a54578251825591602001919060010190612a39565b5b509050612a629190612a66565b5090565b5b80821115612a7f576000816000905550600101612a67565b5090565b6000612a96612a9184613887565b613862565b905082815260208101848484011115612ab257612ab1613d2c565b5b612abd848285613ac0565b509392505050565b6000612ad8612ad3846138b8565b613862565b905082815260208101848484011115612af457612af3613d2c565b5b612aff848285613ac0565b509392505050565b600081359050612b168161448a565b92915050565b600081359050612b2b816144a1565b92915050565b600081359050612b40816144b8565b92915050565b600081519050612b55816144b8565b92915050565b600082601f830112612b7057612b6f613d27565b5b8135612b80848260208601612a83565b91505092915050565b600082601f830112612b9e57612b9d613d27565b5b8135612bae848260208601612ac5565b91505092915050565b600081359050612bc6816144cf565b92915050565b600060208284031215612be257612be1613d36565b5b6000612bf084828501612b07565b91505092915050565b60008060408385031215612c1057612c0f613d36565b5b6000612c1e85828601612b07565b9250506020612c2f85828601612b07565b9150509250929050565b600080600060608486031215612c5257612c51613d36565b5b6000612c6086828701612b07565b9350506020612c7186828701612b07565b9250506040612c8286828701612bb7565b9150509250925092565b60008060008060808587031215612ca657612ca5613d36565b5b6000612cb487828801612b07565b9450506020612cc587828801612b07565b9350506040612cd687828801612bb7565b925050606085013567ffffffffffffffff811115612cf757612cf6613d31565b5b612d0387828801612b5b565b91505092959194509250565b60008060408385031215612d2657612d25613d36565b5b6000612d3485828601612b07565b9250506020612d4585828601612b1c565b9150509250929050565b60008060408385031215612d6657612d65613d36565b5b6000612d7485828601612b07565b9250506020612d8585828601612bb7565b9150509250929050565b600060208284031215612da557612da4613d36565b5b6000612db384828501612b1c565b91505092915050565b600060208284031215612dd257612dd1613d36565b5b6000612de084828501612b31565b91505092915050565b600060208284031215612dff57612dfe613d36565b5b6000612e0d84828501612b46565b91505092915050565b600060208284031215612e2c57612e2b613d36565b5b600082013567ffffffffffffffff811115612e4a57612e49613d31565b5b612e5684828501612b89565b91505092915050565b600060208284031215612e7557612e74613d36565b5b6000612e8384828501612bb7565b91505092915050565b600080600060608486031215612ea557612ea4613d36565b5b6000612eb386828701612bb7565b9350506020612ec486828701612bb7565b9250506040612ed586828701612bb7565b9150509250925092565b612ee881613a4c565b82525050565b612eff612efa82613a4c565b613bae565b82525050565b612f0e81613a5e565b82525050565b6000612f1f826138e9565b612f2981856138ff565b9350612f39818560208601613acf565b612f4281613d3b565b840191505092915050565b6000612f58826138f4565b612f62818561391b565b9350612f72818560208601613acf565b612f7b81613d3b565b840191505092915050565b6000612f91826138f4565b612f9b818561392c565b9350612fab818560208601613acf565b80840191505092915050565b6000612fc460258361392c565b9150612fcf82613d59565b602582019050919050565b6000612fe7602b8361391b565b9150612ff282613da8565b604082019050919050565b600061300a60328361391b565b915061301582613df7565b604082019050919050565b600061302d60268361391b565b915061303882613e46565b604082019050919050565b600061305060028361392c565b915061305b82613e95565b600282019050919050565b6000613073601c8361391b565b915061307e82613ebe565b602082019050919050565b600061309660218361392c565b91506130a182613ee7565b602182019050919050565b60006130b960248361391b565b91506130c482613f36565b604082019050919050565b60006130dc60198361391b565b91506130e782613f85565b602082019050919050565b60006130ff601a8361392c565b915061310a82613fae565b601a82019050919050565b6000613122602c8361391b565b915061312d82613fd7565b604082019050919050565b600061314560388361391b565b915061315082614026565b604082019050919050565b6000613168602a8361391b565b915061317382614075565b604082019050919050565b600061318b60298361391b565b9150613196826140c4565b604082019050919050565b60006131ae60028361392c565b91506131b982614113565b600282019050919050565b60006131d160208361391b565b91506131dc8261413c565b602082019050919050565b60006131f460068361392c565b91506131ff82614165565b600682019050919050565b6000613217602c8361391b565b91506132228261418e565b604082019050919050565b600061323a60208361391b565b9150613245826141dd565b602082019050919050565b600061325d60298361391b565b915061326882614206565b604082019050919050565b6000613280602f8361391b565b915061328b82614255565b604082019050919050565b60006132a360018361392c565b91506132ae826142a4565b600182019050919050565b60006132c6600f8361392c565b91506132d1826142cd565b600f82019050919050565b60006132e960028361392c565b91506132f4826142f6565b600282019050919050565b600061330c60218361391b565b91506133178261431f565b604082019050919050565b600061332f601d8361392c565b915061333a8261436e565b601d82019050919050565b6000613352600083613910565b915061335d82614397565b600082019050919050565b600061337560318361391b565b91506133808261439a565b604082019050919050565b6000613398602c8361391b565b91506133a3826143e9565b604082019050919050565b60006133bb60038361392c565b91506133c682614438565b600382019050919050565b60006133de600a8361392c565b91506133e982614461565b600a82019050919050565b6133fd81613ab6565b82525050565b61341461340f82613ab6565b613bd2565b82525050565b600061342582613296565b9150613430826130f2565b915061343c8288612f86565b915061344782613043565b915061345282613089565b915061345e8287612f86565b9150613469826133ae565b9150613474826133d1565b91506134808286612f86565b915061348c8285612f86565b9150613497826131e7565b91506134a2826132b9565b91506134ad82612fb7565b91506134b98284612f86565b91506134c4826131a1565b91506134cf826132dc565b91508190509695505050505050565b60006134e982613322565b91506134f58284612f86565b915081905092915050565b600061350b82613345565b9150819050919050565b60006135218287613403565b6020820191506135318286612eee565b6014820191506135418285613403565b6020820191506135518284613403565b60208201915081905095945050505050565b60006020820190506135786000830184612edf565b92915050565b60006080820190506135936000830187612edf565b6135a06020830186612edf565b6135ad60408301856133f4565b81810360608301526135bf8184612f14565b905095945050505050565b60006020820190506135df6000830184612f05565b92915050565b600060208201905081810360008301526135ff8184612f4d565b905092915050565b6000602082019050818103600083015261362081612fda565b9050919050565b6000602082019050818103600083015261364081612ffd565b9050919050565b6000602082019050818103600083015261366081613020565b9050919050565b6000602082019050818103600083015261368081613066565b9050919050565b600060208201905081810360008301526136a0816130ac565b9050919050565b600060208201905081810360008301526136c0816130cf565b9050919050565b600060208201905081810360008301526136e081613115565b9050919050565b6000602082019050818103600083015261370081613138565b9050919050565b600060208201905081810360008301526137208161315b565b9050919050565b600060208201905081810360008301526137408161317e565b9050919050565b60006020820190508181036000830152613760816131c4565b9050919050565b600060208201905081810360008301526137808161320a565b9050919050565b600060208201905081810360008301526137a08161322d565b9050919050565b600060208201905081810360008301526137c081613250565b9050919050565b600060208201905081810360008301526137e081613273565b9050919050565b60006020820190508181036000830152613800816132ff565b9050919050565b6000602082019050818103600083015261382081613368565b9050919050565b600060208201905081810360008301526138408161338b565b9050919050565b600060208201905061385c60008301846133f4565b92915050565b600061386c61387d565b90506138788282613b34565b919050565b6000604051905090565b600067ffffffffffffffff8211156138a2576138a1613cf8565b5b6138ab82613d3b565b9050602081019050919050565b600067ffffffffffffffff8211156138d3576138d2613cf8565b5b6138dc82613d3b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061394282613ab6565b915061394d83613ab6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561398257613981613c0d565b5b828201905092915050565b600061399882613ab6565b91506139a383613ab6565b9250826139b3576139b2613c3c565b5b828204905092915050565b60006139c982613ab6565b91506139d483613ab6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a0d57613a0c613c0d565b5b828202905092915050565b6000613a2382613ab6565b9150613a2e83613ab6565b925082821015613a4157613a40613c0d565b5b828203905092915050565b6000613a5782613a96565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613aed578082015181840152602081019050613ad2565b83811115613afc576000848401525b50505050565b60006002820490506001821680613b1a57607f821691505b60208210811415613b2e57613b2d613c6b565b5b50919050565b613b3d82613d3b565b810181811067ffffffffffffffff82111715613b5c57613b5b613cf8565b5b80604052505050565b6000613b7082613ab6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ba357613ba2613c0d565b5b600182019050919050565b6000613bb982613bc0565b9050919050565b6000613bcb82613d4c565b9050919050565b6000819050919050565b6000613be782613ab6565b9150613bf283613ab6565b925082613c0257613c01613c3c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f7b2274726169745f74797065223a202253746f726d204e72222c202276616c7560008201527f65223a2022000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f226465736372697074696f6e223a202253746f726d206f6620436f6c6f72732060008201527f2300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f226e616d65223a202253746f726d206f6620436f6c6f72732023000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f2e6a7067222c0000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b7f2261747472696275746573223a205b0000000000000000000000000000000000600082015250565b7f5d7d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f222c200000000000000000000000000000000000000000000000000000000000600082015250565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b61449381613a4c565b811461449e57600080fd5b50565b6144aa81613a5e565b81146144b557600080fd5b50565b6144c181613a6a565b81146144cc57600080fd5b50565b6144d881613ab6565b81146144e357600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212203e26d91fb8850aa9524eb1bf97fc75bb8c7e0f744c12e6255e122ec75e5aefa164736f6c63430008070033697066733a2f2f516d6236757655634d79314a4e65365a54757a6a725146685a53725342594532625862534b484a664644327a34322f
Deployed ByteCode Sourcemap
46904:2807:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40671:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49403:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28165:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29724:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29247:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47470:805;;;:::i;:::-;;47078:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41311:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30474:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40979:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49482:226;;;:::i;:::-;;30884:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41501:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49299:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47112:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27859:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46993:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27589:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7135:103;;;;;;;;;;;;;:::i;:::-;;6484:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28334:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30017:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31140:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49086:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48281:799;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47230:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30243:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7393:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40671:224;40773:4;40812:35;40797:50;;;:11;:50;;;;:90;;;;40851:36;40875:11;40851:23;:36::i;:::-;40797:90;40790:97;;40671:224;;;:::o;49403:73::-;6715:12;:10;:12::i;:::-;6704:23;;:7;:5;:7::i;:::-;:23;;;6696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49464:6:::1;49455;;:15;;;;;;;;;;;;;;;;;;49403:73:::0;:::o;28165:100::-;28219:13;28252:5;28245:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28165:100;:::o;29724:221::-;29800:7;29828:16;29836:7;29828;:16::i;:::-;29820:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29913:15;:24;29929:7;29913:24;;;;;;;;;;;;;;;;;;;;;29906:31;;29724:221;;;:::o;29247:411::-;29328:13;29344:23;29359:7;29344:14;:23::i;:::-;29328:39;;29392:5;29386:11;;:2;:11;;;;29378:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29486:5;29470:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29495:37;29512:5;29519:12;:10;:12::i;:::-;29495:16;:37::i;:::-;29470:62;29448:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29629:21;29638:2;29642:7;29629:8;:21::i;:::-;29317:341;29247:411;;:::o;47470:805::-;47508:14;47525:13;:11;:13::i;:::-;47508:30;;47554:6;;;;;;;;;;;47553:7;47545:16;;;;;;47590:5;47585:1;47576:6;:10;;;;:::i;:::-;:19;;47568:28;;;;;;47635:15;47653:39;47662:3;47667:16;47685:6;47653:8;:39::i;:::-;47635:57;;47699:15;47735:2;47725:7;:12;47721:405;;;47832:2;47792:37;47801:1;47804:16;47822:6;47792:8;:37::i;:::-;:42;;;;:::i;:::-;47782:52;;47721:405;;;47873:2;47863:7;:12;47859:252;;;47979:2;47939:37;47948:1;47951:16;47969:6;47939:8;:37::i;:::-;:42;;;;:::i;:::-;47929:52;;47859:252;;;48098:1;48058:37;48067:1;48070:16;48088:6;48058:8;:37::i;:::-;:41;;;;:::i;:::-;48048:51;;47859:252;47721:405;48200:27;;;;;;;;48207:18;:7;:16;:18::i;:::-;48200:27;;;48179:6;:18;48195:1;48186:6;:10;;;;:::i;:::-;48179:18;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;48236:33;48246:10;48267:1;48258:6;:10;;;;:::i;:::-;48236:9;:33::i;:::-;47501:774;;;47470:805::o;47078:29::-;;;;:::o;41311:113::-;41372:7;41399:10;:17;;;;41392:24;;41311:113;:::o;30474:339::-;30669:41;30688:12;:10;:12::i;:::-;30702:7;30669:18;:41::i;:::-;30661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30777:28;30787:4;30793:2;30797:7;30777:9;:28::i;:::-;30474:339;;;:::o;40979:256::-;41076:7;41112:23;41129:5;41112:16;:23::i;:::-;41104:5;:31;41096:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41201:12;:19;41214:5;41201:19;;;;;;;;;;;;;;;:26;41221:5;41201:26;;;;;;;;;;;;41194:33;;40979:256;;;;:::o;49482:226::-;6715:12;:10;:12::i;:::-;6704:23;;:7;:5;:7::i;:::-;:23;;;6696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49616:7:::1;49637;:5;:7::i;:::-;49629:21;;49658;49629:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49615:69;;;49699:2;49691:11;;;::::0;::::1;;49527:181;49482:226::o:0;30884:185::-;31022:39;31039:4;31045:2;31049:7;31022:39;;;;;;;;;;;;:16;:39::i;:::-;30884:185;;;:::o;41501:233::-;41576:7;41612:30;:28;:30::i;:::-;41604:5;:38;41596:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41709:10;41720:5;41709:17;;;;;;;;:::i;:::-;;;;;;;;;;41702:24;;41501:233;;;:::o;49299:98::-;6715:12;:10;:12::i;:::-;6704:23;;:7;:5;:7::i;:::-;:23;;;6696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49380:11:::1;49370:7;:21;;;;;;;;;;;;:::i;:::-;;49299:98:::0;:::o;47112:26::-;;;;;;;;;;;;;:::o;27859:239::-;27931:7;27951:13;27967:7;:16;27975:7;27967:16;;;;;;;;;;;;;;;;;;;;;27951:32;;28019:1;28002:19;;:5;:19;;;;27994:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28085:5;28078:12;;;27859:239;;;:::o;46993:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27589:208::-;27661:7;27706:1;27689:19;;:5;:19;;;;27681:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27773:9;:16;27783:5;27773:16;;;;;;;;;;;;;;;;27766:23;;27589:208;;;:::o;7135:103::-;6715:12;:10;:12::i;:::-;6704:23;;:7;:5;:7::i;:::-;:23;;;6696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7200:30:::1;7227:1;7200:18;:30::i;:::-;7135:103::o:0;6484:87::-;6530:7;6557:6;;;;;;;;;;;6550:13;;6484:87;:::o;28334:104::-;28390:13;28423:7;28416:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28334:104;:::o;30017:155::-;30112:52;30131:12;:10;:12::i;:::-;30145:8;30155;30112:18;:52::i;:::-;30017:155;;:::o;31140:328::-;31315:41;31334:12;:10;:12::i;:::-;31348:7;31315:18;:41::i;:::-;31307:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31421:39;31435:4;31441:2;31445:7;31454:5;31421:13;:39::i;:::-;31140:328;;;;:::o;49086:191::-;49165:7;49268:3;49223:15;49240:10;49252:4;49258;49206:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49196:68;;;;;;49188:77;;:83;;;;:::i;:::-;49181:90;;49086:191;;;;;:::o;48281:799::-;48354:13;48395:16;48403:7;48395;:16::i;:::-;48379:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;48485:25;48513:6;:15;48520:7;48513:15;;;;;;;;;;;48485:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48641:425;48730:12;:20;;;48808:12;:20;;;48864:10;:8;:10::i;:::-;48876:12;:20;;;48999:12;:20;;;48655:410;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48641:13;:425::i;:::-;48583:490;;;;;;;;:::i;:::-;;;;;;;;;;;;;48569:505;;;48281:799;;;:::o;47230:40::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30243:164::-;30340:4;30364:18;:25;30383:5;30364:25;;;;;;;;;;;;;;;:35;30390:8;30364:35;;;;;;;;;;;;;;;;;;;;;;;;;30357:42;;30243:164;;;;:::o;7393:201::-;6715:12;:10;:12::i;:::-;6704:23;;:7;:5;:7::i;:::-;:23;;;6696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7502:1:::1;7482:22;;:8;:22;;;;7474:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7558:28;7577:8;7558:18;:28::i;:::-;7393:201:::0;:::o;27220:305::-;27322:4;27374:25;27359:40;;;:11;:40;;;;:105;;;;27431:33;27416:48;;;:11;:48;;;;27359:105;:158;;;;27481:36;27505:11;27481:23;:36::i;:::-;27359:158;27339:178;;27220:305;;;:::o;5208:98::-;5261:7;5288:10;5281:17;;5208:98;:::o;32978:127::-;33043:4;33095:1;33067:30;;:7;:16;33075:7;33067:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33060:37;;32978:127;;;:::o;36960:174::-;37062:2;37035:15;:24;37051:7;37035:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37118:7;37114:2;37080:46;;37089:23;37104:7;37089:14;:23::i;:::-;37080:46;;;;;;;;;;;;36960:174;;:::o;2770:723::-;2826:13;3056:1;3047:5;:10;3043:53;;;3074:10;;;;;;;;;;;;;;;;;;;;;3043:53;3106:12;3121:5;3106:20;;3137:14;3162:78;3177:1;3169:4;:9;3162:78;;3195:8;;;;;:::i;:::-;;;;3226:2;3218:10;;;;;:::i;:::-;;;3162:78;;;3250:19;3282:6;3272:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3250:39;;3300:154;3316:1;3307:5;:10;3300:154;;3344:1;3334:11;;;;;:::i;:::-;;;3411:2;3403:5;:10;;;;:::i;:::-;3390:2;:24;;;;:::i;:::-;3377:39;;3360:6;3367;3360:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3440:2;3431:11;;;;;:::i;:::-;;;3300:154;;;3478:6;3464:21;;;;;2770:723;;;;:::o;33962:110::-;34038:26;34048:2;34052:7;34038:26;;;;;;;;;;;;:9;:26::i;:::-;33962:110;;:::o;33272:348::-;33365:4;33390:16;33398:7;33390;:16::i;:::-;33382:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33466:13;33482:23;33497:7;33482:14;:23::i;:::-;33466:39;;33535:5;33524:16;;:7;:16;;;:51;;;;33568:7;33544:31;;:20;33556:7;33544:11;:20::i;:::-;:31;;;33524:51;:87;;;;33579:32;33596:5;33603:7;33579:16;:32::i;:::-;33524:87;33516:96;;;33272:348;;;;:::o;36264:578::-;36423:4;36396:31;;:23;36411:7;36396:14;:23::i;:::-;:31;;;36388:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36506:1;36492:16;;:2;:16;;;;36484:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36562:39;36583:4;36589:2;36593:7;36562:20;:39::i;:::-;36666:29;36683:1;36687:7;36666:8;:29::i;:::-;36727:1;36708:9;:15;36718:4;36708:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36756:1;36739:9;:13;36749:2;36739:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36787:2;36768:7;:16;36776:7;36768:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36826:7;36822:2;36807:27;;36816:4;36807:27;;;;;;;;;;;;36264:578;;;:::o;7754:191::-;7828:16;7847:6;;;;;;;;;;;7828:25;;7873:8;7864:6;;:17;;;;;;;;;;;;;;;;;;7928:8;7897:40;;7918:8;7897:40;;;;;;;;;;;;7817:128;7754:191;:::o;37276:315::-;37431:8;37422:17;;:5;:17;;;;37414:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37518:8;37480:18;:25;37499:5;37480:25;;;;;;;;;;;;;;;:35;37506:8;37480:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37564:8;37542:41;;37557:5;37542:41;;;37574:8;37542:41;;;;;;:::i;:::-;;;;;;;;37276:315;;;:::o;32350:::-;32507:28;32517:4;32523:2;32527:7;32507:9;:28::i;:::-;32554:48;32577:4;32583:2;32587:7;32596:5;32554:22;:48::i;:::-;32546:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32350:315;;;;:::o;47349:102::-;47409:13;47438:7;47431:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47349:102;:::o;363:2037::-;421:13;466:1;451:4;:11;:16;447:31;;;469:9;;;;;;;;;;;;;;;;447:31;538:19;560:5;;;;;;;;;;;;;;;;;538:27;;617:18;663:1;658;644:4;:11;:15;;;;:::i;:::-;643:21;;;;:::i;:::-;638:1;:27;;;;:::i;:::-;617:48;;748:20;795:2;782:10;:15;;;;:::i;:::-;771:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;748:50;;895:10;887:6;880:26;1002:1;995:5;991:13;1073:4;1124;1118:11;1109:7;1105:25;1232:2;1224:6;1220:15;1317:810;1336:6;1327:7;1324:19;1317:810;;;1402:1;1393:7;1389:15;1378:26;;1489:7;1483:14;1636:4;1628:5;1624:2;1620:14;1616:25;1606:8;1602:40;1596:47;1591:3;1587:57;1576:9;1569:76;1690:1;1679:9;1675:17;1662:30;;1776:4;1768:5;1764:2;1760:14;1756:25;1746:8;1742:40;1736:47;1731:3;1727:57;1716:9;1709:76;1830:1;1819:9;1815:17;1802:30;;1916:4;1908:5;1905:1;1900:14;1896:25;1886:8;1882:40;1876:47;1871:3;1867:57;1856:9;1849:76;1970:1;1959:9;1955:17;1942:30;;2056:4;2048:5;2036:25;2026:8;2022:40;2016:47;2011:3;2007:57;1996:9;1989:76;2110:1;2099:9;2095:17;2082:30;;1360:767;1317:810;;;2212:1;2205:4;2199:11;2195:19;2233:1;2228:54;;;;2301:1;2296:52;;;;2188:160;;2228:54;2272:6;2267:3;2263:16;2259:1;2248:9;2244:17;2237:43;2228:54;;2296:52;2340:4;2335:3;2331:14;2327:1;2316:9;2312:17;2305:41;2188:160;;820:1539;;;;2386:6;2379:13;;;;;363:2037;;;;:::o;18916:157::-;19001:4;19040:25;19025:40;;;:11;:40;;;;19018:47;;18916:157;;;:::o;34299:321::-;34429:18;34435:2;34439:7;34429:5;:18::i;:::-;34480:54;34511:1;34515:2;34519:7;34528:5;34480:22;:54::i;:::-;34458:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34299:321;;;:::o;42347:589::-;42491:45;42518:4;42524:2;42528:7;42491:26;:45::i;:::-;42569:1;42553:18;;:4;:18;;;42549:187;;;42588:40;42620:7;42588:31;:40::i;:::-;42549:187;;;42658:2;42650:10;;:4;:10;;;42646:90;;42677:47;42710:4;42716:7;42677:32;:47::i;:::-;42646:90;42549:187;42764:1;42750:16;;:2;:16;;;42746:183;;;42783:45;42820:7;42783:36;:45::i;:::-;42746:183;;;42856:4;42850:10;;:2;:10;;;42846:83;;42877:40;42905:2;42909:7;42877:27;:40::i;:::-;42846:83;42746:183;42347:589;;;:::o;38156:799::-;38311:4;38332:15;:2;:13;;;:15::i;:::-;38328:620;;;38384:2;38368:36;;;38405:12;:10;:12::i;:::-;38419:4;38425:7;38434:5;38368:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38364:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38627:1;38610:6;:13;:18;38606:272;;;38653:60;;;;;;;;;;:::i;:::-;;;;;;;;38606:272;38828:6;38822:13;38813:6;38809:2;38805:15;38798:38;38364:529;38501:41;;;38491:51;;;:6;:51;;;;38484:58;;;;;38328:620;38932:4;38925:11;;38156:799;;;;;;;:::o;34956:382::-;35050:1;35036:16;;:2;:16;;;;35028:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35109:16;35117:7;35109;:16::i;:::-;35108:17;35100:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35171:45;35200:1;35204:2;35208:7;35171:20;:45::i;:::-;35246:1;35229:9;:13;35239:2;35229:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35277:2;35258:7;:16;35266:7;35258:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35322:7;35318:2;35297:33;;35314:1;35297:33;;;;;;;;;;;;34956:382;;:::o;39527:126::-;;;;:::o;43659:164::-;43763:10;:17;;;;43736:15;:24;43752:7;43736:24;;;;;;;;;;;:44;;;;43791:10;43807:7;43791:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43659:164;:::o;44450:988::-;44716:22;44766:1;44741:22;44758:4;44741:16;:22::i;:::-;:26;;;;:::i;:::-;44716:51;;44778:18;44799:17;:26;44817:7;44799:26;;;;;;;;;;;;44778:47;;44946:14;44932:10;:28;44928:328;;44977:19;44999:12;:18;45012:4;44999:18;;;;;;;;;;;;;;;:34;45018:14;44999:34;;;;;;;;;;;;44977:56;;45083:11;45050:12;:18;45063:4;45050:18;;;;;;;;;;;;;;;:30;45069:10;45050:30;;;;;;;;;;;:44;;;;45200:10;45167:17;:30;45185:11;45167:30;;;;;;;;;;;:43;;;;44962:294;44928:328;45352:17;:26;45370:7;45352:26;;;;;;;;;;;45345:33;;;45396:12;:18;45409:4;45396:18;;;;;;;;;;;;;;;:34;45415:14;45396:34;;;;;;;;;;;45389:41;;;44531:907;;44450:988;;:::o;45733:1079::-;45986:22;46031:1;46011:10;:17;;;;:21;;;;:::i;:::-;45986:46;;46043:18;46064:15;:24;46080:7;46064:24;;;;;;;;;;;;46043:45;;46415:19;46437:10;46448:14;46437:26;;;;;;;;:::i;:::-;;;;;;;;;;46415:48;;46501:11;46476:10;46487;46476:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46612:10;46581:15;:28;46597:11;46581:28;;;;;;;;;;;:41;;;;46753:15;:24;46769:7;46753:24;;;;;;;;;;;46746:31;;;46788:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45804:1008;;;45733:1079;:::o;43237:221::-;43322:14;43339:20;43356:2;43339:16;:20::i;:::-;43322:37;;43397:7;43370:12;:16;43383:2;43370:16;;;;;;;;;;;;;;;:24;43387:6;43370:24;;;;;;;;;;;:34;;;;43444:6;43415:17;:26;43433:7;43415:26;;;;;;;;;;;:35;;;;43311:147;43237:221;;:::o;8772:387::-;8832:4;9040:12;9107:7;9095:20;9087:28;;9150:1;9143:4;:8;9136:15;;;8772:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:619::-;7564:6;7572;7580;7629:2;7617:9;7608:7;7604:23;7600:32;7597:119;;;7635:79;;:::i;:::-;7597:119;7755:1;7780:53;7825:7;7816:6;7805:9;7801:22;7780:53;:::i;:::-;7770:63;;7726:117;7882:2;7908:53;7953:7;7944:6;7933:9;7929:22;7908:53;:::i;:::-;7898:63;;7853:118;8010:2;8036:53;8081:7;8072:6;8061:9;8057:22;8036:53;:::i;:::-;8026:63;;7981:118;7487:619;;;;;:::o;8112:118::-;8199:24;8217:5;8199:24;:::i;:::-;8194:3;8187:37;8112:118;;:::o;8236:157::-;8341:45;8361:24;8379:5;8361:24;:::i;:::-;8341:45;:::i;:::-;8336:3;8329:58;8236:157;;:::o;8399:109::-;8480:21;8495:5;8480:21;:::i;:::-;8475:3;8468:34;8399:109;;:::o;8514:360::-;8600:3;8628:38;8660:5;8628:38;:::i;:::-;8682:70;8745:6;8740:3;8682:70;:::i;:::-;8675:77;;8761:52;8806:6;8801:3;8794:4;8787:5;8783:16;8761:52;:::i;:::-;8838:29;8860:6;8838:29;:::i;:::-;8833:3;8829:39;8822:46;;8604:270;8514:360;;;;:::o;8880:364::-;8968:3;8996:39;9029:5;8996:39;:::i;:::-;9051:71;9115:6;9110:3;9051:71;:::i;:::-;9044:78;;9131:52;9176:6;9171:3;9164:4;9157:5;9153:16;9131:52;:::i;:::-;9208:29;9230:6;9208:29;:::i;:::-;9203:3;9199:39;9192:46;;8972:272;8880:364;;;;:::o;9250:377::-;9356:3;9384:39;9417:5;9384:39;:::i;:::-;9439:89;9521:6;9516:3;9439:89;:::i;:::-;9432:96;;9537:52;9582:6;9577:3;9570:4;9563:5;9559:16;9537:52;:::i;:::-;9614:6;9609:3;9605:16;9598:23;;9360:267;9250:377;;;;:::o;9633:402::-;9793:3;9814:85;9896:2;9891:3;9814:85;:::i;:::-;9807:92;;9908:93;9997:3;9908:93;:::i;:::-;10026:2;10021:3;10017:12;10010:19;;9633:402;;;:::o;10041:366::-;10183:3;10204:67;10268:2;10263:3;10204:67;:::i;:::-;10197:74;;10280:93;10369:3;10280:93;:::i;:::-;10398:2;10393:3;10389:12;10382:19;;10041:366;;;:::o;10413:::-;10555:3;10576:67;10640:2;10635:3;10576:67;:::i;:::-;10569:74;;10652:93;10741:3;10652:93;:::i;:::-;10770:2;10765:3;10761:12;10754:19;;10413:366;;;:::o;10785:::-;10927:3;10948:67;11012:2;11007:3;10948:67;:::i;:::-;10941:74;;11024:93;11113:3;11024:93;:::i;:::-;11142:2;11137:3;11133:12;11126:19;;10785:366;;;:::o;11157:400::-;11317:3;11338:84;11420:1;11415:3;11338:84;:::i;:::-;11331:91;;11431:93;11520:3;11431:93;:::i;:::-;11549:1;11544:3;11540:11;11533:18;;11157:400;;;:::o;11563:366::-;11705:3;11726:67;11790:2;11785:3;11726:67;:::i;:::-;11719:74;;11802:93;11891:3;11802:93;:::i;:::-;11920:2;11915:3;11911:12;11904:19;;11563:366;;;:::o;11935:402::-;12095:3;12116:85;12198:2;12193:3;12116:85;:::i;:::-;12109:92;;12210:93;12299:3;12210:93;:::i;:::-;12328:2;12323:3;12319:12;12312:19;;11935:402;;;:::o;12343:366::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:::-;12857:3;12878:67;12942:2;12937:3;12878:67;:::i;:::-;12871:74;;12954:93;13043:3;12954:93;:::i;:::-;13072:2;13067:3;13063:12;13056:19;;12715:366;;;:::o;13087:402::-;13247:3;13268:85;13350:2;13345:3;13268:85;:::i;:::-;13261:92;;13362:93;13451:3;13362:93;:::i;:::-;13480:2;13475:3;13471:12;13464:19;;13087:402;;;:::o;13495:366::-;13637:3;13658:67;13722:2;13717:3;13658:67;:::i;:::-;13651:74;;13734:93;13823:3;13734:93;:::i;:::-;13852:2;13847:3;13843:12;13836:19;;13495:366;;;:::o;13867:::-;14009:3;14030:67;14094:2;14089:3;14030:67;:::i;:::-;14023:74;;14106:93;14195:3;14106:93;:::i;:::-;14224:2;14219:3;14215:12;14208:19;;13867:366;;;:::o;14239:::-;14381:3;14402:67;14466:2;14461:3;14402:67;:::i;:::-;14395:74;;14478:93;14567:3;14478:93;:::i;:::-;14596:2;14591:3;14587:12;14580:19;;14239:366;;;:::o;14611:::-;14753:3;14774:67;14838:2;14833:3;14774:67;:::i;:::-;14767:74;;14850:93;14939:3;14850:93;:::i;:::-;14968:2;14963:3;14959:12;14952:19;;14611:366;;;:::o;14983:400::-;15143:3;15164:84;15246:1;15241:3;15164:84;:::i;:::-;15157:91;;15257:93;15346:3;15257:93;:::i;:::-;15375:1;15370:3;15366:11;15359:18;;14983:400;;;:::o;15389:366::-;15531:3;15552:67;15616:2;15611:3;15552:67;:::i;:::-;15545:74;;15628:93;15717:3;15628:93;:::i;:::-;15746:2;15741:3;15737:12;15730:19;;15389:366;;;:::o;15761:400::-;15921:3;15942:84;16024:1;16019:3;15942:84;:::i;:::-;15935:91;;16035:93;16124:3;16035:93;:::i;:::-;16153:1;16148:3;16144:11;16137:18;;15761:400;;;:::o;16167:366::-;16309:3;16330:67;16394:2;16389:3;16330:67;:::i;:::-;16323:74;;16406:93;16495:3;16406:93;:::i;:::-;16524:2;16519:3;16515:12;16508:19;;16167:366;;;:::o;16539:::-;16681:3;16702:67;16766:2;16761:3;16702:67;:::i;:::-;16695:74;;16778:93;16867:3;16778:93;:::i;:::-;16896:2;16891:3;16887:12;16880:19;;16539:366;;;:::o;16911:::-;17053:3;17074:67;17138:2;17133:3;17074:67;:::i;:::-;17067:74;;17150:93;17239:3;17150:93;:::i;:::-;17268:2;17263:3;17259:12;17252:19;;16911:366;;;:::o;17283:::-;17425:3;17446:67;17510:2;17505:3;17446:67;:::i;:::-;17439:74;;17522:93;17611:3;17522:93;:::i;:::-;17640:2;17635:3;17631:12;17624:19;;17283:366;;;:::o;17655:400::-;17815:3;17836:84;17918:1;17913:3;17836:84;:::i;:::-;17829:91;;17929:93;18018:3;17929:93;:::i;:::-;18047:1;18042:3;18038:11;18031:18;;17655:400;;;:::o;18061:402::-;18221:3;18242:85;18324:2;18319:3;18242:85;:::i;:::-;18235:92;;18336:93;18425:3;18336:93;:::i;:::-;18454:2;18449:3;18445:12;18438:19;;18061:402;;;:::o;18469:400::-;18629:3;18650:84;18732:1;18727:3;18650:84;:::i;:::-;18643:91;;18743:93;18832:3;18743:93;:::i;:::-;18861:1;18856:3;18852:11;18845:18;;18469:400;;;:::o;18875:366::-;19017:3;19038:67;19102:2;19097:3;19038:67;:::i;:::-;19031:74;;19114:93;19203:3;19114:93;:::i;:::-;19232:2;19227:3;19223:12;19216:19;;18875:366;;;:::o;19247:402::-;19407:3;19428:85;19510:2;19505:3;19428:85;:::i;:::-;19421:92;;19522:93;19611:3;19522:93;:::i;:::-;19640:2;19635:3;19631:12;19624:19;;19247:402;;;:::o;19655:398::-;19814:3;19835:83;19916:1;19911:3;19835:83;:::i;:::-;19828:90;;19927:93;20016:3;19927:93;:::i;:::-;20045:1;20040:3;20036:11;20029:18;;19655:398;;;:::o;20059:366::-;20201:3;20222:67;20286:2;20281:3;20222:67;:::i;:::-;20215:74;;20298:93;20387:3;20298:93;:::i;:::-;20416:2;20411:3;20407:12;20400:19;;20059:366;;;:::o;20431:::-;20573:3;20594:67;20658:2;20653:3;20594:67;:::i;:::-;20587:74;;20670:93;20759:3;20670:93;:::i;:::-;20788:2;20783:3;20779:12;20772:19;;20431:366;;;:::o;20803:400::-;20963:3;20984:84;21066:1;21061:3;20984:84;:::i;:::-;20977:91;;21077:93;21166:3;21077:93;:::i;:::-;21195:1;21190:3;21186:11;21179:18;;20803:400;;;:::o;21209:402::-;21369:3;21390:85;21472:2;21467:3;21390:85;:::i;:::-;21383:92;;21484:93;21573:3;21484:93;:::i;:::-;21602:2;21597:3;21593:12;21586:19;;21209:402;;;:::o;21617:118::-;21704:24;21722:5;21704:24;:::i;:::-;21699:3;21692:37;21617:118;;:::o;21741:157::-;21846:45;21866:24;21884:5;21866:24;:::i;:::-;21846:45;:::i;:::-;21841:3;21834:58;21741:157;;:::o;21904:3841::-;23339:3;23361:148;23505:3;23361:148;:::i;:::-;23354:155;;23526:148;23670:3;23526:148;:::i;:::-;23519:155;;23691:95;23782:3;23773:6;23691:95;:::i;:::-;23684:102;;23803:148;23947:3;23803:148;:::i;:::-;23796:155;;23968:148;24112:3;23968:148;:::i;:::-;23961:155;;24133:95;24224:3;24215:6;24133:95;:::i;:::-;24126:102;;24245:148;24389:3;24245:148;:::i;:::-;24238:155;;24410:148;24554:3;24410:148;:::i;:::-;24403:155;;24575:95;24666:3;24657:6;24575:95;:::i;:::-;24568:102;;24687:95;24778:3;24769:6;24687:95;:::i;:::-;24680:102;;24799:148;24943:3;24799:148;:::i;:::-;24792:155;;24964:148;25108:3;24964:148;:::i;:::-;24957:155;;25129:148;25273:3;25129:148;:::i;:::-;25122:155;;25294:95;25385:3;25376:6;25294:95;:::i;:::-;25287:102;;25406:148;25550:3;25406:148;:::i;:::-;25399:155;;25571:148;25715:3;25571:148;:::i;:::-;25564:155;;25736:3;25729:10;;21904:3841;;;;;;;;:::o;25751:541::-;25984:3;26006:148;26150:3;26006:148;:::i;:::-;25999:155;;26171:95;26262:3;26253:6;26171:95;:::i;:::-;26164:102;;26283:3;26276:10;;25751:541;;;;:::o;26298:379::-;26482:3;26504:147;26647:3;26504:147;:::i;:::-;26497:154;;26668:3;26661:10;;26298:379;;;:::o;26683:679::-;26879:3;26894:75;26965:3;26956:6;26894:75;:::i;:::-;26994:2;26989:3;26985:12;26978:19;;27007:75;27078:3;27069:6;27007:75;:::i;:::-;27107:2;27102:3;27098:12;27091:19;;27120:75;27191:3;27182:6;27120:75;:::i;:::-;27220:2;27215:3;27211:12;27204:19;;27233:75;27304:3;27295:6;27233:75;:::i;:::-;27333:2;27328:3;27324:12;27317:19;;27353:3;27346:10;;26683:679;;;;;;;:::o;27368:222::-;27461:4;27499:2;27488:9;27484:18;27476:26;;27512:71;27580:1;27569:9;27565:17;27556:6;27512:71;:::i;:::-;27368:222;;;;:::o;27596:640::-;27791:4;27829:3;27818:9;27814:19;27806:27;;27843:71;27911:1;27900:9;27896:17;27887:6;27843:71;:::i;:::-;27924:72;27992:2;27981:9;27977:18;27968:6;27924:72;:::i;:::-;28006;28074:2;28063:9;28059:18;28050:6;28006:72;:::i;:::-;28125:9;28119:4;28115:20;28110:2;28099:9;28095:18;28088:48;28153:76;28224:4;28215:6;28153:76;:::i;:::-;28145:84;;27596:640;;;;;;;:::o;28242:210::-;28329:4;28367:2;28356:9;28352:18;28344:26;;28380:65;28442:1;28431:9;28427:17;28418:6;28380:65;:::i;:::-;28242:210;;;;:::o;28458:313::-;28571:4;28609:2;28598:9;28594:18;28586:26;;28658:9;28652:4;28648:20;28644:1;28633:9;28629:17;28622:47;28686:78;28759:4;28750:6;28686:78;:::i;:::-;28678:86;;28458:313;;;;:::o;28777:419::-;28943:4;28981:2;28970:9;28966:18;28958:26;;29030:9;29024:4;29020:20;29016:1;29005:9;29001:17;28994:47;29058:131;29184:4;29058:131;:::i;:::-;29050:139;;28777:419;;;:::o;29202:::-;29368:4;29406:2;29395:9;29391:18;29383:26;;29455:9;29449:4;29445:20;29441:1;29430:9;29426:17;29419:47;29483:131;29609:4;29483:131;:::i;:::-;29475:139;;29202:419;;;:::o;29627:::-;29793:4;29831:2;29820:9;29816:18;29808:26;;29880:9;29874:4;29870:20;29866:1;29855:9;29851:17;29844:47;29908:131;30034:4;29908:131;:::i;:::-;29900:139;;29627:419;;;:::o;30052:::-;30218:4;30256:2;30245:9;30241:18;30233:26;;30305:9;30299:4;30295:20;30291:1;30280:9;30276:17;30269:47;30333:131;30459:4;30333:131;:::i;:::-;30325:139;;30052:419;;;:::o;30477:::-;30643:4;30681:2;30670:9;30666:18;30658:26;;30730:9;30724:4;30720:20;30716:1;30705:9;30701:17;30694:47;30758:131;30884:4;30758:131;:::i;:::-;30750:139;;30477:419;;;:::o;30902:::-;31068:4;31106:2;31095:9;31091:18;31083:26;;31155:9;31149:4;31145:20;31141:1;31130:9;31126:17;31119:47;31183:131;31309:4;31183:131;:::i;:::-;31175:139;;30902:419;;;:::o;31327:::-;31493:4;31531:2;31520:9;31516:18;31508:26;;31580:9;31574:4;31570:20;31566:1;31555:9;31551:17;31544:47;31608:131;31734:4;31608:131;:::i;:::-;31600:139;;31327:419;;;:::o;31752:::-;31918:4;31956:2;31945:9;31941:18;31933:26;;32005:9;31999:4;31995:20;31991:1;31980:9;31976:17;31969:47;32033:131;32159:4;32033:131;:::i;:::-;32025:139;;31752:419;;;:::o;32177:::-;32343:4;32381:2;32370:9;32366:18;32358:26;;32430:9;32424:4;32420:20;32416:1;32405:9;32401:17;32394:47;32458:131;32584:4;32458:131;:::i;:::-;32450:139;;32177:419;;;:::o;32602:::-;32768:4;32806:2;32795:9;32791:18;32783:26;;32855:9;32849:4;32845:20;32841:1;32830:9;32826:17;32819:47;32883:131;33009:4;32883:131;:::i;:::-;32875:139;;32602:419;;;:::o;33027:::-;33193:4;33231:2;33220:9;33216:18;33208:26;;33280:9;33274:4;33270:20;33266:1;33255:9;33251:17;33244:47;33308:131;33434:4;33308:131;:::i;:::-;33300:139;;33027:419;;;:::o;33452:::-;33618:4;33656:2;33645:9;33641:18;33633:26;;33705:9;33699:4;33695:20;33691:1;33680:9;33676:17;33669:47;33733:131;33859:4;33733:131;:::i;:::-;33725:139;;33452:419;;;:::o;33877:::-;34043:4;34081:2;34070:9;34066:18;34058:26;;34130:9;34124:4;34120:20;34116:1;34105:9;34101:17;34094:47;34158:131;34284:4;34158:131;:::i;:::-;34150:139;;33877:419;;;:::o;34302:::-;34468:4;34506:2;34495:9;34491:18;34483:26;;34555:9;34549:4;34545:20;34541:1;34530:9;34526:17;34519:47;34583:131;34709:4;34583:131;:::i;:::-;34575:139;;34302:419;;;:::o;34727:::-;34893:4;34931:2;34920:9;34916:18;34908:26;;34980:9;34974:4;34970:20;34966:1;34955:9;34951:17;34944:47;35008:131;35134:4;35008:131;:::i;:::-;35000:139;;34727:419;;;:::o;35152:::-;35318:4;35356:2;35345:9;35341:18;35333:26;;35405:9;35399:4;35395:20;35391:1;35380:9;35376:17;35369:47;35433:131;35559:4;35433:131;:::i;:::-;35425:139;;35152:419;;;:::o;35577:::-;35743:4;35781:2;35770:9;35766:18;35758:26;;35830:9;35824:4;35820:20;35816:1;35805:9;35801:17;35794:47;35858:131;35984:4;35858:131;:::i;:::-;35850:139;;35577:419;;;:::o;36002:::-;36168:4;36206:2;36195:9;36191:18;36183:26;;36255:9;36249:4;36245:20;36241:1;36230:9;36226:17;36219:47;36283:131;36409:4;36283:131;:::i;:::-;36275:139;;36002:419;;;:::o;36427:222::-;36520:4;36558:2;36547:9;36543:18;36535:26;;36571:71;36639:1;36628:9;36624:17;36615:6;36571:71;:::i;:::-;36427:222;;;;:::o;36655:129::-;36689:6;36716:20;;:::i;:::-;36706:30;;36745:33;36773:4;36765:6;36745:33;:::i;:::-;36655:129;;;:::o;36790:75::-;36823:6;36856:2;36850:9;36840:19;;36790:75;:::o;36871:307::-;36932:4;37022:18;37014:6;37011:30;37008:56;;;37044:18;;:::i;:::-;37008:56;37082:29;37104:6;37082:29;:::i;:::-;37074:37;;37166:4;37160;37156:15;37148:23;;36871:307;;;:::o;37184:308::-;37246:4;37336:18;37328:6;37325:30;37322:56;;;37358:18;;:::i;:::-;37322:56;37396:29;37418:6;37396:29;:::i;:::-;37388:37;;37480:4;37474;37470:15;37462:23;;37184:308;;;:::o;37498:98::-;37549:6;37583:5;37577:12;37567:22;;37498:98;;;:::o;37602:99::-;37654:6;37688:5;37682:12;37672:22;;37602:99;;;:::o;37707:168::-;37790:11;37824:6;37819:3;37812:19;37864:4;37859:3;37855:14;37840:29;;37707:168;;;;:::o;37881:147::-;37982:11;38019:3;38004:18;;37881:147;;;;:::o;38034:169::-;38118:11;38152:6;38147:3;38140:19;38192:4;38187:3;38183:14;38168:29;;38034:169;;;;:::o;38209:148::-;38311:11;38348:3;38333:18;;38209:148;;;;:::o;38363:305::-;38403:3;38422:20;38440:1;38422:20;:::i;:::-;38417:25;;38456:20;38474:1;38456:20;:::i;:::-;38451:25;;38610:1;38542:66;38538:74;38535:1;38532:81;38529:107;;;38616:18;;:::i;:::-;38529:107;38660:1;38657;38653:9;38646:16;;38363:305;;;;:::o;38674:185::-;38714:1;38731:20;38749:1;38731:20;:::i;:::-;38726:25;;38765:20;38783:1;38765:20;:::i;:::-;38760:25;;38804:1;38794:35;;38809:18;;:::i;:::-;38794:35;38851:1;38848;38844:9;38839:14;;38674:185;;;;:::o;38865:348::-;38905:7;38928:20;38946:1;38928:20;:::i;:::-;38923:25;;38962:20;38980:1;38962:20;:::i;:::-;38957:25;;39150:1;39082:66;39078:74;39075:1;39072:81;39067:1;39060:9;39053:17;39049:105;39046:131;;;39157:18;;:::i;:::-;39046:131;39205:1;39202;39198:9;39187:20;;38865:348;;;;:::o;39219:191::-;39259:4;39279:20;39297:1;39279:20;:::i;:::-;39274:25;;39313:20;39331:1;39313:20;:::i;:::-;39308:25;;39352:1;39349;39346:8;39343:34;;;39357:18;;:::i;:::-;39343:34;39402:1;39399;39395:9;39387:17;;39219:191;;;;:::o;39416:96::-;39453:7;39482:24;39500:5;39482:24;:::i;:::-;39471:35;;39416:96;;;:::o;39518:90::-;39552:7;39595:5;39588:13;39581:21;39570:32;;39518:90;;;:::o;39614:149::-;39650:7;39690:66;39683:5;39679:78;39668:89;;39614:149;;;:::o;39769:126::-;39806:7;39846:42;39839:5;39835:54;39824:65;;39769:126;;;:::o;39901:77::-;39938:7;39967:5;39956:16;;39901:77;;;:::o;39984:154::-;40068:6;40063:3;40058;40045:30;40130:1;40121:6;40116:3;40112:16;40105:27;39984:154;;;:::o;40144:307::-;40212:1;40222:113;40236:6;40233:1;40230:13;40222:113;;;40321:1;40316:3;40312:11;40306:18;40302:1;40297:3;40293:11;40286:39;40258:2;40255:1;40251:10;40246:15;;40222:113;;;40353:6;40350:1;40347:13;40344:101;;;40433:1;40424:6;40419:3;40415:16;40408:27;40344:101;40193:258;40144:307;;;:::o;40457:320::-;40501:6;40538:1;40532:4;40528:12;40518:22;;40585:1;40579:4;40575:12;40606:18;40596:81;;40662:4;40654:6;40650:17;40640:27;;40596:81;40724:2;40716:6;40713:14;40693:18;40690:38;40687:84;;;40743:18;;:::i;:::-;40687:84;40508:269;40457:320;;;:::o;40783:281::-;40866:27;40888:4;40866:27;:::i;:::-;40858:6;40854:40;40996:6;40984:10;40981:22;40960:18;40948:10;40945:34;40942:62;40939:88;;;41007:18;;:::i;:::-;40939:88;41047:10;41043:2;41036:22;40826:238;40783:281;;:::o;41070:233::-;41109:3;41132:24;41150:5;41132:24;:::i;:::-;41123:33;;41178:66;41171:5;41168:77;41165:103;;;41248:18;;:::i;:::-;41165:103;41295:1;41288:5;41284:13;41277:20;;41070:233;;;:::o;41309:100::-;41348:7;41377:26;41397:5;41377:26;:::i;:::-;41366:37;;41309:100;;;:::o;41415:94::-;41454:7;41483:20;41497:5;41483:20;:::i;:::-;41472:31;;41415:94;;;:::o;41515:79::-;41554:7;41583:5;41572:16;;41515:79;;;:::o;41600:176::-;41632:1;41649:20;41667:1;41649:20;:::i;:::-;41644:25;;41683:20;41701:1;41683:20;:::i;:::-;41678:25;;41722:1;41712:35;;41727:18;;:::i;:::-;41712:35;41768:1;41765;41761:9;41756:14;;41600:176;;;;:::o;41782:180::-;41830:77;41827:1;41820:88;41927:4;41924:1;41917:15;41951:4;41948:1;41941:15;41968:180;42016:77;42013:1;42006:88;42113:4;42110:1;42103:15;42137:4;42134:1;42127:15;42154:180;42202:77;42199:1;42192:88;42299:4;42296:1;42289:15;42323:4;42320:1;42313:15;42340:180;42388:77;42385:1;42378:88;42485:4;42482:1;42475:15;42509:4;42506:1;42499:15;42526:180;42574:77;42571:1;42564:88;42671:4;42668:1;42661:15;42695:4;42692:1;42685:15;42712:180;42760:77;42757:1;42750:88;42857:4;42854:1;42847:15;42881:4;42878:1;42871:15;42898:117;43007:1;43004;42997:12;43021:117;43130:1;43127;43120:12;43144:117;43253:1;43250;43243:12;43267:117;43376:1;43373;43366:12;43390:102;43431:6;43482:2;43478:7;43473:2;43466:5;43462:14;43458:28;43448:38;;43390:102;;;:::o;43498:94::-;43531:8;43579:5;43575:2;43571:14;43550:35;;43498:94;;;:::o;43598:315::-;43738:66;43734:1;43726:6;43722:14;43715:90;43839:66;43834:2;43826:6;43822:15;43815:91;43598:315;:::o;43919:230::-;44059:34;44055:1;44047:6;44043:14;44036:58;44128:13;44123:2;44115:6;44111:15;44104:38;43919:230;:::o;44155:237::-;44295:34;44291:1;44283:6;44279:14;44272:58;44364:20;44359:2;44351:6;44347:15;44340:45;44155:237;:::o;44398:225::-;44538:34;44534:1;44526:6;44522:14;44515:58;44607:8;44602:2;44594:6;44590:15;44583:33;44398:225;:::o;44629:214::-;44769:66;44765:1;44757:6;44753:14;44746:90;44629:214;:::o;44849:178::-;44989:30;44985:1;44977:6;44973:14;44966:54;44849:178;:::o;45033:252::-;45173:66;45169:1;45161:6;45157:14;45150:90;45274:3;45269:2;45261:6;45257:15;45250:28;45033:252;:::o;45291:223::-;45431:34;45427:1;45419:6;45415:14;45408:58;45500:6;45495:2;45487:6;45483:15;45476:31;45291:223;:::o;45520:175::-;45660:27;45656:1;45648:6;45644:14;45637:51;45520:175;:::o;45701:214::-;45841:66;45837:1;45829:6;45825:14;45818:90;45701:214;:::o;45921:231::-;46061:34;46057:1;46049:6;46045:14;46038:58;46130:14;46125:2;46117:6;46113:15;46106:39;45921:231;:::o;46158:243::-;46298:34;46294:1;46286:6;46282:14;46275:58;46367:26;46362:2;46354:6;46350:15;46343:51;46158:243;:::o;46407:229::-;46547:34;46543:1;46535:6;46531:14;46524:58;46616:12;46611:2;46603:6;46599:15;46592:37;46407:229;:::o;46642:228::-;46782:34;46778:1;46770:6;46766:14;46759:58;46851:11;46846:2;46838:6;46834:15;46827:36;46642:228;:::o;46876:214::-;47016:66;47012:1;47004:6;47000:14;46993:90;46876:214;:::o;47096:182::-;47236:34;47232:1;47224:6;47220:14;47213:58;47096:182;:::o;47284:214::-;47424:66;47420:1;47412:6;47408:14;47401:90;47284:214;:::o;47504:231::-;47644:34;47640:1;47632:6;47628:14;47621:58;47713:14;47708:2;47700:6;47696:15;47689:39;47504:231;:::o;47741:182::-;47881:34;47877:1;47869:6;47865:14;47858:58;47741:182;:::o;47929:228::-;48069:34;48065:1;48057:6;48053:14;48046:58;48138:11;48133:2;48125:6;48121:15;48114:36;47929:228;:::o;48163:234::-;48303:34;48299:1;48291:6;48287:14;48280:58;48372:17;48367:2;48359:6;48355:15;48348:42;48163:234;:::o;48403:155::-;48543:3;48539:1;48531:6;48527:14;48520:27;48403:155;:::o;48568:222::-;48712:66;48708:1;48700:6;48696:14;48689:90;48568:222;:::o;48800:152::-;48940:4;48936:1;48928:6;48924:14;48917:28;48800:152;:::o;48958:220::-;49098:34;49094:1;49086:6;49082:14;49075:58;49167:3;49162:2;49154:6;49150:15;49143:28;48958:220;:::o;49184:179::-;49324:31;49320:1;49312:6;49308:14;49301:55;49184:179;:::o;49369:114::-;;:::o;49489:236::-;49629:34;49625:1;49617:6;49613:14;49606:58;49698:19;49693:2;49685:6;49681:15;49674:44;49489:236;:::o;49731:231::-;49871:34;49867:1;49859:6;49855:14;49848:58;49940:14;49935:2;49927:6;49923:15;49916:39;49731:231;:::o;49968:214::-;50108:66;50104:1;50096:6;50092:14;50085:90;49968:214;:::o;50188:::-;50328:66;50324:1;50316:6;50312:14;50305:90;50188:214;:::o;50408:122::-;50481:24;50499:5;50481:24;:::i;:::-;50474:5;50471:35;50461:63;;50520:1;50517;50510:12;50461:63;50408:122;:::o;50536:116::-;50606:21;50621:5;50606:21;:::i;:::-;50599:5;50596:32;50586:60;;50642:1;50639;50632:12;50586:60;50536:116;:::o;50658:120::-;50730:23;50747:5;50730:23;:::i;:::-;50723:5;50720:34;50710:62;;50768:1;50765;50758:12;50710:62;50658:120;:::o;50784:122::-;50857:24;50875:5;50857:24;:::i;:::-;50850:5;50847:35;50837:63;;50896:1;50893;50886:12;50837:63;50784:122;:::o
Swarm Source
ipfs://3e26d91fb8850aa9524eb1bf97fc75bb8c7e0f744c12e6255e122ec75e5aefa1
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.