Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
416 OFS
Holders
143
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 OFSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Flamingo_Squad
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-10 */ // SPDX-License-Identifier: MIT /* Developed by Meraj Bugti and Audited By Mishal Zahra, Blochain Developers @ www.themetaconcepts.com ** Flattened file, Containing all extensions. ** Contract "Flamingo Squad" start at line 1350. // 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: gist-270e50cc401a88221663666c2f449393/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: gist-270e50cc401a88221663666c2f449393/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: gist-270e50cc401a88221663666c2f449393/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return 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: gist-270e50cc401a88221663666c2f449393/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: gist-270e50cc401a88221663666c2f449393/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: gist-270e50cc401a88221663666c2f449393/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: gist-270e50cc401a88221663666c2f449393/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: gist-270e50cc401a88221663666c2f449393/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); /** * @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: gist-270e50cc401a88221663666c2f449393/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: gist-270e50cc401a88221663666c2f449393/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require( owner != address(0), "ERC721A: balance query for the zero address" ); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require( _exists(tokenId), "ERC721A: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); require(quantity != 0, "ERC721A: quantity must be greater than 0"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received( address(0), to, updatedIndex, _data ), "ERC721A: transfer to non ERC721Receiver implementer" ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership .startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721A: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: gist-270e50cc401a88221663666c2f449393/XrootDotDev.sol /* ******************************************************** Contract "Flamingo Squad" * Using OpenZeppelin Contracts, utils/Strings.sol * Using OpenZeppelin Contracts, access/Ownable.sol * Using ERC-721A, Creator: Chiru Labs */ pragma solidity 0.8.13; contract Flamingo_Squad is ERC721A, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; //Max supply is 10000 NFTs // Max mint amount Per Tx is 1, and is modifiable functions //Max amount of NFTs an address can own is set to 1, It is also Modifiable //Cost is set to 0 ether, Cost is modifiable // MaxSupply for Public is 9500 as 500 are Reserved uint256 public cost = 0 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 1; uint256 public nftPerAddressLimit = 1; // Reserved NFTs can be minted/airdropped once 9500 have been minted uint256 public ReservedNFT = 500; //Only whitelisted users can mint only, until SetOnlywhitelisted function is set to false bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; // Name and Symbol are not Modifiable once deployed. //BaseUri and Hidden MetaData URI Can be changed If required constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721A(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal Function function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public functions //Only whitelisted users can mint if onlyWhitelist is set to true. //public can mint after setonlywhitelist is set to false function mint(uint256 _mintAmount) public payable { require(!paused, "Contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "Mint amount must be greater than 0"); require(supply + _mintAmount <= maxSupply, "Mint amount must be equal to or below available tokens"); if (msg.sender != owner()) { if (onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "User is not whitelisted."); } require(supply + _mintAmount <= maxSupply - ReservedNFT, "Mint amount must be equal to or below available tokens"); require(msg.value >= cost * _mintAmount, "Insufficient balance"); uint256 ownerTokenCount = balanceOf(msg.sender); require (ownerTokenCount < nftPerAddressLimit, "Mint amount is exceeding Perwallet Token limit"); require(_mintAmount <= maxMintAmount, "Mint amount is greater than max mint amount"); } _safeMint(msg.sender, _mintAmount); } //to Confirm whether an Address is whitelisted function isWhitelisted(address _user) public view returns (bool) { for (uint256 i = 0; i < whitelistedAddresses.length; i++) { if(whitelistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner funtions function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } // To Add Whitelist Follow this formate ["Address1", "Address2", "Address3"] function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function seReservedNFT(uint256 _newreserve) public onlyOwner { ReservedNFT = _newreserve; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } // to Airdrop tokens, only owner Function function AirDrop(address _to, uint256 _mintAmount) public onlyOwner { require(!paused); require(_mintAmount > 0); _safeMint(_to, _mintAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":"_mintAmount","type":"uint256"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ReservedNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_newreserve","type":"uint256"}],"name":"seReservedNFT","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000051929190620003c1565b506000600b55612710600c556001600d556001600e556101f4600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff021916908315150217905550348015620000cb57600080fd5b5060405162005b2e38038062005b2e8339818101604052810190620000f191906200060e565b838381600190805190602001906200010b929190620003c1565b50806002908051906020019062000124929190620003c1565b505050620001476200013b6200017360201b60201c565b6200017b60201b60201c565b62000158826200024160201b60201c565b6200016981620002ec60201b60201c565b50505050620007e3565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002516200017360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002776200039760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c7906200075d565b60405180910390fd5b8060089080519060200190620002e8929190620003c1565b5050565b620002fc6200017360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003226200039760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000372906200075d565b60405180910390fd5b80600a908051906020019062000393929190620003c1565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003cf90620007ae565b90600052602060002090601f016020900481019282620003f357600085556200043f565b82601f106200040e57805160ff19168380011785556200043f565b828001600101855582156200043f579182015b828111156200043e57825182559160200191906001019062000421565b5b5090506200044e919062000452565b5090565b5b808211156200046d57600081600090555060010162000453565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004da826200048f565b810181811067ffffffffffffffff82111715620004fc57620004fb620004a0565b5b80604052505050565b60006200051162000471565b90506200051f8282620004cf565b919050565b600067ffffffffffffffff821115620005425762000541620004a0565b5b6200054d826200048f565b9050602081019050919050565b60005b838110156200057a5780820151818401526020810190506200055d565b838111156200058a576000848401525b50505050565b6000620005a7620005a18462000524565b62000505565b905082815260208101848484011115620005c657620005c56200048a565b5b620005d38482856200055a565b509392505050565b600082601f830112620005f357620005f262000485565b5b81516200060584826020860162000590565b91505092915050565b600080600080608085870312156200062b576200062a6200047b565b5b600085015167ffffffffffffffff8111156200064c576200064b62000480565b5b6200065a87828801620005db565b945050602085015167ffffffffffffffff8111156200067e576200067d62000480565b5b6200068c87828801620005db565b935050604085015167ffffffffffffffff811115620006b057620006af62000480565b5b620006be87828801620005db565b925050606085015167ffffffffffffffff811115620006e257620006e162000480565b5b620006f087828801620005db565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000745602083620006fc565b915062000752826200070d565b602082019050919050565b60006020820190508181036000830152620007788162000736565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007c757607f821691505b602082108103620007dd57620007dc6200077f565b5b50919050565b61533b80620007f36000396000f3fe6080604052600436106102885760003560e01c80636c0360eb1161015a578063ba4e5c49116100c1578063d66dd2191161007a578063d66dd219146109b4578063da3ef23f146109dd578063e985e9c514610a06578063edec5f2714610a43578063f2c4ce1e14610a6c578063f2fde38b14610a9557610288565b8063ba4e5c4914610890578063ba7d2c76146108cd578063c6682862146108f8578063c87b56dd14610923578063d0eb26b014610960578063d5abeb011461098957610288565b806395d89b411161011357806395d89b41146107b55780639c70b512146107e0578063a0712d681461080b578063a22cb46514610827578063a475b5dd14610850578063b88d4fde1461086757610288565b80636c0360eb146106b757806370a08231146106e2578063715018a61461071f5780637e5b0054146107365780637f00c7a6146107615780638da5cb5b1461078a57610288565b80632f745c59116101fe57806344a0d68a116101b757806344a0d68a146105955780634f6ccce7146105be57806351830227146105fb57806355f804b3146106265780635c975abb1461064f5780636352211e1461067a57610288565b80632f745c59146104825780633af32abf146104bf5780633c952764146104fc5780633ccfd60b1461052557806342842e0e1461052f578063438b63001461055857610288565b8063095ea7b311610250578063095ea7b31461038657806313faede6146103af57806318160ddd146103da578063239c70ae1461040557806323b872dd146104305780632a2f3a6f1461045957610288565b806301ffc9a71461028d57806302329a29146102ca57806306fdde03146102f3578063081812fc1461031e578063081c8c441461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061384f565b610abe565b6040516102c19190613897565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec91906138de565b610c08565b005b3480156102ff57600080fd5b50610308610ca1565b60405161031591906139a4565b60405180910390f35b34801561032a57600080fd5b50610345600480360381019061034091906139fc565b610d33565b6040516103529190613a6a565b60405180910390f35b34801561036757600080fd5b50610370610db8565b60405161037d91906139a4565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613ab1565b610e46565b005b3480156103bb57600080fd5b506103c4610f5e565b6040516103d19190613b00565b60405180910390f35b3480156103e657600080fd5b506103ef610f64565b6040516103fc9190613b00565b60405180910390f35b34801561041157600080fd5b5061041a610f6d565b6040516104279190613b00565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190613b1b565b610f73565b005b34801561046557600080fd5b50610480600480360381019061047b9190613ab1565b610f83565b005b34801561048e57600080fd5b506104a960048036038101906104a49190613ab1565b611034565b6040516104b69190613b00565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190613b6e565b611224565b6040516104f39190613897565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906138de565b6112d2565b005b61052d61136b565b005b34801561053b57600080fd5b5061055660048036038101906105519190613b1b565b611467565b005b34801561056457600080fd5b5061057f600480360381019061057a9190613b6e565b611487565b60405161058c9190613c59565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b791906139fc565b611535565b005b3480156105ca57600080fd5b506105e560048036038101906105e091906139fc565b6115bb565b6040516105f29190613b00565b60405180910390f35b34801561060757600080fd5b5061061061160e565b60405161061d9190613897565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190613db0565b611621565b005b34801561065b57600080fd5b506106646116b7565b6040516106719190613897565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c91906139fc565b6116ca565b6040516106ae9190613a6a565b60405180910390f35b3480156106c357600080fd5b506106cc6116e0565b6040516106d991906139a4565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613b6e565b61176e565b6040516107169190613b00565b60405180910390f35b34801561072b57600080fd5b50610734611856565b005b34801561074257600080fd5b5061074b6118de565b6040516107589190613b00565b60405180910390f35b34801561076d57600080fd5b50610788600480360381019061078391906139fc565b6118e4565b005b34801561079657600080fd5b5061079f61196a565b6040516107ac9190613a6a565b60405180910390f35b3480156107c157600080fd5b506107ca611994565b6040516107d791906139a4565b60405180910390f35b3480156107ec57600080fd5b506107f5611a26565b6040516108029190613897565b60405180910390f35b610825600480360381019061082091906139fc565b611a39565b005b34801561083357600080fd5b5061084e60048036038101906108499190613df9565b611d19565b005b34801561085c57600080fd5b50610865611e99565b005b34801561087357600080fd5b5061088e60048036038101906108899190613eda565b611f32565b005b34801561089c57600080fd5b506108b760048036038101906108b291906139fc565b611f8e565b6040516108c49190613a6a565b60405180910390f35b3480156108d957600080fd5b506108e2611fcd565b6040516108ef9190613b00565b60405180910390f35b34801561090457600080fd5b5061090d611fd3565b60405161091a91906139a4565b60405180910390f35b34801561092f57600080fd5b5061094a600480360381019061094591906139fc565b612061565b60405161095791906139a4565b60405180910390f35b34801561096c57600080fd5b50610987600480360381019061098291906139fc565b6121b9565b005b34801561099557600080fd5b5061099e61223f565b6040516109ab9190613b00565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d691906139fc565b612245565b005b3480156109e957600080fd5b50610a0460048036038101906109ff9190613db0565b6122cb565b005b348015610a1257600080fd5b50610a2d6004803603810190610a289190613f5d565b612361565b604051610a3a9190613897565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190613ffd565b6123f5565b005b348015610a7857600080fd5b50610a936004803603810190610a8e9190613db0565b612495565b005b348015610aa157600080fd5b50610abc6004803603810190610ab79190613b6e565b61252b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c015750610c0082612622565b5b9050919050565b610c1061268c565b73ffffffffffffffffffffffffffffffffffffffff16610c2e61196a565b73ffffffffffffffffffffffffffffffffffffffff1614610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90614096565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060018054610cb0906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdc906140e5565b8015610d295780601f10610cfe57610100808354040283529160200191610d29565b820191906000526020600020905b815481529060010190602001808311610d0c57829003601f168201915b5050505050905090565b6000610d3e82612694565b610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490614188565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a8054610dc5906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610df1906140e5565b8015610e3e5780601f10610e1357610100808354040283529160200191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2157829003601f168201915b505050505081565b6000610e51826116ca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb89061421a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee061268c565b73ffffffffffffffffffffffffffffffffffffffff161480610f0f5750610f0e81610f0961268c565b612361565b5b610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906142ac565b60405180910390fd5b610f598383836126a1565b505050565b600b5481565b60008054905090565b600d5481565b610f7e838383612753565b505050565b610f8b61268c565b73ffffffffffffffffffffffffffffffffffffffff16610fa961196a565b73ffffffffffffffffffffffffffffffffffffffff1614610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff690614096565b60405180910390fd5b601060009054906101000a900460ff161561101957600080fd5b6000811161102657600080fd5b6110308282612c91565b5050565b600061103f8361176e565b8210611080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110779061433e565b60405180910390fd5b600061108a610f64565b905060008060005b838110156111e2576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461118457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111d4578684036111cb57819550505050505061121e565b83806001019450505b508080600101915050611092565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906143d0565b60405180910390fd5b92915050565b600080600090505b6011805490508110156112c7578273ffffffffffffffffffffffffffffffffffffffff1660118281548110611264576112636143f0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112b45760019150506112cd565b80806112bf9061444e565b91505061122c565b50600090505b919050565b6112da61268c565b73ffffffffffffffffffffffffffffffffffffffff166112f861196a565b73ffffffffffffffffffffffffffffffffffffffff161461134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590614096565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b61137361268c565b73ffffffffffffffffffffffffffffffffffffffff1661139161196a565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614096565b60405180910390fd5b60006113f161196a565b73ffffffffffffffffffffffffffffffffffffffff1647604051611414906144c7565b60006040518083038185875af1925050503d8060008114611451576040519150601f19603f3d011682016040523d82523d6000602084013e611456565b606091505b505090508061146457600080fd5b50565b61148283838360405180602001604052806000815250611f32565b505050565b606060006114948361176e565b905060008167ffffffffffffffff8111156114b2576114b1613c85565b5b6040519080825280602002602001820160405280156114e05781602001602082028036833780820191505090505b50905060005b8281101561152a576114f88582611034565b82828151811061150b5761150a6143f0565b5b60200260200101818152505080806115229061444e565b9150506114e6565b508092505050919050565b61153d61268c565b73ffffffffffffffffffffffffffffffffffffffff1661155b61196a565b73ffffffffffffffffffffffffffffffffffffffff16146115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890614096565b60405180910390fd5b80600b8190555050565b60006115c5610f64565b8210611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd9061454e565b60405180910390fd5b819050919050565b601060019054906101000a900460ff1681565b61162961268c565b73ffffffffffffffffffffffffffffffffffffffff1661164761196a565b73ffffffffffffffffffffffffffffffffffffffff161461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490614096565b60405180910390fd5b80600890805190602001906116b3929190613645565b5050565b601060009054906101000a900460ff1681565b60006116d582612caf565b600001519050919050565b600880546116ed906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611719906140e5565b80156117665780601f1061173b57610100808354040283529160200191611766565b820191906000526020600020905b81548152906001019060200180831161174957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d5906145e0565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61185e61268c565b73ffffffffffffffffffffffffffffffffffffffff1661187c61196a565b73ffffffffffffffffffffffffffffffffffffffff16146118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990614096565b60405180910390fd5b6118dc6000612e49565b565b600f5481565b6118ec61268c565b73ffffffffffffffffffffffffffffffffffffffff1661190a61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790614096565b60405180910390fd5b80600d8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546119a3906140e5565b80601f01602080910402602001604051908101604052809291908181526020018280546119cf906140e5565b8015611a1c5780601f106119f157610100808354040283529160200191611a1c565b820191906000526020600020905b8154815290600101906020018083116119ff57829003601f168201915b5050505050905090565b601060029054906101000a900460ff1681565b601060009054906101000a900460ff1615611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061464c565b60405180910390fd5b6000611a93610f64565b905060008211611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf906146de565b60405180910390fd5b600c548282611ae791906146fe565b1115611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906147c6565b60405180910390fd5b611b3061196a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0b5760011515601060029054906101000a900460ff16151503611bc657611b8633611224565b611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90614832565b60405180910390fd5b5b600f54600c54611bd69190614852565b8282611be291906146fe565b1115611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a906147c6565b60405180910390fd5b81600b54611c319190614886565b341015611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a9061492c565b60405180910390fd5b6000611c7e3361176e565b9050600e548110611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb906149be565b60405180910390fd5b600d54831115611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0090614a50565b60405180910390fd5b505b611d153383612c91565b5050565b611d2161268c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590614abc565b60405180910390fd5b8060066000611d9b61268c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e4861268c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e8d9190613897565b60405180910390a35050565b611ea161268c565b73ffffffffffffffffffffffffffffffffffffffff16611ebf61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90614096565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611f3d848484612753565b611f4984848484612f0f565b611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614b4e565b60405180910390fd5b50505050565b60118181548110611f9e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60098054611fe0906140e5565b80601f016020809104026020016040519081016040528092919081815260200182805461200c906140e5565b80156120595780601f1061202e57610100808354040283529160200191612059565b820191906000526020600020905b81548152906001019060200180831161203c57829003601f168201915b505050505081565b606061206c82612694565b6120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a290614be0565b60405180910390fd5b60001515601060019054906101000a900460ff1615150361215857600a80546120d3906140e5565b80601f01602080910402602001604051908101604052809291908181526020018280546120ff906140e5565b801561214c5780601f106121215761010080835404028352916020019161214c565b820191906000526020600020905b81548152906001019060200180831161212f57829003601f168201915b505050505090506121b4565b6000612162613096565b9050600081511161218257604051806020016040528060008152506121b0565b8061218c84613128565b60096040516020016121a093929190614cd0565b6040516020818303038152906040525b9150505b919050565b6121c161268c565b73ffffffffffffffffffffffffffffffffffffffff166121df61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90614096565b60405180910390fd5b80600e8190555050565b600c5481565b61224d61268c565b73ffffffffffffffffffffffffffffffffffffffff1661226b61196a565b73ffffffffffffffffffffffffffffffffffffffff16146122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890614096565b60405180910390fd5b80600f8190555050565b6122d361268c565b73ffffffffffffffffffffffffffffffffffffffff166122f161196a565b73ffffffffffffffffffffffffffffffffffffffff1614612347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233e90614096565b60405180910390fd5b806009908051906020019061235d929190613645565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123fd61268c565b73ffffffffffffffffffffffffffffffffffffffff1661241b61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890614096565b60405180910390fd5b6011600061247f91906136cb565b8181601191906124909291906136ec565b505050565b61249d61268c565b73ffffffffffffffffffffffffffffffffffffffff166124bb61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890614096565b60405180910390fd5b80600a9080519060200190612527929190613645565b5050565b61253361268c565b73ffffffffffffffffffffffffffffffffffffffff1661255161196a565b73ffffffffffffffffffffffffffffffffffffffff16146125a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259e90614096565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614d73565b60405180910390fd5b61261f81612e49565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061275e82612caf565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661278561268c565b73ffffffffffffffffffffffffffffffffffffffff1614806127e157506127aa61268c565b73ffffffffffffffffffffffffffffffffffffffff166127c984610d33565b73ffffffffffffffffffffffffffffffffffffffff16145b806127fd57506127fc82600001516127f761268c565b612361565b5b90508061283f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283690614e05565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a890614e97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790614f29565b60405180910390fd5b61292d8585856001613288565b61293d60008484600001516126a1565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612c2157612b8081612694565b15612c205782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c8a858585600161328e565b5050505050565b612cab828260405180602001604052806000815250613294565b5050565b612cb761378c565b612cc082612694565b612cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf690614fbb565b60405180910390fd5b60008290505b60008110612e08576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612df9578092505050612e44565b50808060019003915050612d05565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3b9061504d565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f308473ffffffffffffffffffffffffffffffffffffffff166132a6565b15613089578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f5961268c565b8786866040518563ffffffff1660e01b8152600401612f7b94939291906150c2565b6020604051808303816000875af1925050508015612fb757506040513d601f19601f82011682018060405250810190612fb49190615123565b60015b613039573d8060008114612fe7576040519150601f19603f3d011682016040523d82523d6000602084013e612fec565b606091505b506000815103613031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302890614b4e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061308e565b600190505b949350505050565b6060600880546130a5906140e5565b80601f01602080910402602001604051908101604052809291908181526020018280546130d1906140e5565b801561311e5780601f106130f35761010080835404028352916020019161311e565b820191906000526020600020905b81548152906001019060200180831161310157829003601f168201915b5050505050905090565b60606000820361316f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613283565b600082905060005b600082146131a157808061318a9061444e565b915050600a8261319a919061517f565b9150613177565b60008167ffffffffffffffff8111156131bd576131bc613c85565b5b6040519080825280601f01601f1916602001820160405280156131ef5781602001600182028036833780820191505090505b5090505b6000851461327c576001826132089190614852565b9150600a8561321791906151b0565b603061322391906146fe565b60f81b818381518110613239576132386143f0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613275919061517f565b94506131f3565b8093505050505b919050565b50505050565b50505050565b6132a183838360016132c9565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361333e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333590615253565b60405180910390fd5b60008403613381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613378906152e5565b60405180910390fd5b61338e6000868387613288565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561362857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613613576135d36000888488612f0f565b613612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360990614b4e565b60405180910390fd5b5b8180600101925050808060010191505061355c565b50806000819055505061363e600086838761328e565b5050505050565b828054613651906140e5565b90600052602060002090601f01602090048101928261367357600085556136ba565b82601f1061368c57805160ff19168380011785556136ba565b828001600101855582156136ba579182015b828111156136b957825182559160200191906001019061369e565b5b5090506136c791906137c6565b5090565b50805460008255906000526020600020908101906136e991906137c6565b50565b82805482825590600052602060002090810192821561377b579160200282015b8281111561377a57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061370c565b5b50905061378891906137c6565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137df5760008160009055506001016137c7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61382c816137f7565b811461383757600080fd5b50565b60008135905061384981613823565b92915050565b600060208284031215613865576138646137ed565b5b60006138738482850161383a565b91505092915050565b60008115159050919050565b6138918161387c565b82525050565b60006020820190506138ac6000830184613888565b92915050565b6138bb8161387c565b81146138c657600080fd5b50565b6000813590506138d8816138b2565b92915050565b6000602082840312156138f4576138f36137ed565b5b6000613902848285016138c9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561394557808201518184015260208101905061392a565b83811115613954576000848401525b50505050565b6000601f19601f8301169050919050565b60006139768261390b565b6139808185613916565b9350613990818560208601613927565b6139998161395a565b840191505092915050565b600060208201905081810360008301526139be818461396b565b905092915050565b6000819050919050565b6139d9816139c6565b81146139e457600080fd5b50565b6000813590506139f6816139d0565b92915050565b600060208284031215613a1257613a116137ed565b5b6000613a20848285016139e7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a5482613a29565b9050919050565b613a6481613a49565b82525050565b6000602082019050613a7f6000830184613a5b565b92915050565b613a8e81613a49565b8114613a9957600080fd5b50565b600081359050613aab81613a85565b92915050565b60008060408385031215613ac857613ac76137ed565b5b6000613ad685828601613a9c565b9250506020613ae7858286016139e7565b9150509250929050565b613afa816139c6565b82525050565b6000602082019050613b156000830184613af1565b92915050565b600080600060608486031215613b3457613b336137ed565b5b6000613b4286828701613a9c565b9350506020613b5386828701613a9c565b9250506040613b64868287016139e7565b9150509250925092565b600060208284031215613b8457613b836137ed565b5b6000613b9284828501613a9c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bd0816139c6565b82525050565b6000613be28383613bc7565b60208301905092915050565b6000602082019050919050565b6000613c0682613b9b565b613c108185613ba6565b9350613c1b83613bb7565b8060005b83811015613c4c578151613c338882613bd6565b9750613c3e83613bee565b925050600181019050613c1f565b5085935050505092915050565b60006020820190508181036000830152613c738184613bfb565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613cbd8261395a565b810181811067ffffffffffffffff82111715613cdc57613cdb613c85565b5b80604052505050565b6000613cef6137e3565b9050613cfb8282613cb4565b919050565b600067ffffffffffffffff821115613d1b57613d1a613c85565b5b613d248261395a565b9050602081019050919050565b82818337600083830152505050565b6000613d53613d4e84613d00565b613ce5565b905082815260208101848484011115613d6f57613d6e613c80565b5b613d7a848285613d31565b509392505050565b600082601f830112613d9757613d96613c7b565b5b8135613da7848260208601613d40565b91505092915050565b600060208284031215613dc657613dc56137ed565b5b600082013567ffffffffffffffff811115613de457613de36137f2565b5b613df084828501613d82565b91505092915050565b60008060408385031215613e1057613e0f6137ed565b5b6000613e1e85828601613a9c565b9250506020613e2f858286016138c9565b9150509250929050565b600067ffffffffffffffff821115613e5457613e53613c85565b5b613e5d8261395a565b9050602081019050919050565b6000613e7d613e7884613e39565b613ce5565b905082815260208101848484011115613e9957613e98613c80565b5b613ea4848285613d31565b509392505050565b600082601f830112613ec157613ec0613c7b565b5b8135613ed1848260208601613e6a565b91505092915050565b60008060008060808587031215613ef457613ef36137ed565b5b6000613f0287828801613a9c565b9450506020613f1387828801613a9c565b9350506040613f24878288016139e7565b925050606085013567ffffffffffffffff811115613f4557613f446137f2565b5b613f5187828801613eac565b91505092959194509250565b60008060408385031215613f7457613f736137ed565b5b6000613f8285828601613a9c565b9250506020613f9385828601613a9c565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613fbd57613fbc613c7b565b5b8235905067ffffffffffffffff811115613fda57613fd9613f9d565b5b602083019150836020820283011115613ff657613ff5613fa2565b5b9250929050565b60008060208385031215614014576140136137ed565b5b600083013567ffffffffffffffff811115614032576140316137f2565b5b61403e85828601613fa7565b92509250509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614080602083613916565b915061408b8261404a565b602082019050919050565b600060208201905081810360008301526140af81614073565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140fd57607f821691505b6020821081036141105761410f6140b6565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000614172602d83613916565b915061417d82614116565b604082019050919050565b600060208201905081810360008301526141a181614165565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000614204602283613916565b915061420f826141a8565b604082019050919050565b60006020820190508181036000830152614233816141f7565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000614296603983613916565b91506142a18261423a565b604082019050919050565b600060208201905081810360008301526142c581614289565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614328602283613916565b9150614333826142cc565b604082019050919050565b600060208201905081810360008301526143578161431b565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006143ba602e83613916565b91506143c58261435e565b604082019050919050565b600060208201905081810360008301526143e9816143ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614459826139c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361448b5761448a61441f565b5b600182019050919050565b600081905092915050565b50565b60006144b1600083614496565b91506144bc826144a1565b600082019050919050565b60006144d2826144a4565b9150819050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614538602383613916565b9150614543826144dc565b604082019050919050565b600060208201905081810360008301526145678161452b565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006145ca602b83613916565b91506145d58261456e565b604082019050919050565b600060208201905081810360008301526145f9816145bd565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b6000614636601283613916565b915061464182614600565b602082019050919050565b6000602082019050818103600083015261466581614629565b9050919050565b7f4d696e7420616d6f756e74206d7573742062652067726561746572207468616e60008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c8602283613916565b91506146d38261466c565b604082019050919050565b600060208201905081810360008301526146f7816146bb565b9050919050565b6000614709826139c6565b9150614714836139c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147495761474861441f565b5b828201905092915050565b7f4d696e7420616d6f756e74206d75737420626520657175616c20746f206f722060008201527f62656c6f7720617661696c61626c6520746f6b656e7300000000000000000000602082015250565b60006147b0603683613916565b91506147bb82614754565b604082019050919050565b600060208201905081810360008301526147df816147a3565b9050919050565b7f55736572206973206e6f742077686974656c69737465642e0000000000000000600082015250565b600061481c601883613916565b9150614827826147e6565b602082019050919050565b6000602082019050818103600083015261484b8161480f565b9050919050565b600061485d826139c6565b9150614868836139c6565b92508282101561487b5761487a61441f565b5b828203905092915050565b6000614891826139c6565b915061489c836139c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148d5576148d461441f565b5b828202905092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614916601483613916565b9150614921826148e0565b602082019050919050565b6000602082019050818103600083015261494581614909565b9050919050565b7f4d696e7420616d6f756e7420697320657863656564696e672050657277616c6c60008201527f657420546f6b656e206c696d6974000000000000000000000000000000000000602082015250565b60006149a8602e83613916565b91506149b38261494c565b604082019050919050565b600060208201905081810360008301526149d78161499b565b9050919050565b7f4d696e7420616d6f756e742069732067726561746572207468616e206d61782060008201527f6d696e7420616d6f756e74000000000000000000000000000000000000000000602082015250565b6000614a3a602b83613916565b9150614a45826149de565b604082019050919050565b60006020820190508181036000830152614a6981614a2d565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614aa6601a83613916565b9150614ab182614a70565b602082019050919050565b60006020820190508181036000830152614ad581614a99565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614b38603383613916565b9150614b4382614adc565b604082019050919050565b60006020820190508181036000830152614b6781614b2b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614bca602f83613916565b9150614bd582614b6e565b604082019050919050565b60006020820190508181036000830152614bf981614bbd565b9050919050565b600081905092915050565b6000614c168261390b565b614c208185614c00565b9350614c30818560208601613927565b80840191505092915050565b60008190508160005260206000209050919050565b60008154614c5e816140e5565b614c688186614c00565b94506001821660008114614c835760018114614c9457614cc7565b60ff19831686528186019350614cc7565b614c9d85614c3c565b60005b83811015614cbf57815481890152600182019150602081019050614ca0565b838801955050505b50505092915050565b6000614cdc8286614c0b565b9150614ce88285614c0b565b9150614cf48284614c51565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d5d602683613916565b9150614d6882614d01565b604082019050919050565b60006020820190508181036000830152614d8c81614d50565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614def603283613916565b9150614dfa82614d93565b604082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614e81602683613916565b9150614e8c82614e25565b604082019050919050565b60006020820190508181036000830152614eb081614e74565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f13602583613916565b9150614f1e82614eb7565b604082019050919050565b60006020820190508181036000830152614f4281614f06565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614fa5602a83613916565b9150614fb082614f49565b604082019050919050565b60006020820190508181036000830152614fd481614f98565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000615037602f83613916565b915061504282614fdb565b604082019050919050565b600060208201905081810360008301526150668161502a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006150948261506d565b61509e8185615078565b93506150ae818560208601613927565b6150b78161395a565b840191505092915050565b60006080820190506150d76000830187613a5b565b6150e46020830186613a5b565b6150f16040830185613af1565b81810360608301526151038184615089565b905095945050505050565b60008151905061511d81613823565b92915050565b600060208284031215615139576151386137ed565b5b60006151478482850161510e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061518a826139c6565b9150615195836139c6565b9250826151a5576151a4615150565b5b828204905092915050565b60006151bb826139c6565b91506151c6836139c6565b9250826151d6576151d5615150565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061523d602183613916565b9150615248826151e1565b604082019050919050565b6000602082019050818103600083015261526c81615230565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b60006152cf602883613916565b91506152da82615273565b604082019050919050565b600060208201905081810360008301526152fe816152c2565b905091905056fea264697066735822122057e1ec1013a5fcccaf01f349fe2a8ba2ac2a1c0bb5dcfb6ae15068c63d4d5d7f64736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000184f766572776174657220466c616d696e676f205371756164000000000000000000000000000000000000000000000000000000000000000000000000000000034f465300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d586476386b6d4348537a446d6a79314869694838486a4b674d64743666696d48486a735541566845656b75732f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5545635a45336858334543354c7a5273473670476733476e356d74584b33557547384e566f4673575a66556f2f00000000000000000000
Deployed Bytecode
0x6080604052600436106102885760003560e01c80636c0360eb1161015a578063ba4e5c49116100c1578063d66dd2191161007a578063d66dd219146109b4578063da3ef23f146109dd578063e985e9c514610a06578063edec5f2714610a43578063f2c4ce1e14610a6c578063f2fde38b14610a9557610288565b8063ba4e5c4914610890578063ba7d2c76146108cd578063c6682862146108f8578063c87b56dd14610923578063d0eb26b014610960578063d5abeb011461098957610288565b806395d89b411161011357806395d89b41146107b55780639c70b512146107e0578063a0712d681461080b578063a22cb46514610827578063a475b5dd14610850578063b88d4fde1461086757610288565b80636c0360eb146106b757806370a08231146106e2578063715018a61461071f5780637e5b0054146107365780637f00c7a6146107615780638da5cb5b1461078a57610288565b80632f745c59116101fe57806344a0d68a116101b757806344a0d68a146105955780634f6ccce7146105be57806351830227146105fb57806355f804b3146106265780635c975abb1461064f5780636352211e1461067a57610288565b80632f745c59146104825780633af32abf146104bf5780633c952764146104fc5780633ccfd60b1461052557806342842e0e1461052f578063438b63001461055857610288565b8063095ea7b311610250578063095ea7b31461038657806313faede6146103af57806318160ddd146103da578063239c70ae1461040557806323b872dd146104305780632a2f3a6f1461045957610288565b806301ffc9a71461028d57806302329a29146102ca57806306fdde03146102f3578063081812fc1461031e578063081c8c441461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061384f565b610abe565b6040516102c19190613897565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec91906138de565b610c08565b005b3480156102ff57600080fd5b50610308610ca1565b60405161031591906139a4565b60405180910390f35b34801561032a57600080fd5b50610345600480360381019061034091906139fc565b610d33565b6040516103529190613a6a565b60405180910390f35b34801561036757600080fd5b50610370610db8565b60405161037d91906139a4565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613ab1565b610e46565b005b3480156103bb57600080fd5b506103c4610f5e565b6040516103d19190613b00565b60405180910390f35b3480156103e657600080fd5b506103ef610f64565b6040516103fc9190613b00565b60405180910390f35b34801561041157600080fd5b5061041a610f6d565b6040516104279190613b00565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190613b1b565b610f73565b005b34801561046557600080fd5b50610480600480360381019061047b9190613ab1565b610f83565b005b34801561048e57600080fd5b506104a960048036038101906104a49190613ab1565b611034565b6040516104b69190613b00565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190613b6e565b611224565b6040516104f39190613897565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906138de565b6112d2565b005b61052d61136b565b005b34801561053b57600080fd5b5061055660048036038101906105519190613b1b565b611467565b005b34801561056457600080fd5b5061057f600480360381019061057a9190613b6e565b611487565b60405161058c9190613c59565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b791906139fc565b611535565b005b3480156105ca57600080fd5b506105e560048036038101906105e091906139fc565b6115bb565b6040516105f29190613b00565b60405180910390f35b34801561060757600080fd5b5061061061160e565b60405161061d9190613897565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190613db0565b611621565b005b34801561065b57600080fd5b506106646116b7565b6040516106719190613897565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c91906139fc565b6116ca565b6040516106ae9190613a6a565b60405180910390f35b3480156106c357600080fd5b506106cc6116e0565b6040516106d991906139a4565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613b6e565b61176e565b6040516107169190613b00565b60405180910390f35b34801561072b57600080fd5b50610734611856565b005b34801561074257600080fd5b5061074b6118de565b6040516107589190613b00565b60405180910390f35b34801561076d57600080fd5b50610788600480360381019061078391906139fc565b6118e4565b005b34801561079657600080fd5b5061079f61196a565b6040516107ac9190613a6a565b60405180910390f35b3480156107c157600080fd5b506107ca611994565b6040516107d791906139a4565b60405180910390f35b3480156107ec57600080fd5b506107f5611a26565b6040516108029190613897565b60405180910390f35b610825600480360381019061082091906139fc565b611a39565b005b34801561083357600080fd5b5061084e60048036038101906108499190613df9565b611d19565b005b34801561085c57600080fd5b50610865611e99565b005b34801561087357600080fd5b5061088e60048036038101906108899190613eda565b611f32565b005b34801561089c57600080fd5b506108b760048036038101906108b291906139fc565b611f8e565b6040516108c49190613a6a565b60405180910390f35b3480156108d957600080fd5b506108e2611fcd565b6040516108ef9190613b00565b60405180910390f35b34801561090457600080fd5b5061090d611fd3565b60405161091a91906139a4565b60405180910390f35b34801561092f57600080fd5b5061094a600480360381019061094591906139fc565b612061565b60405161095791906139a4565b60405180910390f35b34801561096c57600080fd5b50610987600480360381019061098291906139fc565b6121b9565b005b34801561099557600080fd5b5061099e61223f565b6040516109ab9190613b00565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d691906139fc565b612245565b005b3480156109e957600080fd5b50610a0460048036038101906109ff9190613db0565b6122cb565b005b348015610a1257600080fd5b50610a2d6004803603810190610a289190613f5d565b612361565b604051610a3a9190613897565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190613ffd565b6123f5565b005b348015610a7857600080fd5b50610a936004803603810190610a8e9190613db0565b612495565b005b348015610aa157600080fd5b50610abc6004803603810190610ab79190613b6e565b61252b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c015750610c0082612622565b5b9050919050565b610c1061268c565b73ffffffffffffffffffffffffffffffffffffffff16610c2e61196a565b73ffffffffffffffffffffffffffffffffffffffff1614610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90614096565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060018054610cb0906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdc906140e5565b8015610d295780601f10610cfe57610100808354040283529160200191610d29565b820191906000526020600020905b815481529060010190602001808311610d0c57829003601f168201915b5050505050905090565b6000610d3e82612694565b610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490614188565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a8054610dc5906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610df1906140e5565b8015610e3e5780601f10610e1357610100808354040283529160200191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2157829003601f168201915b505050505081565b6000610e51826116ca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb89061421a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee061268c565b73ffffffffffffffffffffffffffffffffffffffff161480610f0f5750610f0e81610f0961268c565b612361565b5b610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906142ac565b60405180910390fd5b610f598383836126a1565b505050565b600b5481565b60008054905090565b600d5481565b610f7e838383612753565b505050565b610f8b61268c565b73ffffffffffffffffffffffffffffffffffffffff16610fa961196a565b73ffffffffffffffffffffffffffffffffffffffff1614610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff690614096565b60405180910390fd5b601060009054906101000a900460ff161561101957600080fd5b6000811161102657600080fd5b6110308282612c91565b5050565b600061103f8361176e565b8210611080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110779061433e565b60405180910390fd5b600061108a610f64565b905060008060005b838110156111e2576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461118457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111d4578684036111cb57819550505050505061121e565b83806001019450505b508080600101915050611092565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906143d0565b60405180910390fd5b92915050565b600080600090505b6011805490508110156112c7578273ffffffffffffffffffffffffffffffffffffffff1660118281548110611264576112636143f0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112b45760019150506112cd565b80806112bf9061444e565b91505061122c565b50600090505b919050565b6112da61268c565b73ffffffffffffffffffffffffffffffffffffffff166112f861196a565b73ffffffffffffffffffffffffffffffffffffffff161461134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590614096565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b61137361268c565b73ffffffffffffffffffffffffffffffffffffffff1661139161196a565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614096565b60405180910390fd5b60006113f161196a565b73ffffffffffffffffffffffffffffffffffffffff1647604051611414906144c7565b60006040518083038185875af1925050503d8060008114611451576040519150601f19603f3d011682016040523d82523d6000602084013e611456565b606091505b505090508061146457600080fd5b50565b61148283838360405180602001604052806000815250611f32565b505050565b606060006114948361176e565b905060008167ffffffffffffffff8111156114b2576114b1613c85565b5b6040519080825280602002602001820160405280156114e05781602001602082028036833780820191505090505b50905060005b8281101561152a576114f88582611034565b82828151811061150b5761150a6143f0565b5b60200260200101818152505080806115229061444e565b9150506114e6565b508092505050919050565b61153d61268c565b73ffffffffffffffffffffffffffffffffffffffff1661155b61196a565b73ffffffffffffffffffffffffffffffffffffffff16146115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890614096565b60405180910390fd5b80600b8190555050565b60006115c5610f64565b8210611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd9061454e565b60405180910390fd5b819050919050565b601060019054906101000a900460ff1681565b61162961268c565b73ffffffffffffffffffffffffffffffffffffffff1661164761196a565b73ffffffffffffffffffffffffffffffffffffffff161461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490614096565b60405180910390fd5b80600890805190602001906116b3929190613645565b5050565b601060009054906101000a900460ff1681565b60006116d582612caf565b600001519050919050565b600880546116ed906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611719906140e5565b80156117665780601f1061173b57610100808354040283529160200191611766565b820191906000526020600020905b81548152906001019060200180831161174957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d5906145e0565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61185e61268c565b73ffffffffffffffffffffffffffffffffffffffff1661187c61196a565b73ffffffffffffffffffffffffffffffffffffffff16146118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990614096565b60405180910390fd5b6118dc6000612e49565b565b600f5481565b6118ec61268c565b73ffffffffffffffffffffffffffffffffffffffff1661190a61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790614096565b60405180910390fd5b80600d8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546119a3906140e5565b80601f01602080910402602001604051908101604052809291908181526020018280546119cf906140e5565b8015611a1c5780601f106119f157610100808354040283529160200191611a1c565b820191906000526020600020905b8154815290600101906020018083116119ff57829003601f168201915b5050505050905090565b601060029054906101000a900460ff1681565b601060009054906101000a900460ff1615611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a809061464c565b60405180910390fd5b6000611a93610f64565b905060008211611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf906146de565b60405180910390fd5b600c548282611ae791906146fe565b1115611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906147c6565b60405180910390fd5b611b3061196a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0b5760011515601060029054906101000a900460ff16151503611bc657611b8633611224565b611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90614832565b60405180910390fd5b5b600f54600c54611bd69190614852565b8282611be291906146fe565b1115611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a906147c6565b60405180910390fd5b81600b54611c319190614886565b341015611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a9061492c565b60405180910390fd5b6000611c7e3361176e565b9050600e548110611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb906149be565b60405180910390fd5b600d54831115611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0090614a50565b60405180910390fd5b505b611d153383612c91565b5050565b611d2161268c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590614abc565b60405180910390fd5b8060066000611d9b61268c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e4861268c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e8d9190613897565b60405180910390a35050565b611ea161268c565b73ffffffffffffffffffffffffffffffffffffffff16611ebf61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90614096565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611f3d848484612753565b611f4984848484612f0f565b611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614b4e565b60405180910390fd5b50505050565b60118181548110611f9e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60098054611fe0906140e5565b80601f016020809104026020016040519081016040528092919081815260200182805461200c906140e5565b80156120595780601f1061202e57610100808354040283529160200191612059565b820191906000526020600020905b81548152906001019060200180831161203c57829003601f168201915b505050505081565b606061206c82612694565b6120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a290614be0565b60405180910390fd5b60001515601060019054906101000a900460ff1615150361215857600a80546120d3906140e5565b80601f01602080910402602001604051908101604052809291908181526020018280546120ff906140e5565b801561214c5780601f106121215761010080835404028352916020019161214c565b820191906000526020600020905b81548152906001019060200180831161212f57829003601f168201915b505050505090506121b4565b6000612162613096565b9050600081511161218257604051806020016040528060008152506121b0565b8061218c84613128565b60096040516020016121a093929190614cd0565b6040516020818303038152906040525b9150505b919050565b6121c161268c565b73ffffffffffffffffffffffffffffffffffffffff166121df61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90614096565b60405180910390fd5b80600e8190555050565b600c5481565b61224d61268c565b73ffffffffffffffffffffffffffffffffffffffff1661226b61196a565b73ffffffffffffffffffffffffffffffffffffffff16146122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890614096565b60405180910390fd5b80600f8190555050565b6122d361268c565b73ffffffffffffffffffffffffffffffffffffffff166122f161196a565b73ffffffffffffffffffffffffffffffffffffffff1614612347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233e90614096565b60405180910390fd5b806009908051906020019061235d929190613645565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123fd61268c565b73ffffffffffffffffffffffffffffffffffffffff1661241b61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890614096565b60405180910390fd5b6011600061247f91906136cb565b8181601191906124909291906136ec565b505050565b61249d61268c565b73ffffffffffffffffffffffffffffffffffffffff166124bb61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890614096565b60405180910390fd5b80600a9080519060200190612527929190613645565b5050565b61253361268c565b73ffffffffffffffffffffffffffffffffffffffff1661255161196a565b73ffffffffffffffffffffffffffffffffffffffff16146125a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259e90614096565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614d73565b60405180910390fd5b61261f81612e49565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061275e82612caf565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661278561268c565b73ffffffffffffffffffffffffffffffffffffffff1614806127e157506127aa61268c565b73ffffffffffffffffffffffffffffffffffffffff166127c984610d33565b73ffffffffffffffffffffffffffffffffffffffff16145b806127fd57506127fc82600001516127f761268c565b612361565b5b90508061283f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283690614e05565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a890614e97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790614f29565b60405180910390fd5b61292d8585856001613288565b61293d60008484600001516126a1565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612c2157612b8081612694565b15612c205782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c8a858585600161328e565b5050505050565b612cab828260405180602001604052806000815250613294565b5050565b612cb761378c565b612cc082612694565b612cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf690614fbb565b60405180910390fd5b60008290505b60008110612e08576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612df9578092505050612e44565b50808060019003915050612d05565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3b9061504d565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f308473ffffffffffffffffffffffffffffffffffffffff166132a6565b15613089578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f5961268c565b8786866040518563ffffffff1660e01b8152600401612f7b94939291906150c2565b6020604051808303816000875af1925050508015612fb757506040513d601f19601f82011682018060405250810190612fb49190615123565b60015b613039573d8060008114612fe7576040519150601f19603f3d011682016040523d82523d6000602084013e612fec565b606091505b506000815103613031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302890614b4e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061308e565b600190505b949350505050565b6060600880546130a5906140e5565b80601f01602080910402602001604051908101604052809291908181526020018280546130d1906140e5565b801561311e5780601f106130f35761010080835404028352916020019161311e565b820191906000526020600020905b81548152906001019060200180831161310157829003601f168201915b5050505050905090565b60606000820361316f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613283565b600082905060005b600082146131a157808061318a9061444e565b915050600a8261319a919061517f565b9150613177565b60008167ffffffffffffffff8111156131bd576131bc613c85565b5b6040519080825280601f01601f1916602001820160405280156131ef5781602001600182028036833780820191505090505b5090505b6000851461327c576001826132089190614852565b9150600a8561321791906151b0565b603061322391906146fe565b60f81b818381518110613239576132386143f0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613275919061517f565b94506131f3565b8093505050505b919050565b50505050565b50505050565b6132a183838360016132c9565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361333e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333590615253565b60405180910390fd5b60008403613381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613378906152e5565b60405180910390fd5b61338e6000868387613288565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561362857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613613576135d36000888488612f0f565b613612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360990614b4e565b60405180910390fd5b5b8180600101925050808060010191505061355c565b50806000819055505061363e600086838761328e565b5050505050565b828054613651906140e5565b90600052602060002090601f01602090048101928261367357600085556136ba565b82601f1061368c57805160ff19168380011785556136ba565b828001600101855582156136ba579182015b828111156136b957825182559160200191906001019061369e565b5b5090506136c791906137c6565b5090565b50805460008255906000526020600020908101906136e991906137c6565b50565b82805482825590600052602060002090810192821561377b579160200282015b8281111561377a57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061370c565b5b50905061378891906137c6565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137df5760008160009055506001016137c7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61382c816137f7565b811461383757600080fd5b50565b60008135905061384981613823565b92915050565b600060208284031215613865576138646137ed565b5b60006138738482850161383a565b91505092915050565b60008115159050919050565b6138918161387c565b82525050565b60006020820190506138ac6000830184613888565b92915050565b6138bb8161387c565b81146138c657600080fd5b50565b6000813590506138d8816138b2565b92915050565b6000602082840312156138f4576138f36137ed565b5b6000613902848285016138c9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561394557808201518184015260208101905061392a565b83811115613954576000848401525b50505050565b6000601f19601f8301169050919050565b60006139768261390b565b6139808185613916565b9350613990818560208601613927565b6139998161395a565b840191505092915050565b600060208201905081810360008301526139be818461396b565b905092915050565b6000819050919050565b6139d9816139c6565b81146139e457600080fd5b50565b6000813590506139f6816139d0565b92915050565b600060208284031215613a1257613a116137ed565b5b6000613a20848285016139e7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a5482613a29565b9050919050565b613a6481613a49565b82525050565b6000602082019050613a7f6000830184613a5b565b92915050565b613a8e81613a49565b8114613a9957600080fd5b50565b600081359050613aab81613a85565b92915050565b60008060408385031215613ac857613ac76137ed565b5b6000613ad685828601613a9c565b9250506020613ae7858286016139e7565b9150509250929050565b613afa816139c6565b82525050565b6000602082019050613b156000830184613af1565b92915050565b600080600060608486031215613b3457613b336137ed565b5b6000613b4286828701613a9c565b9350506020613b5386828701613a9c565b9250506040613b64868287016139e7565b9150509250925092565b600060208284031215613b8457613b836137ed565b5b6000613b9284828501613a9c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bd0816139c6565b82525050565b6000613be28383613bc7565b60208301905092915050565b6000602082019050919050565b6000613c0682613b9b565b613c108185613ba6565b9350613c1b83613bb7565b8060005b83811015613c4c578151613c338882613bd6565b9750613c3e83613bee565b925050600181019050613c1f565b5085935050505092915050565b60006020820190508181036000830152613c738184613bfb565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613cbd8261395a565b810181811067ffffffffffffffff82111715613cdc57613cdb613c85565b5b80604052505050565b6000613cef6137e3565b9050613cfb8282613cb4565b919050565b600067ffffffffffffffff821115613d1b57613d1a613c85565b5b613d248261395a565b9050602081019050919050565b82818337600083830152505050565b6000613d53613d4e84613d00565b613ce5565b905082815260208101848484011115613d6f57613d6e613c80565b5b613d7a848285613d31565b509392505050565b600082601f830112613d9757613d96613c7b565b5b8135613da7848260208601613d40565b91505092915050565b600060208284031215613dc657613dc56137ed565b5b600082013567ffffffffffffffff811115613de457613de36137f2565b5b613df084828501613d82565b91505092915050565b60008060408385031215613e1057613e0f6137ed565b5b6000613e1e85828601613a9c565b9250506020613e2f858286016138c9565b9150509250929050565b600067ffffffffffffffff821115613e5457613e53613c85565b5b613e5d8261395a565b9050602081019050919050565b6000613e7d613e7884613e39565b613ce5565b905082815260208101848484011115613e9957613e98613c80565b5b613ea4848285613d31565b509392505050565b600082601f830112613ec157613ec0613c7b565b5b8135613ed1848260208601613e6a565b91505092915050565b60008060008060808587031215613ef457613ef36137ed565b5b6000613f0287828801613a9c565b9450506020613f1387828801613a9c565b9350506040613f24878288016139e7565b925050606085013567ffffffffffffffff811115613f4557613f446137f2565b5b613f5187828801613eac565b91505092959194509250565b60008060408385031215613f7457613f736137ed565b5b6000613f8285828601613a9c565b9250506020613f9385828601613a9c565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613fbd57613fbc613c7b565b5b8235905067ffffffffffffffff811115613fda57613fd9613f9d565b5b602083019150836020820283011115613ff657613ff5613fa2565b5b9250929050565b60008060208385031215614014576140136137ed565b5b600083013567ffffffffffffffff811115614032576140316137f2565b5b61403e85828601613fa7565b92509250509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614080602083613916565b915061408b8261404a565b602082019050919050565b600060208201905081810360008301526140af81614073565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140fd57607f821691505b6020821081036141105761410f6140b6565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000614172602d83613916565b915061417d82614116565b604082019050919050565b600060208201905081810360008301526141a181614165565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000614204602283613916565b915061420f826141a8565b604082019050919050565b60006020820190508181036000830152614233816141f7565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000614296603983613916565b91506142a18261423a565b604082019050919050565b600060208201905081810360008301526142c581614289565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614328602283613916565b9150614333826142cc565b604082019050919050565b600060208201905081810360008301526143578161431b565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006143ba602e83613916565b91506143c58261435e565b604082019050919050565b600060208201905081810360008301526143e9816143ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614459826139c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361448b5761448a61441f565b5b600182019050919050565b600081905092915050565b50565b60006144b1600083614496565b91506144bc826144a1565b600082019050919050565b60006144d2826144a4565b9150819050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614538602383613916565b9150614543826144dc565b604082019050919050565b600060208201905081810360008301526145678161452b565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006145ca602b83613916565b91506145d58261456e565b604082019050919050565b600060208201905081810360008301526145f9816145bd565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b6000614636601283613916565b915061464182614600565b602082019050919050565b6000602082019050818103600083015261466581614629565b9050919050565b7f4d696e7420616d6f756e74206d7573742062652067726561746572207468616e60008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c8602283613916565b91506146d38261466c565b604082019050919050565b600060208201905081810360008301526146f7816146bb565b9050919050565b6000614709826139c6565b9150614714836139c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147495761474861441f565b5b828201905092915050565b7f4d696e7420616d6f756e74206d75737420626520657175616c20746f206f722060008201527f62656c6f7720617661696c61626c6520746f6b656e7300000000000000000000602082015250565b60006147b0603683613916565b91506147bb82614754565b604082019050919050565b600060208201905081810360008301526147df816147a3565b9050919050565b7f55736572206973206e6f742077686974656c69737465642e0000000000000000600082015250565b600061481c601883613916565b9150614827826147e6565b602082019050919050565b6000602082019050818103600083015261484b8161480f565b9050919050565b600061485d826139c6565b9150614868836139c6565b92508282101561487b5761487a61441f565b5b828203905092915050565b6000614891826139c6565b915061489c836139c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148d5576148d461441f565b5b828202905092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614916601483613916565b9150614921826148e0565b602082019050919050565b6000602082019050818103600083015261494581614909565b9050919050565b7f4d696e7420616d6f756e7420697320657863656564696e672050657277616c6c60008201527f657420546f6b656e206c696d6974000000000000000000000000000000000000602082015250565b60006149a8602e83613916565b91506149b38261494c565b604082019050919050565b600060208201905081810360008301526149d78161499b565b9050919050565b7f4d696e7420616d6f756e742069732067726561746572207468616e206d61782060008201527f6d696e7420616d6f756e74000000000000000000000000000000000000000000602082015250565b6000614a3a602b83613916565b9150614a45826149de565b604082019050919050565b60006020820190508181036000830152614a6981614a2d565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614aa6601a83613916565b9150614ab182614a70565b602082019050919050565b60006020820190508181036000830152614ad581614a99565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614b38603383613916565b9150614b4382614adc565b604082019050919050565b60006020820190508181036000830152614b6781614b2b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614bca602f83613916565b9150614bd582614b6e565b604082019050919050565b60006020820190508181036000830152614bf981614bbd565b9050919050565b600081905092915050565b6000614c168261390b565b614c208185614c00565b9350614c30818560208601613927565b80840191505092915050565b60008190508160005260206000209050919050565b60008154614c5e816140e5565b614c688186614c00565b94506001821660008114614c835760018114614c9457614cc7565b60ff19831686528186019350614cc7565b614c9d85614c3c565b60005b83811015614cbf57815481890152600182019150602081019050614ca0565b838801955050505b50505092915050565b6000614cdc8286614c0b565b9150614ce88285614c0b565b9150614cf48284614c51565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d5d602683613916565b9150614d6882614d01565b604082019050919050565b60006020820190508181036000830152614d8c81614d50565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614def603283613916565b9150614dfa82614d93565b604082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614e81602683613916565b9150614e8c82614e25565b604082019050919050565b60006020820190508181036000830152614eb081614e74565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f13602583613916565b9150614f1e82614eb7565b604082019050919050565b60006020820190508181036000830152614f4281614f06565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614fa5602a83613916565b9150614fb082614f49565b604082019050919050565b60006020820190508181036000830152614fd481614f98565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000615037602f83613916565b915061504282614fdb565b604082019050919050565b600060208201905081810360008301526150668161502a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006150948261506d565b61509e8185615078565b93506150ae818560208601613927565b6150b78161395a565b840191505092915050565b60006080820190506150d76000830187613a5b565b6150e46020830186613a5b565b6150f16040830185613af1565b81810360608301526151038184615089565b905095945050505050565b60008151905061511d81613823565b92915050565b600060208284031215615139576151386137ed565b5b60006151478482850161510e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061518a826139c6565b9150615195836139c6565b9250826151a5576151a4615150565b5b828204905092915050565b60006151bb826139c6565b91506151c6836139c6565b9250826151d6576151d5615150565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061523d602183613916565b9150615248826151e1565b604082019050919050565b6000602082019050818103600083015261526c81615230565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b60006152cf602883613916565b91506152da82615273565b604082019050919050565b600060208201905081810360008301526152fe816152c2565b905091905056fea264697066735822122057e1ec1013a5fcccaf01f349fe2a8ba2ac2a1c0bb5dcfb6ae15068c63d4d5d7f64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000184f766572776174657220466c616d696e676f205371756164000000000000000000000000000000000000000000000000000000000000000000000000000000034f465300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d586476386b6d4348537a446d6a79314869694838486a4b674d64743666696d48486a735541566845656b75732f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5545635a45336858334543354c7a5273473670476733476e356d74584b33557547384e566f4673575a66556f2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Overwater Flamingo Squad
Arg [1] : _symbol (string): OFS
Arg [2] : _initBaseURI (string): ipfs://QmXdv8kmCHSzDmjy1HiiH8HjKgMdt6fimHHjsUAVhEekus/
Arg [3] : _initNotRevealedUri (string): ipfs://QmUEcZE3hX3EC5LzRsG6pGg3Gn5mtXK3UuG8NVoFsWZfUo/
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [5] : 4f766572776174657220466c616d696e676f2053717561640000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4f46530000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d586476386b6d4348537a446d6a79314869694838486a4b
Arg [10] : 674d64743666696d48486a735541566845656b75732f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [12] : 697066733a2f2f516d5545635a45336858334543354c7a527347367047673347
Arg [13] : 6e356d74584b33557547384e566f4673575a66556f2f00000000000000000000
Deployed Bytecode Sourcemap
51677:7058:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34158:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57551:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36663:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38763:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51866:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38190:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52215:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31941:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52306:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40088:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58508:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32800:1256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54925:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57662:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58246:179;;;:::i;:::-;;40399:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55304:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56813:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32164:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52681:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57255:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52640:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36426:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51778:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34770:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5901:119;;;;;;;;;;;;;:::i;:::-;;52489:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56931:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5122:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36878:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52724:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53655:1196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39245:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56558:85;;;;;;;;;;;;;:::i;:::-;;40725:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52773:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52353;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51814;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55794:717;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56671:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52259:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58090:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57391:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39713:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57894:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57097:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6212:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34158:518;34345:4;34426:25;34411:40;;;:11;:40;;;;:113;;;;34491:33;34476:48;;;:11;:48;;;;34411:113;:188;;;;34564:35;34549:50;;;:11;:50;;;;34411:188;:249;;;;34624:36;34648:11;34624:23;:36::i;:::-;34411:249;34383:277;;34158:518;;;:::o;57551:95::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57624:6:::1;57615;;:15;;;;;;;;;;;;;;;;;;57551:95:::0;:::o;36663:116::-;36717:13;36758:5;36751:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36663:116;:::o;38763:380::-;38899:7;38970:16;38978:7;38970;:16::i;:::-;38940:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;39103:15;:24;39119:7;39103:24;;;;;;;;;;;;;;;;;;;;;39096:31;;38763:380;;;:::o;51866:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38190:477::-;38271:13;38287:24;38303:7;38287:15;:24::i;:::-;38271:40;;38344:5;38338:11;;:2;:11;;;38330:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38455:5;38439:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;38464:37;38481:5;38488:12;:10;:12::i;:::-;38464:16;:37::i;:::-;38439:62;38409:193;;;;;;;;;;;;:::i;:::-;;;;;;;;;38623:28;38632:2;38636:7;38645:5;38623:8;:28::i;:::-;38252:415;38190:477;;:::o;52215:29::-;;;;:::o;31941:116::-;31994:7;32029:12;;32022:19;;31941:116;:::o;52306:32::-;;;;:::o;40088:210::-;40254:28;40264:4;40270:2;40274:7;40254:9;:28::i;:::-;40088:210;;;:::o;58508:212::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58604:6:::1;;;;;;;;;;;58603:7;58595:16;;;::::0;::::1;;58652:1;58638:11;:15;58630:24;;;::::0;::::1;;58673:27;58683:3;58688:11;58673:9;:27::i;:::-;58508:212:::0;;:::o;32800:1256::-;32957:7;33014:16;33024:5;33014:9;:16::i;:::-;33006:5;:24;32998:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33088:22;33113:13;:11;:13::i;:::-;33088:38;;33145:19;33183:25;33396:9;33391:554;33411:14;33407:1;:18;33391:554;;;33459:31;33493:11;:14;33505:1;33493:14;;;;;;;;;;;33459:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33564:1;33538:28;;:9;:14;;;:28;;;33534:127;;33619:9;:14;;;33599:34;;33534:127;33712:5;33691:26;;:17;:26;;;33687:235;;33769:5;33754:11;:20;33750:101;;33818:1;33811:8;;;;;;;;;33750:101;33881:13;;;;;;;33687:235;33432:513;33427:3;;;;;;;33391:554;;;;33984:56;;;;;;;;;;:::i;:::-;;;;;;;;32800:1256;;;;;:::o;54925:361::-;54984:4;55018:9;55030:1;55018:13;;55013:215;55037:20;:27;;;;55033:1;:31;55013:215;;;55128:5;55101:32;;:20;55122:1;55101:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;55098:107;;55173:4;55166:11;;;;;55098:107;55066:3;;;;;:::i;:::-;;;;55013:215;;;;55261:5;55254:12;;54925:361;;;;:::o;57662:117::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57757:6:::1;57739:15;;:24;;;;;;;;;;;;;;;;;;57662:117:::0;:::o;58246:179::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58311:7:::1;58332;:5;:7::i;:::-;58324:21;;58353;58324:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58310:69;;;58406:2;58398:11;;;::::0;::::1;;58291:134;58246:179::o:0;40399:225::-;40569:39;40586:4;40592:2;40596:7;40569:39;;;;;;;;;;;;:16;:39::i;:::-;40399:225;;;:::o;55304:474::-;55415:16;55465:23;55491:17;55501:6;55491:9;:17::i;:::-;55465:43;;55527:25;55569:15;55555:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55527:58;;55609:9;55604:125;55624:15;55620:1;:19;55604:125;;;55679:30;55699:6;55707:1;55679:19;:30::i;:::-;55665:8;55674:1;55665:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;55641:3;;;;;:::i;:::-;;;;55604:125;;;;55754:8;55747:15;;;;55304:474;;;:::o;56813:102::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56891:8:::1;56884:4;:15;;;;56813:102:::0;:::o;32164:292::-;32299:7;32356:13;:11;:13::i;:::-;32348:5;:21;32340:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32435:5;32428:12;;32164:292;;;:::o;52681:28::-;;;;;;;;;;;;;:::o;57255:120::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57348:11:::1;57338:7;:21;;;;;;;;;;;;:::i;:::-;;57255:120:::0;:::o;52640:26::-;;;;;;;;;;;;;:::o;36426:140::-;36490:7;36525:20;36537:7;36525:11;:20::i;:::-;:25;;;36518:32;;36426:140;;;:::o;51778:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34770:306::-;34834:7;34909:1;34892:19;;:5;:19;;;34862:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;35032:12;:19;35045:5;35032:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;35024:36;;35017:43;;34770:306;;;:::o;5901:119::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5974:30:::1;6001:1;5974:18;:30::i;:::-;5901:119::o:0;52489:32::-;;;;:::o;56931:138::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57036:17:::1;57020:13;:33;;;;56931:138:::0;:::o;5122:103::-;5168:7;5203:6;;;;;;;;;;;5196:13;;5122:103;:::o;36878:120::-;36934:13;36975:7;36968:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36878:120;:::o;52724:34::-;;;;;;;;;;;;;:::o;53655:1196::-;53733:6;;;;;;;;;;;53732:7;53724:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53781:14;53798:13;:11;:13::i;:::-;53781:30;;53852:1;53838:11;:15;53830:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53943:9;;53928:11;53919:6;:20;;;;:::i;:::-;:33;;53911:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;54067:7;:5;:7::i;:::-;54053:21;;:10;:21;;;54049:731;;54122:4;54103:23;;:15;;;;;;;;;;;:23;;;54099:142;;54163:25;54177:10;54163:13;:25::i;:::-;54155:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;54099:142;54307:11;;54295:9;;:23;;;;:::i;:::-;54280:11;54271:6;:20;;;;:::i;:::-;:47;;54263:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;54428:11;54421:4;;:18;;;;:::i;:::-;54408:9;:31;;54400:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;54487:23;54513:21;54523:10;54513:9;:21::i;:::-;54487:47;;54584:18;;54566:15;:36;54557:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;54699:13;;54684:11;:28;;54676:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;54076:704;54049:731;54798:34;54808:10;54820:11;54798:9;:34::i;:::-;53705:1146;53655:1196;:::o;39245:367::-;39407:12;:10;:12::i;:::-;39395:24;;:8;:24;;;39387:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39516:8;39471:18;:32;39490:12;:10;:12::i;:::-;39471:32;;;;;;;;;;;;;;;:42;39504:8;39471:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;39577:8;39548:48;;39563:12;:10;:12::i;:::-;39548:48;;;39587:8;39548:48;;;;;;:::i;:::-;;;;;;;;39245:367;;:::o;56558:85::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56623:4:::1;56612:8;;:15;;;;;;;;;;;;;;;;;;56558:85::o:0;40725:443::-;40932:28;40942:4;40948:2;40952:7;40932:9;:28::i;:::-;41009:48;41032:4;41038:2;41042:7;41051:5;41009:22;:48::i;:::-;40979:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;40725:443;;;;:::o;52773:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52353:::-;;;;:::o;51814:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55794:717::-;55952:13;56025:16;56033:7;56025;:16::i;:::-;55999:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;56180:5;56168:17;;:8;;;;;;;;;;;:17;;;56165:86;;56217:14;56210:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56165:86;56271:28;56302:10;:8;:10::i;:::-;56271:41;;56369:1;56344:14;56338:28;:32;:157;;;;;;;;;;;;;;;;;56418:14;56434:18;:7;:16;:18::i;:::-;56454:13;56401:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56338:157;56331:164;;;55794:717;;;;:::o;56671:126::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56775:6:::1;56754:18;:27;;;;56671:126:::0;:::o;52259:32::-;;;;:::o;58090:126::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58188:11:::1;58174;:25;;;;58090:126:::0;:::o;57391:144::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57502:17:::1;57486:13;:33;;;;;;;;;;;;:::i;:::-;;57391:144:::0;:::o;39713:278::-;39895:4;39940:18;:25;39959:5;39940:25;;;;;;;;;;;;;;;:35;39966:8;39940:35;;;;;;;;;;;;;;;;;;;;;;;;;39933:42;;39713:278;;;;:::o;57894:178::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57988:20:::1;;57981:27;;;;:::i;:::-;58050:6;;58027:20;:29;;;;;;;:::i;:::-;;57894:178:::0;;:::o;57097:142::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57208:15:::1;57191:14;:32;;;;;;;;;;;;:::i;:::-;;57097:142:::0;:::o;6212:286::-;5407:12;:10;:12::i;:::-;5396:23;;:7;:5;:7::i;:::-;:23;;;5388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6351:1:::1;6331:22;;:8;:22;;::::0;6301:134:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6454:28;6473:8;6454:18;:28::i;:::-;6212:286:::0;:::o;21040:271::-;21210:4;21270:25;21255:40;;;:11;:40;;;;21248:47;;21040:271;;;:::o;3598:114::-;3651:7;3686:10;3679:17;;3598:114;:::o;41481:127::-;41538:4;41580:12;;41570:7;:22;41563:29;;41481:127;;;:::o;47645:252::-;47827:2;47800:15;:24;47816:7;47800:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47873:7;47869:2;47853:28;;47862:5;47853:28;;;;;;;;;;;;47645:252;;;:::o;45045:2438::-;45200:35;45238:20;45250:7;45238:11;:20::i;:::-;45200:58;;45279:22;45321:13;:18;;;45305:34;;:12;:10;:12::i;:::-;:34;;;:95;;;;45388:12;:10;:12::i;:::-;45364:36;;:20;45376:7;45364:11;:20::i;:::-;:36;;;45305:95;:170;;;;45425:50;45442:13;:18;;;45462:12;:10;:12::i;:::-;45425:16;:50::i;:::-;45305:170;45279:197;;45527:17;45497:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;45711:4;45689:26;;:13;:18;;;:26;;;45659:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;45838:1;45824:16;;:2;:16;;;45816:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45903:43;45925:4;45931:2;45935:7;45944:1;45903:21;:43::i;:::-;46027:49;46044:1;46048:7;46057:13;:18;;;46027:8;:49::i;:::-;46442:1;46412:12;:18;46425:4;46412:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46494:1;46466:12;:16;46479:2;46466:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46548:2;46520:11;:20;46532:7;46520:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;46618:15;46573:11;:20;46585:7;46573:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;46910:19;46942:1;46932:7;:11;46910:33;;47011:1;46970:43;;:11;:24;46982:11;46970:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;46966:369;;47046:20;47054:11;47046:7;:20::i;:::-;47042:270;;;47131:13;:18;;;47099:11;:24;47111:11;47099:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;47222:13;:62;;;47180:11;:24;47192:11;47180:24;;;;;;;;;;;:39;;;:104;;;;;;;;;;;;;;;;;;47042:270;46966:369;46379:975;47398:7;47394:2;47379:27;;47388:4;47379:27;;;;;;;;;;;;47425:42;47446:4;47452:2;47456:7;47465:1;47425:20;:42::i;:::-;45181:2302;;45045:2438;;;:::o;41624:120::-;41701:27;41711:2;41715:8;41701:27;;;;;;;;;;;;:9;:27::i;:::-;41624:120;;:::o;35645:689::-;35757:21;;:::i;:::-;35820:16;35828:7;35820;:16::i;:::-;35812:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35942:12;35957:7;35942:22;;35937:285;35974:1;35966:4;:9;35937:285;;36012:31;36046:11;:17;36058:4;36046:17;;;;;;;;;;;36012:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36120:1;36094:28;;:9;:14;;;:28;;;36090:109;;36162:9;36155:16;;;;;;36090:109;35985:237;35977:6;;;;;;;;35937:285;;;;36261:57;;;;;;;;;;:::i;:::-;;;;;;;;35645:689;;;;:::o;6695:223::-;6777:16;6796:6;;;;;;;;;;;6777:25;;6830:8;6821:6;;:17;;;;;;;;;;;;;;;;;;6893:8;6862:40;;6883:8;6862:40;;;;;;;;;;;;6758:160;6695:223;:::o;48541:1225::-;48736:4;48765:15;:2;:13;;;:15::i;:::-;48761:990;;;48850:2;48834:36;;;48901:12;:10;:12::i;:::-;48944:4;48979:7;49017:5;48834:215;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48805:867;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49285:1;49268:6;:13;:18;49264:385;;49319:125;;;;;;;;;;:::i;:::-;;;;;;;;49264:385;49583:6;49577:13;49568:6;49564:2;49560:15;49553:38;48805:867;49139:45;;;49129:55;;;:6;:55;;;;49122:62;;;;;48761:990;49727:4;49720:11;;48541:1225;;;;;;;:::o;53348:124::-;53408:13;53449:7;53442:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53348:124;:::o;657:875::-;713:13;967:1;958:5;:10;954:69;;993:10;;;;;;;;;;;;;;;;;;;;;954:69;1041:12;1056:5;1041:20;;1080:14;1113:102;1128:1;1120:4;:9;1113:102;;1154:8;;;;;:::i;:::-;;;;1193:2;1185:10;;;;;:::i;:::-;;;1113:102;;;1233:19;1265:6;1255:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1233:39;;1291:186;1307:1;1298:5;:10;1291:186;;1343:1;1333:11;;;;;:::i;:::-;;;1418:2;1410:5;:10;;;;:::i;:::-;1397:2;:24;;;;:::i;:::-;1384:39;;1367:6;1374;1367:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1455:2;1446:11;;;;;:::i;:::-;;;1291:186;;;1509:6;1495:21;;;;;657:875;;;;:::o;50347:199::-;;;;;:::o;51051:198::-;;;;;:::o;42186:211::-;42349:32;42355:2;42359:8;42369:5;42376:4;42349:5;:32::i;:::-;42186:211;;;:::o;8404:366::-;8464:4;8753:1;8731:7;:19;;;:23;8724:30;;8404:366;;;:::o;42735:1977::-;42922:20;42945:12;;42922:35;;42998:1;42984:16;;:2;:16;;;42976:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43077:1;43065:8;:13;43057:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43144:61;43174:1;43178:2;43182:12;43196:8;43144:21;:61::i;:::-;43559:8;43523:12;:16;43536:2;43523:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43632:8;43591:12;:16;43604:2;43591:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43699:2;43666:11;:25;43678:12;43666:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;43774:15;43724:11;:25;43736:12;43724:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;43815:20;43838:12;43815:35;;43880:9;43875:670;43895:8;43891:1;:12;43875:670;;;43967:12;43963:2;43942:38;;43959:1;43942:38;;;;;;;;;;;;44011:4;44007:472;;;44090:242;44159:1;44200:2;44241:12;44292:5;44090:22;:242::i;:::-;44048:403;;;;;;;;;;;;:::i;:::-;;;;;;;;;44007:472;44507:14;;;;;;;43905:3;;;;;;;43875:670;;;;44584:12;44569;:27;;;;43490:1126;44636:60;44665:1;44669:2;44673:12;44687:8;44636:20;:60::i;:::-;42903:1809;42735:1977;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:117::-;14572:1;14569;14562:12;14586:117;14695:1;14692;14685:12;14726:568;14799:8;14809:6;14859:3;14852:4;14844:6;14840:17;14836:27;14826:122;;14867:79;;:::i;:::-;14826:122;14980:6;14967:20;14957:30;;15010:18;15002:6;14999:30;14996:117;;;15032:79;;:::i;:::-;14996:117;15146:4;15138:6;15134:17;15122:29;;15200:3;15192:4;15184:6;15180:17;15170:8;15166:32;15163:41;15160:128;;;15207:79;;:::i;:::-;15160:128;14726:568;;;;;:::o;15300:559::-;15386:6;15394;15443:2;15431:9;15422:7;15418:23;15414:32;15411:119;;;15449:79;;:::i;:::-;15411:119;15597:1;15586:9;15582:17;15569:31;15627:18;15619:6;15616:30;15613:117;;;15649:79;;:::i;:::-;15613:117;15762:80;15834:7;15825:6;15814:9;15810:22;15762:80;:::i;:::-;15744:98;;;;15540:312;15300:559;;;;;:::o;15865:182::-;16005:34;16001:1;15993:6;15989:14;15982:58;15865:182;:::o;16053:366::-;16195:3;16216:67;16280:2;16275:3;16216:67;:::i;:::-;16209:74;;16292:93;16381:3;16292:93;:::i;:::-;16410:2;16405:3;16401:12;16394:19;;16053:366;;;:::o;16425:419::-;16591:4;16629:2;16618:9;16614:18;16606:26;;16678:9;16672:4;16668:20;16664:1;16653:9;16649:17;16642:47;16706:131;16832:4;16706:131;:::i;:::-;16698:139;;16425:419;;;:::o;16850:180::-;16898:77;16895:1;16888:88;16995:4;16992:1;16985:15;17019:4;17016:1;17009:15;17036:320;17080:6;17117:1;17111:4;17107:12;17097:22;;17164:1;17158:4;17154:12;17185:18;17175:81;;17241:4;17233:6;17229:17;17219:27;;17175:81;17303:2;17295:6;17292:14;17272:18;17269:38;17266:84;;17322:18;;:::i;:::-;17266:84;17087:269;17036:320;;;:::o;17362:232::-;17502:34;17498:1;17490:6;17486:14;17479:58;17571:15;17566:2;17558:6;17554:15;17547:40;17362:232;:::o;17600:366::-;17742:3;17763:67;17827:2;17822:3;17763:67;:::i;:::-;17756:74;;17839:93;17928:3;17839:93;:::i;:::-;17957:2;17952:3;17948:12;17941:19;;17600:366;;;:::o;17972:419::-;18138:4;18176:2;18165:9;18161:18;18153:26;;18225:9;18219:4;18215:20;18211:1;18200:9;18196:17;18189:47;18253:131;18379:4;18253:131;:::i;:::-;18245:139;;17972:419;;;:::o;18397:221::-;18537:34;18533:1;18525:6;18521:14;18514:58;18606:4;18601:2;18593:6;18589:15;18582:29;18397:221;:::o;18624:366::-;18766:3;18787:67;18851:2;18846:3;18787:67;:::i;:::-;18780:74;;18863:93;18952:3;18863:93;:::i;:::-;18981:2;18976:3;18972:12;18965:19;;18624:366;;;:::o;18996:419::-;19162:4;19200:2;19189:9;19185:18;19177:26;;19249:9;19243:4;19239:20;19235:1;19224:9;19220:17;19213:47;19277:131;19403:4;19277:131;:::i;:::-;19269:139;;18996:419;;;:::o;19421:244::-;19561:34;19557:1;19549:6;19545:14;19538:58;19630:27;19625:2;19617:6;19613:15;19606:52;19421:244;:::o;19671:366::-;19813:3;19834:67;19898:2;19893:3;19834:67;:::i;:::-;19827:74;;19910:93;19999:3;19910:93;:::i;:::-;20028:2;20023:3;20019:12;20012:19;;19671:366;;;:::o;20043:419::-;20209:4;20247:2;20236:9;20232:18;20224:26;;20296:9;20290:4;20286:20;20282:1;20271:9;20267:17;20260:47;20324:131;20450:4;20324:131;:::i;:::-;20316:139;;20043:419;;;:::o;20468:221::-;20608:34;20604:1;20596:6;20592:14;20585:58;20677:4;20672:2;20664:6;20660:15;20653:29;20468:221;:::o;20695:366::-;20837:3;20858:67;20922:2;20917:3;20858:67;:::i;:::-;20851:74;;20934:93;21023:3;20934:93;:::i;:::-;21052:2;21047:3;21043:12;21036:19;;20695:366;;;:::o;21067:419::-;21233:4;21271:2;21260:9;21256:18;21248:26;;21320:9;21314:4;21310:20;21306:1;21295:9;21291:17;21284:47;21348:131;21474:4;21348:131;:::i;:::-;21340:139;;21067:419;;;:::o;21492:233::-;21632:34;21628:1;21620:6;21616:14;21609:58;21701:16;21696:2;21688:6;21684:15;21677:41;21492:233;:::o;21731:366::-;21873:3;21894:67;21958:2;21953:3;21894:67;:::i;:::-;21887:74;;21970:93;22059:3;21970:93;:::i;:::-;22088:2;22083:3;22079:12;22072:19;;21731:366;;;:::o;22103:419::-;22269:4;22307:2;22296:9;22292:18;22284:26;;22356:9;22350:4;22346:20;22342:1;22331:9;22327:17;22320:47;22384:131;22510:4;22384:131;:::i;:::-;22376:139;;22103:419;;;:::o;22528:180::-;22576:77;22573:1;22566:88;22673:4;22670:1;22663:15;22697:4;22694:1;22687:15;22714:180;22762:77;22759:1;22752:88;22859:4;22856:1;22849:15;22883:4;22880:1;22873:15;22900:233;22939:3;22962:24;22980:5;22962:24;:::i;:::-;22953:33;;23008:66;23001:5;22998:77;22995:103;;23078:18;;:::i;:::-;22995:103;23125:1;23118:5;23114:13;23107:20;;22900:233;;;:::o;23139:147::-;23240:11;23277:3;23262:18;;23139:147;;;;:::o;23292:114::-;;:::o;23412:398::-;23571:3;23592:83;23673:1;23668:3;23592:83;:::i;:::-;23585:90;;23684:93;23773:3;23684:93;:::i;:::-;23802:1;23797:3;23793:11;23786:18;;23412:398;;;:::o;23816:379::-;24000:3;24022:147;24165:3;24022:147;:::i;:::-;24015:154;;24186:3;24179:10;;23816:379;;;:::o;24201:222::-;24341:34;24337:1;24329:6;24325:14;24318:58;24410:5;24405:2;24397:6;24393:15;24386:30;24201:222;:::o;24429:366::-;24571:3;24592:67;24656:2;24651:3;24592:67;:::i;:::-;24585:74;;24668:93;24757:3;24668:93;:::i;:::-;24786:2;24781:3;24777:12;24770:19;;24429:366;;;:::o;24801:419::-;24967:4;25005:2;24994:9;24990:18;24982:26;;25054:9;25048:4;25044:20;25040:1;25029:9;25025:17;25018:47;25082:131;25208:4;25082:131;:::i;:::-;25074:139;;24801:419;;;:::o;25226:230::-;25366:34;25362:1;25354:6;25350:14;25343:58;25435:13;25430:2;25422:6;25418:15;25411:38;25226:230;:::o;25462:366::-;25604:3;25625:67;25689:2;25684:3;25625:67;:::i;:::-;25618:74;;25701:93;25790:3;25701:93;:::i;:::-;25819:2;25814:3;25810:12;25803:19;;25462:366;;;:::o;25834:419::-;26000:4;26038:2;26027:9;26023:18;26015:26;;26087:9;26081:4;26077:20;26073:1;26062:9;26058:17;26051:47;26115:131;26241:4;26115:131;:::i;:::-;26107:139;;25834:419;;;:::o;26259:168::-;26399:20;26395:1;26387:6;26383:14;26376:44;26259:168;:::o;26433:366::-;26575:3;26596:67;26660:2;26655:3;26596:67;:::i;:::-;26589:74;;26672:93;26761:3;26672:93;:::i;:::-;26790:2;26785:3;26781:12;26774:19;;26433:366;;;:::o;26805:419::-;26971:4;27009:2;26998:9;26994:18;26986:26;;27058:9;27052:4;27048:20;27044:1;27033:9;27029:17;27022:47;27086:131;27212:4;27086:131;:::i;:::-;27078:139;;26805:419;;;:::o;27230:221::-;27370:34;27366:1;27358:6;27354:14;27347:58;27439:4;27434:2;27426:6;27422:15;27415:29;27230:221;:::o;27457:366::-;27599:3;27620:67;27684:2;27679:3;27620:67;:::i;:::-;27613:74;;27696:93;27785:3;27696:93;:::i;:::-;27814:2;27809:3;27805:12;27798:19;;27457:366;;;:::o;27829:419::-;27995:4;28033:2;28022:9;28018:18;28010:26;;28082:9;28076:4;28072:20;28068:1;28057:9;28053:17;28046:47;28110:131;28236:4;28110:131;:::i;:::-;28102:139;;27829:419;;;:::o;28254:305::-;28294:3;28313:20;28331:1;28313:20;:::i;:::-;28308:25;;28347:20;28365:1;28347:20;:::i;:::-;28342:25;;28501:1;28433:66;28429:74;28426:1;28423:81;28420:107;;;28507:18;;:::i;:::-;28420:107;28551:1;28548;28544:9;28537:16;;28254:305;;;;:::o;28565:241::-;28705:34;28701:1;28693:6;28689:14;28682:58;28774:24;28769:2;28761:6;28757:15;28750:49;28565:241;:::o;28812:366::-;28954:3;28975:67;29039:2;29034:3;28975:67;:::i;:::-;28968:74;;29051:93;29140:3;29051:93;:::i;:::-;29169:2;29164:3;29160:12;29153:19;;28812:366;;;:::o;29184:419::-;29350:4;29388:2;29377:9;29373:18;29365:26;;29437:9;29431:4;29427:20;29423:1;29412:9;29408:17;29401:47;29465:131;29591:4;29465:131;:::i;:::-;29457:139;;29184:419;;;:::o;29609:174::-;29749:26;29745:1;29737:6;29733:14;29726:50;29609:174;:::o;29789:366::-;29931:3;29952:67;30016:2;30011:3;29952:67;:::i;:::-;29945:74;;30028:93;30117:3;30028:93;:::i;:::-;30146:2;30141:3;30137:12;30130:19;;29789:366;;;:::o;30161:419::-;30327:4;30365:2;30354:9;30350:18;30342:26;;30414:9;30408:4;30404:20;30400:1;30389:9;30385:17;30378:47;30442:131;30568:4;30442:131;:::i;:::-;30434:139;;30161:419;;;:::o;30586:191::-;30626:4;30646:20;30664:1;30646:20;:::i;:::-;30641:25;;30680:20;30698:1;30680:20;:::i;:::-;30675:25;;30719:1;30716;30713:8;30710:34;;;30724:18;;:::i;:::-;30710:34;30769:1;30766;30762:9;30754:17;;30586:191;;;;:::o;30783:348::-;30823:7;30846:20;30864:1;30846:20;:::i;:::-;30841:25;;30880:20;30898:1;30880:20;:::i;:::-;30875:25;;31068:1;31000:66;30996:74;30993:1;30990:81;30985:1;30978:9;30971:17;30967:105;30964:131;;;31075:18;;:::i;:::-;30964:131;31123:1;31120;31116:9;31105:20;;30783:348;;;;:::o;31137:170::-;31277:22;31273:1;31265:6;31261:14;31254:46;31137:170;:::o;31313:366::-;31455:3;31476:67;31540:2;31535:3;31476:67;:::i;:::-;31469:74;;31552:93;31641:3;31552:93;:::i;:::-;31670:2;31665:3;31661:12;31654:19;;31313:366;;;:::o;31685:419::-;31851:4;31889:2;31878:9;31874:18;31866:26;;31938:9;31932:4;31928:20;31924:1;31913:9;31909:17;31902:47;31966:131;32092:4;31966:131;:::i;:::-;31958:139;;31685:419;;;:::o;32110:233::-;32250:34;32246:1;32238:6;32234:14;32227:58;32319:16;32314:2;32306:6;32302:15;32295:41;32110:233;:::o;32349:366::-;32491:3;32512:67;32576:2;32571:3;32512:67;:::i;:::-;32505:74;;32588:93;32677:3;32588:93;:::i;:::-;32706:2;32701:3;32697:12;32690:19;;32349:366;;;:::o;32721:419::-;32887:4;32925:2;32914:9;32910:18;32902:26;;32974:9;32968:4;32964:20;32960:1;32949:9;32945:17;32938:47;33002:131;33128:4;33002:131;:::i;:::-;32994:139;;32721:419;;;:::o;33146:230::-;33286:34;33282:1;33274:6;33270:14;33263:58;33355:13;33350:2;33342:6;33338:15;33331:38;33146:230;:::o;33382:366::-;33524:3;33545:67;33609:2;33604:3;33545:67;:::i;:::-;33538:74;;33621:93;33710:3;33621:93;:::i;:::-;33739:2;33734:3;33730:12;33723:19;;33382:366;;;:::o;33754:419::-;33920:4;33958:2;33947:9;33943:18;33935:26;;34007:9;34001:4;33997:20;33993:1;33982:9;33978:17;33971:47;34035:131;34161:4;34035:131;:::i;:::-;34027:139;;33754:419;;;:::o;34179:176::-;34319:28;34315:1;34307:6;34303:14;34296:52;34179:176;:::o;34361:366::-;34503:3;34524:67;34588:2;34583:3;34524:67;:::i;:::-;34517:74;;34600:93;34689:3;34600:93;:::i;:::-;34718:2;34713:3;34709:12;34702:19;;34361:366;;;:::o;34733:419::-;34899:4;34937:2;34926:9;34922:18;34914:26;;34986:9;34980:4;34976:20;34972:1;34961:9;34957:17;34950:47;35014:131;35140:4;35014:131;:::i;:::-;35006:139;;34733:419;;;:::o;35158:238::-;35298:34;35294:1;35286:6;35282:14;35275:58;35367:21;35362:2;35354:6;35350:15;35343:46;35158:238;:::o;35402:366::-;35544:3;35565:67;35629:2;35624:3;35565:67;:::i;:::-;35558:74;;35641:93;35730:3;35641:93;:::i;:::-;35759:2;35754:3;35750:12;35743:19;;35402:366;;;:::o;35774:419::-;35940:4;35978:2;35967:9;35963:18;35955:26;;36027:9;36021:4;36017:20;36013:1;36002:9;35998:17;35991:47;36055:131;36181:4;36055:131;:::i;:::-;36047:139;;35774:419;;;:::o;36199:234::-;36339:34;36335:1;36327:6;36323:14;36316:58;36408:17;36403:2;36395:6;36391:15;36384:42;36199:234;:::o;36439:366::-;36581:3;36602:67;36666:2;36661:3;36602:67;:::i;:::-;36595:74;;36678:93;36767:3;36678:93;:::i;:::-;36796:2;36791:3;36787:12;36780:19;;36439:366;;;:::o;36811:419::-;36977:4;37015:2;37004:9;37000:18;36992:26;;37064:9;37058:4;37054:20;37050:1;37039:9;37035:17;37028:47;37092:131;37218:4;37092:131;:::i;:::-;37084:139;;36811:419;;;:::o;37236:148::-;37338:11;37375:3;37360:18;;37236:148;;;;:::o;37390:377::-;37496:3;37524:39;37557:5;37524:39;:::i;:::-;37579:89;37661:6;37656:3;37579:89;:::i;:::-;37572:96;;37677:52;37722:6;37717:3;37710:4;37703:5;37699:16;37677:52;:::i;:::-;37754:6;37749:3;37745:16;37738:23;;37500:267;37390:377;;;;:::o;37773:141::-;37822:4;37845:3;37837:11;;37868:3;37865:1;37858:14;37902:4;37899:1;37889:18;37881:26;;37773:141;;;:::o;37944:845::-;38047:3;38084:5;38078:12;38113:36;38139:9;38113:36;:::i;:::-;38165:89;38247:6;38242:3;38165:89;:::i;:::-;38158:96;;38285:1;38274:9;38270:17;38301:1;38296:137;;;;38447:1;38442:341;;;;38263:520;;38296:137;38380:4;38376:9;38365;38361:25;38356:3;38349:38;38416:6;38411:3;38407:16;38400:23;;38296:137;;38442:341;38509:38;38541:5;38509:38;:::i;:::-;38569:1;38583:154;38597:6;38594:1;38591:13;38583:154;;;38671:7;38665:14;38661:1;38656:3;38652:11;38645:35;38721:1;38712:7;38708:15;38697:26;;38619:4;38616:1;38612:12;38607:17;;38583:154;;;38766:6;38761:3;38757:16;38750:23;;38449:334;;38263:520;;38051:738;;37944:845;;;;:::o;38795:589::-;39020:3;39042:95;39133:3;39124:6;39042:95;:::i;:::-;39035:102;;39154:95;39245:3;39236:6;39154:95;:::i;:::-;39147:102;;39266:92;39354:3;39345:6;39266:92;:::i;:::-;39259:99;;39375:3;39368:10;;38795:589;;;;;;:::o;39390:225::-;39530:34;39526:1;39518:6;39514:14;39507:58;39599:8;39594:2;39586:6;39582:15;39575:33;39390:225;:::o;39621:366::-;39763:3;39784:67;39848:2;39843:3;39784:67;:::i;:::-;39777:74;;39860:93;39949:3;39860:93;:::i;:::-;39978:2;39973:3;39969:12;39962:19;;39621:366;;;:::o;39993:419::-;40159:4;40197:2;40186:9;40182:18;40174:26;;40246:9;40240:4;40236:20;40232:1;40221:9;40217:17;40210:47;40274:131;40400:4;40274:131;:::i;:::-;40266:139;;39993:419;;;:::o;40418:237::-;40558:34;40554:1;40546:6;40542:14;40535:58;40627:20;40622:2;40614:6;40610:15;40603:45;40418:237;:::o;40661:366::-;40803:3;40824:67;40888:2;40883:3;40824:67;:::i;:::-;40817:74;;40900:93;40989:3;40900:93;:::i;:::-;41018:2;41013:3;41009:12;41002:19;;40661:366;;;:::o;41033:419::-;41199:4;41237:2;41226:9;41222:18;41214:26;;41286:9;41280:4;41276:20;41272:1;41261:9;41257:17;41250:47;41314:131;41440:4;41314:131;:::i;:::-;41306:139;;41033:419;;;:::o;41458:225::-;41598:34;41594:1;41586:6;41582:14;41575:58;41667:8;41662:2;41654:6;41650:15;41643:33;41458:225;:::o;41689:366::-;41831:3;41852:67;41916:2;41911:3;41852:67;:::i;:::-;41845:74;;41928:93;42017:3;41928:93;:::i;:::-;42046:2;42041:3;42037:12;42030:19;;41689:366;;;:::o;42061:419::-;42227:4;42265:2;42254:9;42250:18;42242:26;;42314:9;42308:4;42304:20;42300:1;42289:9;42285:17;42278:47;42342:131;42468:4;42342:131;:::i;:::-;42334:139;;42061:419;;;:::o;42486:224::-;42626:34;42622:1;42614:6;42610:14;42603:58;42695:7;42690:2;42682:6;42678:15;42671:32;42486:224;:::o;42716:366::-;42858:3;42879:67;42943:2;42938:3;42879:67;:::i;:::-;42872:74;;42955:93;43044:3;42955:93;:::i;:::-;43073:2;43068:3;43064:12;43057:19;;42716:366;;;:::o;43088:419::-;43254:4;43292:2;43281:9;43277:18;43269:26;;43341:9;43335:4;43331:20;43327:1;43316:9;43312:17;43305:47;43369:131;43495:4;43369:131;:::i;:::-;43361:139;;43088:419;;;:::o;43513:229::-;43653:34;43649:1;43641:6;43637:14;43630:58;43722:12;43717:2;43709:6;43705:15;43698:37;43513:229;:::o;43748:366::-;43890:3;43911:67;43975:2;43970:3;43911:67;:::i;:::-;43904:74;;43987:93;44076:3;43987:93;:::i;:::-;44105:2;44100:3;44096:12;44089:19;;43748:366;;;:::o;44120:419::-;44286:4;44324:2;44313:9;44309:18;44301:26;;44373:9;44367:4;44363:20;44359:1;44348:9;44344:17;44337:47;44401:131;44527:4;44401:131;:::i;:::-;44393:139;;44120:419;;;:::o;44545:234::-;44685:34;44681:1;44673:6;44669:14;44662:58;44754:17;44749:2;44741:6;44737:15;44730:42;44545:234;:::o;44785:366::-;44927:3;44948:67;45012:2;45007:3;44948:67;:::i;:::-;44941:74;;45024:93;45113:3;45024:93;:::i;:::-;45142:2;45137:3;45133:12;45126:19;;44785:366;;;:::o;45157:419::-;45323:4;45361:2;45350:9;45346:18;45338:26;;45410:9;45404:4;45400:20;45396:1;45385:9;45381:17;45374:47;45438:131;45564:4;45438:131;:::i;:::-;45430:139;;45157:419;;;:::o;45582:98::-;45633:6;45667:5;45661:12;45651:22;;45582:98;;;:::o;45686:168::-;45769:11;45803:6;45798:3;45791:19;45843:4;45838:3;45834:14;45819:29;;45686:168;;;;:::o;45860:360::-;45946:3;45974:38;46006:5;45974:38;:::i;:::-;46028:70;46091:6;46086:3;46028:70;:::i;:::-;46021:77;;46107:52;46152:6;46147:3;46140:4;46133:5;46129:16;46107:52;:::i;:::-;46184:29;46206:6;46184:29;:::i;:::-;46179:3;46175:39;46168:46;;45950:270;45860:360;;;;:::o;46226:640::-;46421:4;46459:3;46448:9;46444:19;46436:27;;46473:71;46541:1;46530:9;46526:17;46517:6;46473:71;:::i;:::-;46554:72;46622:2;46611:9;46607:18;46598:6;46554:72;:::i;:::-;46636;46704:2;46693:9;46689:18;46680:6;46636:72;:::i;:::-;46755:9;46749:4;46745:20;46740:2;46729:9;46725:18;46718:48;46783:76;46854:4;46845:6;46783:76;:::i;:::-;46775:84;;46226:640;;;;;;;:::o;46872:141::-;46928:5;46959:6;46953:13;46944:22;;46975:32;47001:5;46975:32;:::i;:::-;46872:141;;;;:::o;47019:349::-;47088:6;47137:2;47125:9;47116:7;47112:23;47108:32;47105:119;;;47143:79;;:::i;:::-;47105:119;47263:1;47288:63;47343:7;47334:6;47323:9;47319:22;47288:63;:::i;:::-;47278:73;;47234:127;47019:349;;;;:::o;47374:180::-;47422:77;47419:1;47412:88;47519:4;47516:1;47509:15;47543:4;47540:1;47533:15;47560:185;47600:1;47617:20;47635:1;47617:20;:::i;:::-;47612:25;;47651:20;47669:1;47651:20;:::i;:::-;47646:25;;47690:1;47680:35;;47695:18;;:::i;:::-;47680:35;47737:1;47734;47730:9;47725:14;;47560:185;;;;:::o;47751:176::-;47783:1;47800:20;47818:1;47800:20;:::i;:::-;47795:25;;47834:20;47852:1;47834:20;:::i;:::-;47829:25;;47873:1;47863:35;;47878:18;;:::i;:::-;47863:35;47919:1;47916;47912:9;47907:14;;47751:176;;;;:::o;47933:220::-;48073:34;48069:1;48061:6;48057:14;48050:58;48142:3;48137:2;48129:6;48125:15;48118:28;47933:220;:::o;48159:366::-;48301:3;48322:67;48386:2;48381:3;48322:67;:::i;:::-;48315:74;;48398:93;48487:3;48398:93;:::i;:::-;48516:2;48511:3;48507:12;48500:19;;48159:366;;;:::o;48531:419::-;48697:4;48735:2;48724:9;48720:18;48712:26;;48784:9;48778:4;48774:20;48770:1;48759:9;48755:17;48748:47;48812:131;48938:4;48812:131;:::i;:::-;48804:139;;48531:419;;;:::o;48956:227::-;49096:34;49092:1;49084:6;49080:14;49073:58;49165:10;49160:2;49152:6;49148:15;49141:35;48956:227;:::o;49189:366::-;49331:3;49352:67;49416:2;49411:3;49352:67;:::i;:::-;49345:74;;49428:93;49517:3;49428:93;:::i;:::-;49546:2;49541:3;49537:12;49530:19;;49189:366;;;:::o;49561:419::-;49727:4;49765:2;49754:9;49750:18;49742:26;;49814:9;49808:4;49804:20;49800:1;49789:9;49785:17;49778:47;49842:131;49968:4;49842:131;:::i;:::-;49834:139;;49561:419;;;:::o
Swarm Source
ipfs://57e1ec1013a5fcccaf01f349fe2a8ba2ac2a1c0bb5dcfb6ae15068c63d4d5d7f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.