Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,874 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 317067318 | 35 days ago | IN | 0 ETH | 0.00000042 | ||||
Set Approval For... | 308767129 | 59 days ago | IN | 0 ETH | 0.00000078 | ||||
Set Approval For... | 289326888 | 116 days ago | IN | 0 ETH | 0.00000088 | ||||
Set Approval For... | 284688699 | 129 days ago | IN | 0 ETH | 0.00000425 | ||||
Set Approval For... | 274655250 | 159 days ago | IN | 0 ETH | 0.00000175 | ||||
Set Approval For... | 264706863 | 188 days ago | IN | 0 ETH | 0.00000184 | ||||
Set Approval For... | 250673578 | 229 days ago | IN | 0 ETH | 0.00000061 | ||||
Set Approval For... | 232816712 | 280 days ago | IN | 0 ETH | 0.00000087 | ||||
Set Approval For... | 232520648 | 281 days ago | IN | 0 ETH | 0.0000019 | ||||
Set Approval For... | 226513146 | 299 days ago | IN | 0 ETH | 0.00000051 | ||||
Set Approval For... | 218039168 | 323 days ago | IN | 0 ETH | 0.000001 | ||||
Set Approval For... | 218027777 | 323 days ago | IN | 0 ETH | 0.00000241 | ||||
Set Approval For... | 216779930 | 327 days ago | IN | 0 ETH | 0.00000077 | ||||
Set Approval For... | 213794136 | 336 days ago | IN | 0 ETH | 0.00000054 | ||||
Set Approval For... | 212311617 | 340 days ago | IN | 0 ETH | 0.00000049 | ||||
Set Approval For... | 205850585 | 359 days ago | IN | 0 ETH | 0.00000052 | ||||
Set Approval For... | 205308417 | 361 days ago | IN | 0 ETH | 0.00000053 | ||||
Set Approval For... | 204619356 | 363 days ago | IN | 0 ETH | 0.0000007 | ||||
Set Approval For... | 203527771 | 366 days ago | IN | 0 ETH | 0.00000053 | ||||
Set Approval For... | 202547278 | 369 days ago | IN | 0 ETH | 0.00000056 | ||||
Set Approval For... | 200813517 | 374 days ago | IN | 0 ETH | 0.00000105 | ||||
Set Approval For... | 200813205 | 374 days ago | IN | 0 ETH | 0.00000115 | ||||
Set Approval For... | 197131354 | 385 days ago | IN | 0 ETH | 0.00001375 | ||||
Set Approval For... | 193423001 | 395 days ago | IN | 0 ETH | 0.00000105 | ||||
Set Approval For... | 191520850 | 401 days ago | IN | 0 ETH | 0.00000985 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
100999794 | 679 days ago | 0.0972 ETH | ||||
92157313 | 705 days ago | 0.00045 ETH | ||||
92062036 | 705 days ago | 0.00015 ETH | ||||
91863970 | 706 days ago | 0.00015 ETH | ||||
91607838 | 707 days ago | 0.00255 ETH | ||||
91593621 | 707 days ago | 0.0015 ETH | ||||
91573200 | 707 days ago | 30.440145 ETH | ||||
91503706 | 707 days ago | 0.0003 ETH | ||||
91481227 | 707 days ago | 0.00075 ETH | ||||
91480685 | 707 days ago | 0.00015 ETH | ||||
91448462 | 707 days ago | 0.00015 ETH | ||||
91398348 | 707 days ago | 0.00015 ETH | ||||
91397770 | 707 days ago | 0.00015 ETH | ||||
91344142 | 707 days ago | 0.00075 ETH | ||||
91333233 | 707 days ago | 0.00015 ETH | ||||
91329731 | 707 days ago | 0.00015 ETH | ||||
91329218 | 707 days ago | 0.00015 ETH | ||||
91326561 | 707 days ago | 0.00045 ETH | ||||
91321349 | 707 days ago | 0.00075 ETH | ||||
91317954 | 707 days ago | 0.00015 ETH | ||||
91315745 | 707 days ago | 0.0015 ETH | ||||
91308363 | 707 days ago | 0.00015 ETH | ||||
91306021 | 707 days ago | 0.00015 ETH | ||||
91297614 | 707 days ago | 0.00015 ETH | ||||
91275984 | 707 days ago | 0.00075 ETH |
Loading...
Loading
Contract Name:
Pepepixel
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-05-08 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries( address registrant, address registrantToCopy ) external; function unregister(address addr) external; function updateOperator( address registrant, address operator, bool filtered ) external; function updateOperators( address registrant, address[] calldata operators, bool filtered ) external; function updateCodeHash( address registrant, bytes32 codehash, bool filtered ) external; function updateCodeHashes( address registrant, bytes32[] calldata codeHashes, bool filtered ) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe( address(this), subscriptionOrRegistrantToCopy ); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries( address(this), subscriptionOrRegistrantToCopy ); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if ( !OPERATOR_FILTER_REGISTRY.isOperatorAllowed( address(this), operator ) ) { revert OperatorNotAllowed(operator); } } } } /** * @title DefaultOperatorFilterer * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription. */ abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } // 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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @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; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @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); } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @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..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ 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 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // 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) private _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; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @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(collectionSize). 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 = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; 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); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; 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(), ".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = 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 virtual 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 virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _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 Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); 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); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, 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] = TokenOwnership( prevOwnership.addr, 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); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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 {} } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @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(), "You are 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); } } /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require( feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice" ); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require( feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice" ); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } // no whitelistmint // buy n pay n contract Pepepixel is ERC721A, ERC2981, Ownable, DefaultOperatorFilterer { string public baseURI = "https://nftservice.s3.amazonaws.com/Pepepixel/"; uint256 public tokenPrice = 3000000000000000; //0.005 ETH uint256 public maxTokensPerTx = 100; uint256 public defaultTokensPerTx = 5; uint256 public constant MAX_TOKENS = 99999; // additionPerAmount > 0 and additionPerAmount = 5, buy 5 nft buyer will get 6, buy 10 nft buyer will get 12 uint256 public additionPerAmount = 5; // refPercent > 0 && refPercent = 50, when buyer buy x token with price y, ref will received x * y * refPercent eth uint256 public refPercent = 50; // 50/denominator = 0.5% uint256 constant denominator = 10000; mapping(address => uint256) refs; // bool public saleIsActive = true; enum TokenURIMode { MODE_ONE, MODE_TWO, MODE_THREE } TokenURIMode private tokenUriMode = TokenURIMode.MODE_ONE; constructor() ERC721A("Pepepixel", "PPPX", 100, MAX_TOKENS) { _setDefaultRoyalty(msg.sender, 500); } struct HelperState { uint256 tokenPrice; uint256 maxTokensPerTx; uint256 MAX_TOKENS; bool saleIsActive; uint256 totalSupply; uint256 userMinted; uint256 defaultTokensPerTx; uint256 additionPerAmount; uint256 refPercent; } function _state(address minter) external view returns (HelperState memory) { return HelperState({ tokenPrice: tokenPrice, maxTokensPerTx: maxTokensPerTx, MAX_TOKENS: MAX_TOKENS, saleIsActive: true, //saleIsActive, totalSupply: uint256(totalSupply()), userMinted: minter == address(0) ? 0 : uint256(_numberMinted(minter)), defaultTokensPerTx: defaultTokensPerTx, additionPerAmount: additionPerAmount, refPercent: refPercent }); } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } // function withdrawTo(address to, uint256 amount) public onlyOwner { // require( // amount <= address(this).balance, // "Exceed balance of this contract" // ); // payable(to).transfer(amount); // } function reserveTokens(address to, uint256 numberOfTokens) public onlyOwner { require( totalSupply() + numberOfTokens <= MAX_TOKENS, "Exceed max supply of tokens" ); _safeMint(to, numberOfTokens); } function setBaseURI(string memory newURI) public onlyOwner { baseURI = newURI; } // function flipSaleState() public onlyOwner { // saleIsActive = !saleIsActive; // } function getPrice(uint256 numberOfTokens) public view returns (uint256) { return numberOfTokens * tokenPrice; } // if numberMinted(msg.sender) > 0 -> no whitelist, no free. function mintToken(uint256 numberOfTokens, address ref) public payable { // require(saleIsActive, "Sale must be active"); require(numberOfTokens <= maxTokensPerTx, "Exceed max tokens per tx"); require(numberOfTokens > 0, "Must mint at least one"); require(msg.value >= numberOfTokens * tokenPrice, "Not enough ether"); uint256 _not = numberOfTokens; if ( additionPerAmount > 0 && numberOfTokens >= additionPerAmount && numberOfTokens + (numberOfTokens / additionPerAmount) <= MAX_TOKENS ) { _not = numberOfTokens + (numberOfTokens / additionPerAmount); } require(totalSupply() + _not <= MAX_TOKENS, "Exceed max supply"); _safeMint(msg.sender, _not); if (ref != address(0)) { if (msg.value > 0 && tokenPrice > 0 && refPercent > 0) { payable(ref).transfer( (refPercent * numberOfTokens * tokenPrice) / denominator ); } refs[ref] += numberOfTokens; } } function setTokenPrice(uint256 newTokenPrice) public onlyOwner { tokenPrice = newTokenPrice; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Token does not exist."); if (tokenUriMode == TokenURIMode.MODE_TWO) { return bytes(baseURI).length > 0 ? string( abi.encodePacked(baseURI, Strings.toString(_tokenId)) ) : ""; } else if (tokenUriMode == TokenURIMode.MODE_ONE) { return bytes(baseURI).length > 0 ? string( abi.encodePacked( baseURI, Strings.toString(_tokenId), ".json" ) ) : ""; } else if (tokenUriMode == TokenURIMode.MODE_THREE) { return baseURI; } return ""; } function setTokenURIMode(uint256 mode) external onlyOwner { if (mode == 2) { tokenUriMode = TokenURIMode.MODE_TWO; } else if (mode == 1) { tokenUriMode = TokenURIMode.MODE_ONE; } else { tokenUriMode = TokenURIMode.MODE_THREE; } } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } // function setMaxSupply(uint256 _maxSupply) public onlyOwner { // MAX_TOKENS = _maxSupply; // } function setMaxTokensPerTx(uint256 _maxTokensPerTx) public onlyOwner { maxTokensPerTx = _maxTokensPerTx; } function setDefaultTokensPerTx(uint256 _defaultTokensPerTx) public onlyOwner { defaultTokensPerTx = _defaultTokensPerTx; } function setAdditionPerAmount(uint256 _additionPerAmount) public onlyOwner { additionPerAmount = _additionPerAmount; } function setRefPercent(uint256 _refPercent) public onlyOwner { refPercent = _refPercent; } function getRefCount(address adr) public view returns (uint256) { return refs[adr]; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721A, ERC2981) returns (bool) { return super.supportsInterface(interfaceId); } function setRoyaltyInfo(address receiver, uint96 feeBasisPoints) external onlyOwner { _setDefaultRoyalty(receiver, feeBasisPoints); } function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom( address from, address to, uint256 tokenId ) public override onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"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":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"_state","outputs":[{"components":[{"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"internalType":"uint256","name":"maxTokensPerTx","type":"uint256"},{"internalType":"uint256","name":"MAX_TOKENS","type":"uint256"},{"internalType":"bool","name":"saleIsActive","type":"bool"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"userMinted","type":"uint256"},{"internalType":"uint256","name":"defaultTokensPerTx","type":"uint256"},{"internalType":"uint256","name":"additionPerAmount","type":"uint256"},{"internalType":"uint256","name":"refPercent","type":"uint256"}],"internalType":"struct Pepepixel.HelperState","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"additionPerAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTokensPerTx","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":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"getRefCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"address","name":"ref","type":"address"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"refPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"reserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":"_additionPerAmount","type":"uint256"}],"name":"setAdditionPerAmount","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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultTokensPerTx","type":"uint256"}],"name":"setDefaultTokensPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensPerTx","type":"uint256"}],"name":"setMaxTokensPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_refPercent","type":"uint256"}],"name":"setRefPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeBasisPoints","type":"uint96"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mode","type":"uint256"}],"name":"setTokenURIMode","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":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526000805560006007556040518060600160405280602e815260200162006a5e602e9139600b908162000037919062000906565b50660aa87bee538000600c556064600d556005600e556005600f5560326010556000601260006101000a81548160ff0219169083600281111562000080576200007f620009ed565b5b02179055503480156200009257600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600981526020017f50657065706978656c00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f505050580000000000000000000000000000000000000000000000000000000081525060646201869f6000811162000162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001599062000aa3565b60405180910390fd5b60008211620001a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019f9062000b3b565b60405180910390fd5b8360019081620001b9919062000906565b508260029081620001cb919062000906565b508160a0818152505080608081815250505050505062000200620001f46200041160201b60201c565b6200041960201b60201c565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620003f5578015620002bb576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200028192919062000ba2565b600060405180830381600087803b1580156200029c57600080fd5b505af1158015620002b1573d6000803e3d6000fd5b50505050620003f4565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000375576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200033b92919062000ba2565b600060405180830381600087803b1580156200035657600080fd5b505af11580156200036b573d6000803e3d6000fd5b50505050620003f3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620003be919062000bcf565b600060405180830381600087803b158015620003d957600080fd5b505af1158015620003ee573d6000803e3d6000fd5b505050505b5b5b50506200040b336101f4620004df60201b60201c565b62000cf6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004ef6200068260201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111562000550576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005479062000c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620005c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b99062000cd4565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000612710905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070e57607f821691505b602082108103620007245762000723620006c6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200078e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200074f565b6200079a86836200074f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007e7620007e1620007db84620007b2565b620007bc565b620007b2565b9050919050565b6000819050919050565b6200080383620007c6565b6200081b6200081282620007ee565b8484546200075c565b825550505050565b600090565b6200083262000823565b6200083f818484620007f8565b505050565b5b8181101562000867576200085b60008262000828565b60018101905062000845565b5050565b601f821115620008b65762000880816200072a565b6200088b846200073f565b810160208510156200089b578190505b620008b3620008aa856200073f565b83018262000844565b50505b505050565b600082821c905092915050565b6000620008db60001984600802620008bb565b1980831691505092915050565b6000620008f68383620008c8565b9150826002028217905092915050565b62000911826200068c565b67ffffffffffffffff8111156200092d576200092c62000697565b5b620009398254620006f5565b620009468282856200086b565b600060209050601f8311600181146200097e576000841562000969578287015190505b620009758582620008e8565b865550620009e5565b601f1984166200098e866200072a565b60005b82811015620009b85784890151825560018201915060208501945060208101905062000991565b86831015620009d85784890151620009d4601f891682620008c8565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b600062000a8b602e8362000a1c565b915062000a988262000a2d565b604082019050919050565b6000602082019050818103600083015262000abe8162000a7c565b9050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b600062000b2360278362000a1c565b915062000b308262000ac5565b604082019050919050565b6000602082019050818103600083015262000b568162000b14565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b8a8262000b5d565b9050919050565b62000b9c8162000b7d565b82525050565b600060408201905062000bb9600083018562000b91565b62000bc8602083018462000b91565b9392505050565b600060208201905062000be6600083018462000b91565b92915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600062000c4a602a8362000a1c565b915062000c578262000bec565b604082019050919050565b6000602082019050818103600083015262000c7d8162000c3b565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600062000cbc60198362000a1c565b915062000cc98262000c84565b602082019050919050565b6000602082019050818103600083015262000cef8162000cad565b9050919050565b60805160a051615d3762000d27600039600081816127f40152818161281d0152613636015260005050615d376000f3fe6080604052600436106102675760003560e01c8063681c8bac11610144578063a140ae23116100b6578063d7224ba01161007a578063d7224ba014610930578063dc33e6811461095b578063e757223014610998578063e985e9c5146109d5578063f2fde38b14610a12578063f47c84c514610a3b57610267565b8063a140ae231461085c578063a22cb46514610878578063b88d4fde146108a1578063b9bed05e146108ca578063c87b56dd146108f357610267565b8063715018a611610108578063715018a61461077257806378cf19e9146107895780637ff9b596146107b25780638da5cb5b146107dd578063900c71f51461080857806395d89b411461083157610267565b8063681c8bac1461068d5780636a61e5fc146106b85780636c0360eb146106e15780636fa4f5f71461070c57806370a082311461073557610267565b806341f43434116101dd5780634f6ccce7116101a15780634f6ccce71461056957806355f804b3146105a6578063577ac23f146105cf57806359d5335b146105fa5780635e307a48146106255780636352211e1461065057610267565b806341f434341461048657806342842e0e146104b157806348b86a72146104da578063495e1eba146105035780634df8bb451461052c57610267565b806318160ddd1161022f57806318160ddd1461036357806323b872dd1461038e5780632a55205a146103b75780632f745c59146103f557806334a25ad9146104325780633ccfd60b1461046f57610267565b806301ffc9a71461026c57806302fa7c47146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613d58565b610a66565b6040516102a09190613da0565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613e5d565b610a78565b005b3480156102de57600080fd5b506102e7610b02565b6040516102f49190613f2d565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613f85565b610b94565b6040516103319190613fc1565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613fdc565b610c19565b005b34801561036f57600080fd5b50610378610c32565b604051610385919061402b565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190614046565b610c3b565b005b3480156103c357600080fd5b506103de60048036038101906103d99190614099565b610c8a565b6040516103ec9291906140d9565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190613fdc565b610e74565b604051610429919061402b565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190614102565b611070565b604051610466919061402b565b60405180910390f35b34801561047b57600080fd5b506104846110b9565b005b34801561049257600080fd5b5061049b611184565b6040516104a8919061418e565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190614046565b611196565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613f85565b6111e5565b005b34801561050f57600080fd5b5061052a60048036038101906105259190613f85565b61126b565b005b34801561053857600080fd5b50610553600480360381019061054e9190614102565b6112f1565b604051610560919061427e565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613f85565b61139b565b60405161059d919061402b565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c891906143cf565b6113ee565b005b3480156105db57600080fd5b506105e461147d565b6040516105f1919061402b565b60405180910390f35b34801561060657600080fd5b5061060f611483565b60405161061c919061402b565b60405180910390f35b34801561063157600080fd5b5061063a611489565b604051610647919061402b565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190613f85565b61148f565b6040516106849190613fc1565b60405180910390f35b34801561069957600080fd5b506106a26114a5565b6040516106af919061402b565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190613f85565b6114ab565b005b3480156106ed57600080fd5b506106f6611531565b6040516107039190613f2d565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190613f85565b6115bf565b005b34801561074157600080fd5b5061075c60048036038101906107579190614102565b611645565b604051610769919061402b565b60405180910390f35b34801561077e57600080fd5b5061078761172d565b005b34801561079557600080fd5b506107b060048036038101906107ab9190613fdc565b6117b5565b005b3480156107be57600080fd5b506107c7611897565b6040516107d4919061402b565b60405180910390f35b3480156107e957600080fd5b506107f261189d565b6040516107ff9190613fc1565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a9190613f85565b6118c7565b005b34801561083d57600080fd5b506108466119e3565b6040516108539190613f2d565b60405180910390f35b61087660048036038101906108719190614418565b611a75565b005b34801561088457600080fd5b5061089f600480360381019061089a9190614484565b611d34565b005b3480156108ad57600080fd5b506108c860048036038101906108c39190614565565b611d4d565b005b3480156108d657600080fd5b506108f160048036038101906108ec9190613f85565b611d9e565b005b3480156108ff57600080fd5b5061091a60048036038101906109159190613f85565b611e24565b6040516109279190613f2d565b60405180910390f35b34801561093c57600080fd5b50610945612084565b604051610952919061402b565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d9190614102565b61208a565b60405161098f919061402b565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba9190613f85565b61209c565b6040516109cc919061402b565b60405180910390f35b3480156109e157600080fd5b506109fc60048036038101906109f791906145e8565b6120b3565b604051610a099190613da0565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a349190614102565b612147565b005b348015610a4757600080fd5b50610a5061223e565b604051610a5d919061402b565b60405180910390f35b6000610a7182612245565b9050919050565b610a806122bf565b73ffffffffffffffffffffffffffffffffffffffff16610a9e61189d565b73ffffffffffffffffffffffffffffffffffffffff1614610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb90614674565b60405180910390fd5b610afe82826122c7565b5050565b606060018054610b11906146c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3d906146c3565b8015610b8a5780601f10610b5f57610100808354040283529160200191610b8a565b820191906000526020600020905b815481529060010190602001808311610b6d57829003601f168201915b5050505050905090565b6000610b9f8261245c565b610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590614766565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610c2381612469565b610c2d8383612566565b505050565b60008054905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c7957610c7833612469565b5b610c8484848461267e565b50505050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610e1f5760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610e2961268e565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610e5591906147b5565b610e5f9190614826565b90508160000151819350935050509250929050565b6000610e7f83611645565b8210610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb7906148c9565b60405180910390fd5b6000610eca610c32565b905060008060005b8381101561102e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fc457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361101a5786840361100b57819550505050505061106a565b8380611016906148e9565b9450505b508080611026906148e9565b915050610ed2565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611061906149a3565b60405180910390fd5b92915050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c16122bf565b73ffffffffffffffffffffffffffffffffffffffff166110df61189d565b73ffffffffffffffffffffffffffffffffffffffff1614611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90614674565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611180573d6000803e3d6000fd5b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111d4576111d333612469565b5b6111df848484612698565b50505050565b6111ed6122bf565b73ffffffffffffffffffffffffffffffffffffffff1661120b61189d565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890614674565b60405180910390fd5b80600f8190555050565b6112736122bf565b73ffffffffffffffffffffffffffffffffffffffff1661129161189d565b73ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614674565b60405180910390fd5b80600e8190555050565b6112f9613c64565b604051806101200160405280600c548152602001600d5481526020016201869f815260200160011515815260200161132f610c32565b8152602001600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461137657611371846126b8565b611379565b60005b8152602001600e548152602001600f5481526020016010548152509050919050565b60006113a5610c32565b82106113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90614a35565b60405180910390fd5b819050919050565b6113f66122bf565b73ffffffffffffffffffffffffffffffffffffffff1661141461189d565b73ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614674565b60405180910390fd5b80600b90816114799190614bf7565b5050565b600f5481565b60105481565b600d5481565b600061149a826127a0565b600001519050919050565b600e5481565b6114b36122bf565b73ffffffffffffffffffffffffffffffffffffffff166114d161189d565b73ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90614674565b60405180910390fd5b80600c8190555050565b600b805461153e906146c3565b80601f016020809104026020016040519081016040528092919081815260200182805461156a906146c3565b80156115b75780601f1061158c576101008083540402835291602001916115b7565b820191906000526020600020905b81548152906001019060200180831161159a57829003601f168201915b505050505081565b6115c76122bf565b73ffffffffffffffffffffffffffffffffffffffff166115e561189d565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290614674565b60405180910390fd5b8060108190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90614d3b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117356122bf565b73ffffffffffffffffffffffffffffffffffffffff1661175361189d565b73ffffffffffffffffffffffffffffffffffffffff16146117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614674565b60405180910390fd5b6117b360006129a3565b565b6117bd6122bf565b73ffffffffffffffffffffffffffffffffffffffff166117db61189d565b73ffffffffffffffffffffffffffffffffffffffff1614611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890614674565b60405180910390fd5b6201869f8161183e610c32565b6118489190614d5b565b1115611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614ddb565b60405180910390fd5b6118938282612a69565b5050565b600c5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118cf6122bf565b73ffffffffffffffffffffffffffffffffffffffff166118ed61189d565b73ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90614674565b60405180910390fd5b6002810361197b576001601260006101000a81548160ff0219169083600281111561197157611970614dfb565b5b02179055506119e0565b600181036119b3576000601260006101000a81548160ff021916908360028111156119a9576119a8614dfb565b5b02179055506119df565b6002601260006101000a81548160ff021916908360028111156119d9576119d8614dfb565b5b02179055505b5b50565b6060600280546119f2906146c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1e906146c3565b8015611a6b5780601f10611a4057610100808354040283529160200191611a6b565b820191906000526020600020905b815481529060010190602001808311611a4e57829003601f168201915b5050505050905090565b600d54821115611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab190614e76565b60405180910390fd5b60008211611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490614ee2565b60405180910390fd5b600c5482611b0b91906147b5565b341015611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490614f4e565b60405180910390fd5b60008290506000600f54118015611b665750600f548310155b8015611b8d57506201869f600f5484611b7f9190614826565b84611b8a9190614d5b565b11155b15611bae57600f5483611ba09190614826565b83611bab9190614d5b565b90505b6201869f81611bbb610c32565b611bc59190614d5b565b1115611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd90614fba565b60405180910390fd5b611c103382612a69565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d2f57600034118015611c5657506000600c54115b8015611c6457506000601054115b15611cd8578173ffffffffffffffffffffffffffffffffffffffff166108fc612710600c5486601054611c9791906147b5565b611ca191906147b5565b611cab9190614826565b9081150290604051600060405180830381858888f19350505050158015611cd6573d6000803e3d6000fd5b505b82601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d279190614d5b565b925050819055505b505050565b81611d3e81612469565b611d488383612a87565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d8b57611d8a33612469565b5b611d9785858585612c07565b5050505050565b611da66122bf565b73ffffffffffffffffffffffffffffffffffffffff16611dc461189d565b73ffffffffffffffffffffffffffffffffffffffff1614611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190614674565b60405180910390fd5b80600d8190555050565b6060611e2f8261245c565b611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590615026565b60405180910390fd5b60016002811115611e8257611e81614dfb565b5b601260009054906101000a900460ff166002811115611ea457611ea3614dfb565b5b03611f07576000600b8054611eb8906146c3565b905011611ed45760405180602001604052806000815250611f00565b600b611edf83612c63565b604051602001611ef0929190615105565b6040516020818303038152906040525b905061207f565b60006002811115611f1b57611f1a614dfb565b5b601260009054906101000a900460ff166002811115611f3d57611f3c614dfb565b5b03611fa0576000600b8054611f51906146c3565b905011611f6d5760405180602001604052806000815250611f99565b600b611f7883612c63565b604051602001611f89929190615175565b6040516020818303038152906040525b905061207f565b600280811115611fb357611fb2614dfb565b5b601260009054906101000a900460ff166002811115611fd557611fd4614dfb565b5b0361206c57600b8054611fe7906146c3565b80601f0160208091040260200160405190810160405280929190818152602001828054612013906146c3565b80156120605780601f1061203557610100808354040283529160200191612060565b820191906000526020600020905b81548152906001019060200180831161204357829003601f168201915b5050505050905061207f565b6040518060200160405280600081525090505b919050565b60075481565b6000612095826126b8565b9050919050565b6000600c54826120ac91906147b5565b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61214f6122bf565b73ffffffffffffffffffffffffffffffffffffffff1661216d61189d565b73ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614674565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990615216565b60405180910390fd5b61223b816129a3565b50565b6201869f81565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122b857506122b782612dc3565b5b9050919050565b600033905090565b6122cf61268e565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561232d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612324906152a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390615314565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000805482109050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115612563576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016124e0929190615334565b602060405180830381865afa1580156124fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125219190615372565b61256257806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016125599190613fc1565b60405180910390fd5b5b50565b60006125718261148f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d890615411565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166126006122bf565b73ffffffffffffffffffffffffffffffffffffffff16148061262f575061262e816126296122bf565b6120b3565b5b61266e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612665906154a3565b60405180910390fd5b612679838383612f0d565b505050565b612689838383612fbf565b505050565b6000612710905090565b6126b383838360405180602001604052806000815250611d4d565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90615535565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6127a8613cb2565b6127b18261245c565b6127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e7906155c7565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106128545760017f00000000000000000000000000000000000000000000000000000000000000008461284791906155e7565b6128519190614d5b565b90505b60008390505b818110612962576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461294e5780935050505061299e565b50808061295a9061561b565b91505061285a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612995906156b6565b60405180910390fd5b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a83828260405180602001604052806000815250613576565b5050565b612a8f6122bf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af390615722565b60405180910390fd5b8060066000612b096122bf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612bb66122bf565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bfb9190613da0565b60405180910390a35050565b612c12848484612fbf565b612c1e84848484613a54565b612c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c54906157b4565b60405180910390fd5b50505050565b606060008203612caa576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dbe565b600082905060005b60008214612cdc578080612cc5906148e9565b915050600a82612cd59190614826565b9150612cb2565b60008167ffffffffffffffff811115612cf857612cf76142a4565b5b6040519080825280601f01601f191660200182016040528015612d2a5781602001600182028036833780820191505090505b5090505b60008514612db757600182612d4391906155e7565b9150600a85612d5291906157d4565b6030612d5e9190614d5b565b60f81b818381518110612d7457612d73615805565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612db09190614826565b9450612d2e565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e8e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ef657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612f065750612f0582613bdb565b5b9050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612fca826127a0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612ff16122bf565b73ffffffffffffffffffffffffffffffffffffffff16148061304d57506130166122bf565b73ffffffffffffffffffffffffffffffffffffffff1661303584610b94565b73ffffffffffffffffffffffffffffffffffffffff16145b80613069575061306882600001516130636122bf565b6120b3565b5b9050806130ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a2906158a6565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461311d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311490615938565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361318c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613183906159ca565b60405180910390fd5b6131998585856001613c45565b6131a96000848460000151612f0d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166132179190615a06565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166132bb9190615a4a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846133c19190614d5b565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613506576134368161245c565b15613505576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461356e8686866001613c4b565b505050505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290615b00565b60405180910390fd5b6135f48161245c565b15613634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362b90615b6c565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368e90615bfe565b60405180910390fd5b6136a46000858386613c45565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516137a19190615a4a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516137c89190615a4a565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613a3757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46139d76000888488613a54565b613a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0d906157b4565b60405180910390fd5b8180613a21906148e9565b9250508080613a2f906148e9565b915050613966565b5080600081905550613a4c6000878588613c4b565b505050505050565b6000613a758473ffffffffffffffffffffffffffffffffffffffff16613c51565b15613bce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a9e6122bf565b8786866040518563ffffffff1660e01b8152600401613ac09493929190615c73565b6020604051808303816000875af1925050508015613afc57506040513d601f19601f82011682018060405250810190613af99190615cd4565b60015b613b7e573d8060008114613b2c576040519150601f19603f3d011682016040523d82523d6000602084013e613b31565b606091505b506000815103613b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6d906157b4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613bd3565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b50505050565b50505050565b600080823b905060008111915050919050565b60405180610120016040528060008152602001600081526020016000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613d3581613d00565b8114613d4057600080fd5b50565b600081359050613d5281613d2c565b92915050565b600060208284031215613d6e57613d6d613cf6565b5b6000613d7c84828501613d43565b91505092915050565b60008115159050919050565b613d9a81613d85565b82525050565b6000602082019050613db56000830184613d91565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613de682613dbb565b9050919050565b613df681613ddb565b8114613e0157600080fd5b50565b600081359050613e1381613ded565b92915050565b60006bffffffffffffffffffffffff82169050919050565b613e3a81613e19565b8114613e4557600080fd5b50565b600081359050613e5781613e31565b92915050565b60008060408385031215613e7457613e73613cf6565b5b6000613e8285828601613e04565b9250506020613e9385828601613e48565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ed7578082015181840152602081019050613ebc565b60008484015250505050565b6000601f19601f8301169050919050565b6000613eff82613e9d565b613f098185613ea8565b9350613f19818560208601613eb9565b613f2281613ee3565b840191505092915050565b60006020820190508181036000830152613f478184613ef4565b905092915050565b6000819050919050565b613f6281613f4f565b8114613f6d57600080fd5b50565b600081359050613f7f81613f59565b92915050565b600060208284031215613f9b57613f9a613cf6565b5b6000613fa984828501613f70565b91505092915050565b613fbb81613ddb565b82525050565b6000602082019050613fd66000830184613fb2565b92915050565b60008060408385031215613ff357613ff2613cf6565b5b600061400185828601613e04565b925050602061401285828601613f70565b9150509250929050565b61402581613f4f565b82525050565b6000602082019050614040600083018461401c565b92915050565b60008060006060848603121561405f5761405e613cf6565b5b600061406d86828701613e04565b935050602061407e86828701613e04565b925050604061408f86828701613f70565b9150509250925092565b600080604083850312156140b0576140af613cf6565b5b60006140be85828601613f70565b92505060206140cf85828601613f70565b9150509250929050565b60006040820190506140ee6000830185613fb2565b6140fb602083018461401c565b9392505050565b60006020828403121561411857614117613cf6565b5b600061412684828501613e04565b91505092915050565b6000819050919050565b600061415461414f61414a84613dbb565b61412f565b613dbb565b9050919050565b600061416682614139565b9050919050565b60006141788261415b565b9050919050565b6141888161416d565b82525050565b60006020820190506141a3600083018461417f565b92915050565b6141b281613f4f565b82525050565b6141c181613d85565b82525050565b610120820160008201516141de60008501826141a9565b5060208201516141f160208501826141a9565b50604082015161420460408501826141a9565b50606082015161421760608501826141b8565b50608082015161422a60808501826141a9565b5060a082015161423d60a08501826141a9565b5060c082015161425060c08501826141a9565b5060e082015161426360e08501826141a9565b506101008201516142786101008501826141a9565b50505050565b60006101208201905061429460008301846141c7565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142dc82613ee3565b810181811067ffffffffffffffff821117156142fb576142fa6142a4565b5b80604052505050565b600061430e613cec565b905061431a82826142d3565b919050565b600067ffffffffffffffff82111561433a576143396142a4565b5b61434382613ee3565b9050602081019050919050565b82818337600083830152505050565b600061437261436d8461431f565b614304565b90508281526020810184848401111561438e5761438d61429f565b5b614399848285614350565b509392505050565b600082601f8301126143b6576143b561429a565b5b81356143c684826020860161435f565b91505092915050565b6000602082840312156143e5576143e4613cf6565b5b600082013567ffffffffffffffff81111561440357614402613cfb565b5b61440f848285016143a1565b91505092915050565b6000806040838503121561442f5761442e613cf6565b5b600061443d85828601613f70565b925050602061444e85828601613e04565b9150509250929050565b61446181613d85565b811461446c57600080fd5b50565b60008135905061447e81614458565b92915050565b6000806040838503121561449b5761449a613cf6565b5b60006144a985828601613e04565b92505060206144ba8582860161446f565b9150509250929050565b600067ffffffffffffffff8211156144df576144de6142a4565b5b6144e882613ee3565b9050602081019050919050565b6000614508614503846144c4565b614304565b9050828152602081018484840111156145245761452361429f565b5b61452f848285614350565b509392505050565b600082601f83011261454c5761454b61429a565b5b813561455c8482602086016144f5565b91505092915050565b6000806000806080858703121561457f5761457e613cf6565b5b600061458d87828801613e04565b945050602061459e87828801613e04565b93505060406145af87828801613f70565b925050606085013567ffffffffffffffff8111156145d0576145cf613cfb565b5b6145dc87828801614537565b91505092959194509250565b600080604083850312156145ff576145fe613cf6565b5b600061460d85828601613e04565b925050602061461e85828601613e04565b9150509250929050565b7f596f7520617265206e6f7420746865206f776e65720000000000000000000000600082015250565b600061465e601583613ea8565b915061466982614628565b602082019050919050565b6000602082019050818103600083015261468d81614651565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806146db57607f821691505b6020821081036146ee576146ed614694565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000614750602d83613ea8565b915061475b826146f4565b604082019050919050565b6000602082019050818103600083015261477f81614743565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c082613f4f565b91506147cb83613f4f565b92508282026147d981613f4f565b915082820484148315176147f0576147ef614786565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061483182613f4f565b915061483c83613f4f565b92508261484c5761484b6147f7565b5b828204905092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006148b3602283613ea8565b91506148be82614857565b604082019050919050565b600060208201905081810360008301526148e2816148a6565b9050919050565b60006148f482613f4f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361492657614925614786565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b600061498d602e83613ea8565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a1f602383613ea8565b9150614a2a826149c3565b604082019050919050565b60006020820190508181036000830152614a4e81614a12565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ab77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614a7a565b614ac18683614a7a565b95508019841693508086168417925050509392505050565b6000614af4614aef614aea84613f4f565b61412f565b613f4f565b9050919050565b6000819050919050565b614b0e83614ad9565b614b22614b1a82614afb565b848454614a87565b825550505050565b600090565b614b37614b2a565b614b42818484614b05565b505050565b5b81811015614b6657614b5b600082614b2f565b600181019050614b48565b5050565b601f821115614bab57614b7c81614a55565b614b8584614a6a565b81016020851015614b94578190505b614ba8614ba085614a6a565b830182614b47565b50505b505050565b600082821c905092915050565b6000614bce60001984600802614bb0565b1980831691505092915050565b6000614be78383614bbd565b9150826002028217905092915050565b614c0082613e9d565b67ffffffffffffffff811115614c1957614c186142a4565b5b614c2382546146c3565b614c2e828285614b6a565b600060209050601f831160018114614c615760008415614c4f578287015190505b614c598582614bdb565b865550614cc1565b601f198416614c6f86614a55565b60005b82811015614c9757848901518255600182019150602085019450602081019050614c72565b86831015614cb45784890151614cb0601f891682614bbd565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614d25602b83613ea8565b9150614d3082614cc9565b604082019050919050565b60006020820190508181036000830152614d5481614d18565b9050919050565b6000614d6682613f4f565b9150614d7183613f4f565b9250828201905080821115614d8957614d88614786565b5b92915050565b7f457863656564206d617820737570706c79206f6620746f6b656e730000000000600082015250565b6000614dc5601b83613ea8565b9150614dd082614d8f565b602082019050919050565b60006020820190508181036000830152614df481614db8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f457863656564206d617820746f6b656e73207065722074780000000000000000600082015250565b6000614e60601883613ea8565b9150614e6b82614e2a565b602082019050919050565b60006020820190508181036000830152614e8f81614e53565b9050919050565b7f4d757374206d696e74206174206c65617374206f6e6500000000000000000000600082015250565b6000614ecc601683613ea8565b9150614ed782614e96565b602082019050919050565b60006020820190508181036000830152614efb81614ebf565b9050919050565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b6000614f38601083613ea8565b9150614f4382614f02565b602082019050919050565b60006020820190508181036000830152614f6781614f2b565b9050919050565b7f457863656564206d617820737570706c79000000000000000000000000000000600082015250565b6000614fa4601183613ea8565b9150614faf82614f6e565b602082019050919050565b60006020820190508181036000830152614fd381614f97565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b6000615010601583613ea8565b915061501b82614fda565b602082019050919050565b6000602082019050818103600083015261503f81615003565b9050919050565b600081905092915050565b6000815461505e816146c3565b6150688186615046565b945060018216600081146150835760018114615098576150cb565b60ff19831686528115158202860193506150cb565b6150a185614a55565b60005b838110156150c3578154818901526001820191506020810190506150a4565b838801955050505b50505092915050565b60006150df82613e9d565b6150e98185615046565b93506150f9818560208601613eb9565b80840191505092915050565b60006151118285615051565b915061511d82846150d4565b91508190509392505050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061515f600583615046565b915061516a82615129565b600582019050919050565b60006151818285615051565b915061518d82846150d4565b915061519882615152565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615200602683613ea8565b915061520b826151a4565b604082019050919050565b6000602082019050818103600083015261522f816151f3565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000615292602a83613ea8565b915061529d82615236565b604082019050919050565b600060208201905081810360008301526152c181615285565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006152fe601983613ea8565b9150615309826152c8565b602082019050919050565b6000602082019050818103600083015261532d816152f1565b9050919050565b60006040820190506153496000830185613fb2565b6153566020830184613fb2565b9392505050565b60008151905061536c81614458565b92915050565b60006020828403121561538857615387613cf6565b5b60006153968482850161535d565b91505092915050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006153fb602283613ea8565b91506154068261539f565b604082019050919050565b6000602082019050818103600083015261542a816153ee565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b600061548d603983613ea8565b915061549882615431565b604082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061551f603183613ea8565b915061552a826154c3565b604082019050919050565b6000602082019050818103600083015261554e81615512565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006155b1602a83613ea8565b91506155bc82615555565b604082019050919050565b600060208201905081810360008301526155e0816155a4565b9050919050565b60006155f282613f4f565b91506155fd83613f4f565b925082820390508181111561561557615614614786565b5b92915050565b600061562682613f4f565b91506000820361563957615638614786565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006156a0602f83613ea8565b91506156ab82615644565b604082019050919050565b600060208201905081810360008301526156cf81615693565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061570c601a83613ea8565b9150615717826156d6565b602082019050919050565b6000602082019050818103600083015261573b816156ff565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061579e603383613ea8565b91506157a982615742565b604082019050919050565b600060208201905081810360008301526157cd81615791565b9050919050565b60006157df82613f4f565b91506157ea83613f4f565b9250826157fa576157f96147f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000615890603283613ea8565b915061589b82615834565b604082019050919050565b600060208201905081810360008301526158bf81615883565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000615922602683613ea8565b915061592d826158c6565b604082019050919050565b6000602082019050818103600083015261595181615915565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159b4602583613ea8565b91506159bf82615958565b604082019050919050565b600060208201905081810360008301526159e3816159a7565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000615a11826159ea565b9150615a1c836159ea565b925082820390506fffffffffffffffffffffffffffffffff811115615a4457615a43614786565b5b92915050565b6000615a55826159ea565b9150615a60836159ea565b925082820190506fffffffffffffffffffffffffffffffff811115615a8857615a87614786565b5b92915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615aea602183613ea8565b9150615af582615a8e565b604082019050919050565b60006020820190508181036000830152615b1981615add565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000615b56601d83613ea8565b9150615b6182615b20565b602082019050919050565b60006020820190508181036000830152615b8581615b49565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6000615be8602283613ea8565b9150615bf382615b8c565b604082019050919050565b60006020820190508181036000830152615c1781615bdb565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000615c4582615c1e565b615c4f8185615c29565b9350615c5f818560208601613eb9565b615c6881613ee3565b840191505092915050565b6000608082019050615c886000830187613fb2565b615c956020830186613fb2565b615ca2604083018561401c565b8181036060830152615cb48184615c3a565b905095945050505050565b600081519050615cce81613d2c565b92915050565b600060208284031215615cea57615ce9613cf6565b5b6000615cf884828501615cbf565b9150509291505056fea264697066735822122038494cf7135b4257c6e4a006efeb10b8e3e332c9319c2fe441d718d0b18860d664736f6c6343000812003368747470733a2f2f6e6674736572766963652e73332e616d617a6f6e6177732e636f6d2f50657065706978656c2f
Deployed Bytecode
0x6080604052600436106102675760003560e01c8063681c8bac11610144578063a140ae23116100b6578063d7224ba01161007a578063d7224ba014610930578063dc33e6811461095b578063e757223014610998578063e985e9c5146109d5578063f2fde38b14610a12578063f47c84c514610a3b57610267565b8063a140ae231461085c578063a22cb46514610878578063b88d4fde146108a1578063b9bed05e146108ca578063c87b56dd146108f357610267565b8063715018a611610108578063715018a61461077257806378cf19e9146107895780637ff9b596146107b25780638da5cb5b146107dd578063900c71f51461080857806395d89b411461083157610267565b8063681c8bac1461068d5780636a61e5fc146106b85780636c0360eb146106e15780636fa4f5f71461070c57806370a082311461073557610267565b806341f43434116101dd5780634f6ccce7116101a15780634f6ccce71461056957806355f804b3146105a6578063577ac23f146105cf57806359d5335b146105fa5780635e307a48146106255780636352211e1461065057610267565b806341f434341461048657806342842e0e146104b157806348b86a72146104da578063495e1eba146105035780634df8bb451461052c57610267565b806318160ddd1161022f57806318160ddd1461036357806323b872dd1461038e5780632a55205a146103b75780632f745c59146103f557806334a25ad9146104325780633ccfd60b1461046f57610267565b806301ffc9a71461026c57806302fa7c47146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613d58565b610a66565b6040516102a09190613da0565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613e5d565b610a78565b005b3480156102de57600080fd5b506102e7610b02565b6040516102f49190613f2d565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613f85565b610b94565b6040516103319190613fc1565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613fdc565b610c19565b005b34801561036f57600080fd5b50610378610c32565b604051610385919061402b565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190614046565b610c3b565b005b3480156103c357600080fd5b506103de60048036038101906103d99190614099565b610c8a565b6040516103ec9291906140d9565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190613fdc565b610e74565b604051610429919061402b565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190614102565b611070565b604051610466919061402b565b60405180910390f35b34801561047b57600080fd5b506104846110b9565b005b34801561049257600080fd5b5061049b611184565b6040516104a8919061418e565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190614046565b611196565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613f85565b6111e5565b005b34801561050f57600080fd5b5061052a60048036038101906105259190613f85565b61126b565b005b34801561053857600080fd5b50610553600480360381019061054e9190614102565b6112f1565b604051610560919061427e565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613f85565b61139b565b60405161059d919061402b565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c891906143cf565b6113ee565b005b3480156105db57600080fd5b506105e461147d565b6040516105f1919061402b565b60405180910390f35b34801561060657600080fd5b5061060f611483565b60405161061c919061402b565b60405180910390f35b34801561063157600080fd5b5061063a611489565b604051610647919061402b565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190613f85565b61148f565b6040516106849190613fc1565b60405180910390f35b34801561069957600080fd5b506106a26114a5565b6040516106af919061402b565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190613f85565b6114ab565b005b3480156106ed57600080fd5b506106f6611531565b6040516107039190613f2d565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190613f85565b6115bf565b005b34801561074157600080fd5b5061075c60048036038101906107579190614102565b611645565b604051610769919061402b565b60405180910390f35b34801561077e57600080fd5b5061078761172d565b005b34801561079557600080fd5b506107b060048036038101906107ab9190613fdc565b6117b5565b005b3480156107be57600080fd5b506107c7611897565b6040516107d4919061402b565b60405180910390f35b3480156107e957600080fd5b506107f261189d565b6040516107ff9190613fc1565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a9190613f85565b6118c7565b005b34801561083d57600080fd5b506108466119e3565b6040516108539190613f2d565b60405180910390f35b61087660048036038101906108719190614418565b611a75565b005b34801561088457600080fd5b5061089f600480360381019061089a9190614484565b611d34565b005b3480156108ad57600080fd5b506108c860048036038101906108c39190614565565b611d4d565b005b3480156108d657600080fd5b506108f160048036038101906108ec9190613f85565b611d9e565b005b3480156108ff57600080fd5b5061091a60048036038101906109159190613f85565b611e24565b6040516109279190613f2d565b60405180910390f35b34801561093c57600080fd5b50610945612084565b604051610952919061402b565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d9190614102565b61208a565b60405161098f919061402b565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba9190613f85565b61209c565b6040516109cc919061402b565b60405180910390f35b3480156109e157600080fd5b506109fc60048036038101906109f791906145e8565b6120b3565b604051610a099190613da0565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a349190614102565b612147565b005b348015610a4757600080fd5b50610a5061223e565b604051610a5d919061402b565b60405180910390f35b6000610a7182612245565b9050919050565b610a806122bf565b73ffffffffffffffffffffffffffffffffffffffff16610a9e61189d565b73ffffffffffffffffffffffffffffffffffffffff1614610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb90614674565b60405180910390fd5b610afe82826122c7565b5050565b606060018054610b11906146c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3d906146c3565b8015610b8a5780601f10610b5f57610100808354040283529160200191610b8a565b820191906000526020600020905b815481529060010190602001808311610b6d57829003601f168201915b5050505050905090565b6000610b9f8261245c565b610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590614766565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610c2381612469565b610c2d8383612566565b505050565b60008054905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c7957610c7833612469565b5b610c8484848461267e565b50505050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610e1f5760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610e2961268e565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610e5591906147b5565b610e5f9190614826565b90508160000151819350935050509250929050565b6000610e7f83611645565b8210610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb7906148c9565b60405180910390fd5b6000610eca610c32565b905060008060005b8381101561102e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fc457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361101a5786840361100b57819550505050505061106a565b8380611016906148e9565b9450505b508080611026906148e9565b915050610ed2565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611061906149a3565b60405180910390fd5b92915050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c16122bf565b73ffffffffffffffffffffffffffffffffffffffff166110df61189d565b73ffffffffffffffffffffffffffffffffffffffff1614611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90614674565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611180573d6000803e3d6000fd5b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111d4576111d333612469565b5b6111df848484612698565b50505050565b6111ed6122bf565b73ffffffffffffffffffffffffffffffffffffffff1661120b61189d565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890614674565b60405180910390fd5b80600f8190555050565b6112736122bf565b73ffffffffffffffffffffffffffffffffffffffff1661129161189d565b73ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614674565b60405180910390fd5b80600e8190555050565b6112f9613c64565b604051806101200160405280600c548152602001600d5481526020016201869f815260200160011515815260200161132f610c32565b8152602001600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461137657611371846126b8565b611379565b60005b8152602001600e548152602001600f5481526020016010548152509050919050565b60006113a5610c32565b82106113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd90614a35565b60405180910390fd5b819050919050565b6113f66122bf565b73ffffffffffffffffffffffffffffffffffffffff1661141461189d565b73ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614674565b60405180910390fd5b80600b90816114799190614bf7565b5050565b600f5481565b60105481565b600d5481565b600061149a826127a0565b600001519050919050565b600e5481565b6114b36122bf565b73ffffffffffffffffffffffffffffffffffffffff166114d161189d565b73ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90614674565b60405180910390fd5b80600c8190555050565b600b805461153e906146c3565b80601f016020809104026020016040519081016040528092919081815260200182805461156a906146c3565b80156115b75780601f1061158c576101008083540402835291602001916115b7565b820191906000526020600020905b81548152906001019060200180831161159a57829003601f168201915b505050505081565b6115c76122bf565b73ffffffffffffffffffffffffffffffffffffffff166115e561189d565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290614674565b60405180910390fd5b8060108190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90614d3b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6117356122bf565b73ffffffffffffffffffffffffffffffffffffffff1661175361189d565b73ffffffffffffffffffffffffffffffffffffffff16146117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614674565b60405180910390fd5b6117b360006129a3565b565b6117bd6122bf565b73ffffffffffffffffffffffffffffffffffffffff166117db61189d565b73ffffffffffffffffffffffffffffffffffffffff1614611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890614674565b60405180910390fd5b6201869f8161183e610c32565b6118489190614d5b565b1115611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614ddb565b60405180910390fd5b6118938282612a69565b5050565b600c5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118cf6122bf565b73ffffffffffffffffffffffffffffffffffffffff166118ed61189d565b73ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90614674565b60405180910390fd5b6002810361197b576001601260006101000a81548160ff0219169083600281111561197157611970614dfb565b5b02179055506119e0565b600181036119b3576000601260006101000a81548160ff021916908360028111156119a9576119a8614dfb565b5b02179055506119df565b6002601260006101000a81548160ff021916908360028111156119d9576119d8614dfb565b5b02179055505b5b50565b6060600280546119f2906146c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1e906146c3565b8015611a6b5780601f10611a4057610100808354040283529160200191611a6b565b820191906000526020600020905b815481529060010190602001808311611a4e57829003601f168201915b5050505050905090565b600d54821115611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab190614e76565b60405180910390fd5b60008211611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490614ee2565b60405180910390fd5b600c5482611b0b91906147b5565b341015611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490614f4e565b60405180910390fd5b60008290506000600f54118015611b665750600f548310155b8015611b8d57506201869f600f5484611b7f9190614826565b84611b8a9190614d5b565b11155b15611bae57600f5483611ba09190614826565b83611bab9190614d5b565b90505b6201869f81611bbb610c32565b611bc59190614d5b565b1115611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd90614fba565b60405180910390fd5b611c103382612a69565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d2f57600034118015611c5657506000600c54115b8015611c6457506000601054115b15611cd8578173ffffffffffffffffffffffffffffffffffffffff166108fc612710600c5486601054611c9791906147b5565b611ca191906147b5565b611cab9190614826565b9081150290604051600060405180830381858888f19350505050158015611cd6573d6000803e3d6000fd5b505b82601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d279190614d5b565b925050819055505b505050565b81611d3e81612469565b611d488383612a87565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d8b57611d8a33612469565b5b611d9785858585612c07565b5050505050565b611da66122bf565b73ffffffffffffffffffffffffffffffffffffffff16611dc461189d565b73ffffffffffffffffffffffffffffffffffffffff1614611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190614674565b60405180910390fd5b80600d8190555050565b6060611e2f8261245c565b611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590615026565b60405180910390fd5b60016002811115611e8257611e81614dfb565b5b601260009054906101000a900460ff166002811115611ea457611ea3614dfb565b5b03611f07576000600b8054611eb8906146c3565b905011611ed45760405180602001604052806000815250611f00565b600b611edf83612c63565b604051602001611ef0929190615105565b6040516020818303038152906040525b905061207f565b60006002811115611f1b57611f1a614dfb565b5b601260009054906101000a900460ff166002811115611f3d57611f3c614dfb565b5b03611fa0576000600b8054611f51906146c3565b905011611f6d5760405180602001604052806000815250611f99565b600b611f7883612c63565b604051602001611f89929190615175565b6040516020818303038152906040525b905061207f565b600280811115611fb357611fb2614dfb565b5b601260009054906101000a900460ff166002811115611fd557611fd4614dfb565b5b0361206c57600b8054611fe7906146c3565b80601f0160208091040260200160405190810160405280929190818152602001828054612013906146c3565b80156120605780601f1061203557610100808354040283529160200191612060565b820191906000526020600020905b81548152906001019060200180831161204357829003601f168201915b5050505050905061207f565b6040518060200160405280600081525090505b919050565b60075481565b6000612095826126b8565b9050919050565b6000600c54826120ac91906147b5565b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61214f6122bf565b73ffffffffffffffffffffffffffffffffffffffff1661216d61189d565b73ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614674565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990615216565b60405180910390fd5b61223b816129a3565b50565b6201869f81565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122b857506122b782612dc3565b5b9050919050565b600033905090565b6122cf61268e565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561232d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612324906152a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390615314565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000805482109050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115612563576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016124e0929190615334565b602060405180830381865afa1580156124fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125219190615372565b61256257806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016125599190613fc1565b60405180910390fd5b5b50565b60006125718261148f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d890615411565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166126006122bf565b73ffffffffffffffffffffffffffffffffffffffff16148061262f575061262e816126296122bf565b6120b3565b5b61266e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612665906154a3565b60405180910390fd5b612679838383612f0d565b505050565b612689838383612fbf565b505050565b6000612710905090565b6126b383838360405180602001604052806000815250611d4d565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90615535565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6127a8613cb2565b6127b18261245c565b6127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e7906155c7565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000006483106128545760017f00000000000000000000000000000000000000000000000000000000000000648461284791906155e7565b6128519190614d5b565b90505b60008390505b818110612962576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461294e5780935050505061299e565b50808061295a9061561b565b91505061285a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612995906156b6565b60405180910390fd5b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a83828260405180602001604052806000815250613576565b5050565b612a8f6122bf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af390615722565b60405180910390fd5b8060066000612b096122bf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612bb66122bf565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bfb9190613da0565b60405180910390a35050565b612c12848484612fbf565b612c1e84848484613a54565b612c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c54906157b4565b60405180910390fd5b50505050565b606060008203612caa576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dbe565b600082905060005b60008214612cdc578080612cc5906148e9565b915050600a82612cd59190614826565b9150612cb2565b60008167ffffffffffffffff811115612cf857612cf76142a4565b5b6040519080825280601f01601f191660200182016040528015612d2a5781602001600182028036833780820191505090505b5090505b60008514612db757600182612d4391906155e7565b9150600a85612d5291906157d4565b6030612d5e9190614d5b565b60f81b818381518110612d7457612d73615805565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612db09190614826565b9450612d2e565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e8e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ef657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612f065750612f0582613bdb565b5b9050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612fca826127a0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612ff16122bf565b73ffffffffffffffffffffffffffffffffffffffff16148061304d57506130166122bf565b73ffffffffffffffffffffffffffffffffffffffff1661303584610b94565b73ffffffffffffffffffffffffffffffffffffffff16145b80613069575061306882600001516130636122bf565b6120b3565b5b9050806130ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a2906158a6565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461311d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311490615938565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361318c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613183906159ca565b60405180910390fd5b6131998585856001613c45565b6131a96000848460000151612f0d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166132179190615a06565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166132bb9190615a4a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846133c19190614d5b565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613506576134368161245c565b15613505576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461356e8686866001613c4b565b505050505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290615b00565b60405180910390fd5b6135f48161245c565b15613634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362b90615b6c565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000064831115613697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368e90615bfe565b60405180910390fd5b6136a46000858386613c45565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516137a19190615a4a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516137c89190615a4a565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613a3757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46139d76000888488613a54565b613a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0d906157b4565b60405180910390fd5b8180613a21906148e9565b9250508080613a2f906148e9565b915050613966565b5080600081905550613a4c6000878588613c4b565b505050505050565b6000613a758473ffffffffffffffffffffffffffffffffffffffff16613c51565b15613bce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a9e6122bf565b8786866040518563ffffffff1660e01b8152600401613ac09493929190615c73565b6020604051808303816000875af1925050508015613afc57506040513d601f19601f82011682018060405250810190613af99190615cd4565b60015b613b7e573d8060008114613b2c576040519150601f19603f3d011682016040523d82523d6000602084013e613b31565b606091505b506000815103613b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6d906157b4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613bd3565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b50505050565b50505050565b600080823b905060008111915050919050565b60405180610120016040528060008152602001600081526020016000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613d3581613d00565b8114613d4057600080fd5b50565b600081359050613d5281613d2c565b92915050565b600060208284031215613d6e57613d6d613cf6565b5b6000613d7c84828501613d43565b91505092915050565b60008115159050919050565b613d9a81613d85565b82525050565b6000602082019050613db56000830184613d91565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613de682613dbb565b9050919050565b613df681613ddb565b8114613e0157600080fd5b50565b600081359050613e1381613ded565b92915050565b60006bffffffffffffffffffffffff82169050919050565b613e3a81613e19565b8114613e4557600080fd5b50565b600081359050613e5781613e31565b92915050565b60008060408385031215613e7457613e73613cf6565b5b6000613e8285828601613e04565b9250506020613e9385828601613e48565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ed7578082015181840152602081019050613ebc565b60008484015250505050565b6000601f19601f8301169050919050565b6000613eff82613e9d565b613f098185613ea8565b9350613f19818560208601613eb9565b613f2281613ee3565b840191505092915050565b60006020820190508181036000830152613f478184613ef4565b905092915050565b6000819050919050565b613f6281613f4f565b8114613f6d57600080fd5b50565b600081359050613f7f81613f59565b92915050565b600060208284031215613f9b57613f9a613cf6565b5b6000613fa984828501613f70565b91505092915050565b613fbb81613ddb565b82525050565b6000602082019050613fd66000830184613fb2565b92915050565b60008060408385031215613ff357613ff2613cf6565b5b600061400185828601613e04565b925050602061401285828601613f70565b9150509250929050565b61402581613f4f565b82525050565b6000602082019050614040600083018461401c565b92915050565b60008060006060848603121561405f5761405e613cf6565b5b600061406d86828701613e04565b935050602061407e86828701613e04565b925050604061408f86828701613f70565b9150509250925092565b600080604083850312156140b0576140af613cf6565b5b60006140be85828601613f70565b92505060206140cf85828601613f70565b9150509250929050565b60006040820190506140ee6000830185613fb2565b6140fb602083018461401c565b9392505050565b60006020828403121561411857614117613cf6565b5b600061412684828501613e04565b91505092915050565b6000819050919050565b600061415461414f61414a84613dbb565b61412f565b613dbb565b9050919050565b600061416682614139565b9050919050565b60006141788261415b565b9050919050565b6141888161416d565b82525050565b60006020820190506141a3600083018461417f565b92915050565b6141b281613f4f565b82525050565b6141c181613d85565b82525050565b610120820160008201516141de60008501826141a9565b5060208201516141f160208501826141a9565b50604082015161420460408501826141a9565b50606082015161421760608501826141b8565b50608082015161422a60808501826141a9565b5060a082015161423d60a08501826141a9565b5060c082015161425060c08501826141a9565b5060e082015161426360e08501826141a9565b506101008201516142786101008501826141a9565b50505050565b60006101208201905061429460008301846141c7565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142dc82613ee3565b810181811067ffffffffffffffff821117156142fb576142fa6142a4565b5b80604052505050565b600061430e613cec565b905061431a82826142d3565b919050565b600067ffffffffffffffff82111561433a576143396142a4565b5b61434382613ee3565b9050602081019050919050565b82818337600083830152505050565b600061437261436d8461431f565b614304565b90508281526020810184848401111561438e5761438d61429f565b5b614399848285614350565b509392505050565b600082601f8301126143b6576143b561429a565b5b81356143c684826020860161435f565b91505092915050565b6000602082840312156143e5576143e4613cf6565b5b600082013567ffffffffffffffff81111561440357614402613cfb565b5b61440f848285016143a1565b91505092915050565b6000806040838503121561442f5761442e613cf6565b5b600061443d85828601613f70565b925050602061444e85828601613e04565b9150509250929050565b61446181613d85565b811461446c57600080fd5b50565b60008135905061447e81614458565b92915050565b6000806040838503121561449b5761449a613cf6565b5b60006144a985828601613e04565b92505060206144ba8582860161446f565b9150509250929050565b600067ffffffffffffffff8211156144df576144de6142a4565b5b6144e882613ee3565b9050602081019050919050565b6000614508614503846144c4565b614304565b9050828152602081018484840111156145245761452361429f565b5b61452f848285614350565b509392505050565b600082601f83011261454c5761454b61429a565b5b813561455c8482602086016144f5565b91505092915050565b6000806000806080858703121561457f5761457e613cf6565b5b600061458d87828801613e04565b945050602061459e87828801613e04565b93505060406145af87828801613f70565b925050606085013567ffffffffffffffff8111156145d0576145cf613cfb565b5b6145dc87828801614537565b91505092959194509250565b600080604083850312156145ff576145fe613cf6565b5b600061460d85828601613e04565b925050602061461e85828601613e04565b9150509250929050565b7f596f7520617265206e6f7420746865206f776e65720000000000000000000000600082015250565b600061465e601583613ea8565b915061466982614628565b602082019050919050565b6000602082019050818103600083015261468d81614651565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806146db57607f821691505b6020821081036146ee576146ed614694565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000614750602d83613ea8565b915061475b826146f4565b604082019050919050565b6000602082019050818103600083015261477f81614743565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c082613f4f565b91506147cb83613f4f565b92508282026147d981613f4f565b915082820484148315176147f0576147ef614786565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061483182613f4f565b915061483c83613f4f565b92508261484c5761484b6147f7565b5b828204905092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006148b3602283613ea8565b91506148be82614857565b604082019050919050565b600060208201905081810360008301526148e2816148a6565b9050919050565b60006148f482613f4f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361492657614925614786565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b600061498d602e83613ea8565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a1f602383613ea8565b9150614a2a826149c3565b604082019050919050565b60006020820190508181036000830152614a4e81614a12565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ab77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614a7a565b614ac18683614a7a565b95508019841693508086168417925050509392505050565b6000614af4614aef614aea84613f4f565b61412f565b613f4f565b9050919050565b6000819050919050565b614b0e83614ad9565b614b22614b1a82614afb565b848454614a87565b825550505050565b600090565b614b37614b2a565b614b42818484614b05565b505050565b5b81811015614b6657614b5b600082614b2f565b600181019050614b48565b5050565b601f821115614bab57614b7c81614a55565b614b8584614a6a565b81016020851015614b94578190505b614ba8614ba085614a6a565b830182614b47565b50505b505050565b600082821c905092915050565b6000614bce60001984600802614bb0565b1980831691505092915050565b6000614be78383614bbd565b9150826002028217905092915050565b614c0082613e9d565b67ffffffffffffffff811115614c1957614c186142a4565b5b614c2382546146c3565b614c2e828285614b6a565b600060209050601f831160018114614c615760008415614c4f578287015190505b614c598582614bdb565b865550614cc1565b601f198416614c6f86614a55565b60005b82811015614c9757848901518255600182019150602085019450602081019050614c72565b86831015614cb45784890151614cb0601f891682614bbd565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614d25602b83613ea8565b9150614d3082614cc9565b604082019050919050565b60006020820190508181036000830152614d5481614d18565b9050919050565b6000614d6682613f4f565b9150614d7183613f4f565b9250828201905080821115614d8957614d88614786565b5b92915050565b7f457863656564206d617820737570706c79206f6620746f6b656e730000000000600082015250565b6000614dc5601b83613ea8565b9150614dd082614d8f565b602082019050919050565b60006020820190508181036000830152614df481614db8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f457863656564206d617820746f6b656e73207065722074780000000000000000600082015250565b6000614e60601883613ea8565b9150614e6b82614e2a565b602082019050919050565b60006020820190508181036000830152614e8f81614e53565b9050919050565b7f4d757374206d696e74206174206c65617374206f6e6500000000000000000000600082015250565b6000614ecc601683613ea8565b9150614ed782614e96565b602082019050919050565b60006020820190508181036000830152614efb81614ebf565b9050919050565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b6000614f38601083613ea8565b9150614f4382614f02565b602082019050919050565b60006020820190508181036000830152614f6781614f2b565b9050919050565b7f457863656564206d617820737570706c79000000000000000000000000000000600082015250565b6000614fa4601183613ea8565b9150614faf82614f6e565b602082019050919050565b60006020820190508181036000830152614fd381614f97565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b6000615010601583613ea8565b915061501b82614fda565b602082019050919050565b6000602082019050818103600083015261503f81615003565b9050919050565b600081905092915050565b6000815461505e816146c3565b6150688186615046565b945060018216600081146150835760018114615098576150cb565b60ff19831686528115158202860193506150cb565b6150a185614a55565b60005b838110156150c3578154818901526001820191506020810190506150a4565b838801955050505b50505092915050565b60006150df82613e9d565b6150e98185615046565b93506150f9818560208601613eb9565b80840191505092915050565b60006151118285615051565b915061511d82846150d4565b91508190509392505050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061515f600583615046565b915061516a82615129565b600582019050919050565b60006151818285615051565b915061518d82846150d4565b915061519882615152565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615200602683613ea8565b915061520b826151a4565b604082019050919050565b6000602082019050818103600083015261522f816151f3565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000615292602a83613ea8565b915061529d82615236565b604082019050919050565b600060208201905081810360008301526152c181615285565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006152fe601983613ea8565b9150615309826152c8565b602082019050919050565b6000602082019050818103600083015261532d816152f1565b9050919050565b60006040820190506153496000830185613fb2565b6153566020830184613fb2565b9392505050565b60008151905061536c81614458565b92915050565b60006020828403121561538857615387613cf6565b5b60006153968482850161535d565b91505092915050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006153fb602283613ea8565b91506154068261539f565b604082019050919050565b6000602082019050818103600083015261542a816153ee565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b600061548d603983613ea8565b915061549882615431565b604082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061551f603183613ea8565b915061552a826154c3565b604082019050919050565b6000602082019050818103600083015261554e81615512565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006155b1602a83613ea8565b91506155bc82615555565b604082019050919050565b600060208201905081810360008301526155e0816155a4565b9050919050565b60006155f282613f4f565b91506155fd83613f4f565b925082820390508181111561561557615614614786565b5b92915050565b600061562682613f4f565b91506000820361563957615638614786565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006156a0602f83613ea8565b91506156ab82615644565b604082019050919050565b600060208201905081810360008301526156cf81615693565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061570c601a83613ea8565b9150615717826156d6565b602082019050919050565b6000602082019050818103600083015261573b816156ff565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061579e603383613ea8565b91506157a982615742565b604082019050919050565b600060208201905081810360008301526157cd81615791565b9050919050565b60006157df82613f4f565b91506157ea83613f4f565b9250826157fa576157f96147f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000615890603283613ea8565b915061589b82615834565b604082019050919050565b600060208201905081810360008301526158bf81615883565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000615922602683613ea8565b915061592d826158c6565b604082019050919050565b6000602082019050818103600083015261595181615915565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159b4602583613ea8565b91506159bf82615958565b604082019050919050565b600060208201905081810360008301526159e3816159a7565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000615a11826159ea565b9150615a1c836159ea565b925082820390506fffffffffffffffffffffffffffffffff811115615a4457615a43614786565b5b92915050565b6000615a55826159ea565b9150615a60836159ea565b925082820190506fffffffffffffffffffffffffffffffff811115615a8857615a87614786565b5b92915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615aea602183613ea8565b9150615af582615a8e565b604082019050919050565b60006020820190508181036000830152615b1981615add565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000615b56601d83613ea8565b9150615b6182615b20565b602082019050919050565b60006020820190508181036000830152615b8581615b49565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6000615be8602283613ea8565b9150615bf382615b8c565b604082019050919050565b60006020820190508181036000830152615c1781615bdb565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000615c4582615c1e565b615c4f8185615c29565b9350615c5f818560208601613eb9565b615c6881613ee3565b840191505092915050565b6000608082019050615c886000830187613fb2565b615c956020830186613fb2565b615ca2604083018561401c565b8181036060830152615cb48184615c3a565b905095945050505050565b600081519050615cce81613d2c565b92915050565b600060208284031215615cea57615ce9613cf6565b5b6000615cf884828501615cbf565b9150509291505056fea264697066735822122038494cf7135b4257c6e4a006efeb10b8e3e332c9319c2fe441d718d0b18860d664736f6c63430008120033
Deployed Bytecode Sourcemap
50724:8260:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57504:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57733:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32113:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33825:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58127:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28508:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58324:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48030:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;29216:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57397:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52830:143;;;;;;;;;;;;;:::i;:::-;;2763;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58529:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57145:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56978:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52159:663;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28685:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53532:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51205:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51371:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50950:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31922:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50994:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55055:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50804:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57285:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30638:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45776:103;;;;;;;;;;;;;:::i;:::-;;53245:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50885:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45136:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56178:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32282:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53939:1108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57911:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58742:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56850:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55171:999;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40255:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56611:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53740:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34588:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46034:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51040:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57504:221;57652:4;57681:36;57705:11;57681:23;:36::i;:::-;57674:43;;57504:221;;;:::o;57733:170::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;57851:44:::1;57870:8;57880:14;57851:18;:44::i;:::-;57733:170:::0;;:::o;32113:100::-;32167:13;32200:5;32193:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32113:100;:::o;33825:292::-;33929:7;33976:16;33984:7;33976;:16::i;:::-;33954:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34085:15;:24;34101:7;34085:24;;;;;;;;;;;;;;;;;;;;;34078:31;;33825:292;;;:::o;58127:189::-;58250:8;4418:30;4439:8;4418:20;:30::i;:::-;58276:32:::1;58290:8;58300:7;58276:13;:32::i;:::-;58127:189:::0;;;:::o;28508:100::-;28561:7;28588:12;;28581:19;;28508:100;:::o;58324:197::-;58459:4;4246:10;4238:18;;:4;:18;;;4234:83;;4273:32;4294:10;4273:20;:32::i;:::-;4234:83;58476:37:::1;58495:4;58501:2;58505:7;58476:18;:37::i;:::-;58324:197:::0;;;;:::o;48030:505::-;48172:7;48181;48206:26;48235:17;:27;48253:8;48235:27;;;;;;;;;;;48206:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48307:1;48279:30;;:7;:16;;;:30;;;48275:92;;48336:19;48326:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48275:92;48379:21;48457:17;:15;:17::i;:::-;48403:71;;48417:7;:23;;;48404:36;;:10;:36;;;;:::i;:::-;48403:71;;;;:::i;:::-;48379:95;;48495:7;:16;;;48513:13;48487:40;;;;;;48030:505;;;;;:::o;29216:864::-;29341:7;29382:16;29392:5;29382:9;:16::i;:::-;29374:5;:24;29366:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29448:22;29473:13;:11;:13::i;:::-;29448:38;;29497:19;29531:25;29585:9;29580:426;29604:14;29600:1;:18;29580:426;;;29640:31;29674:11;:14;29686:1;29674:14;;;;;;;;;;;29640:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29733:1;29707:28;;:9;:14;;;:28;;;29703:103;;29776:9;:14;;;29756:34;;29703:103;29845:5;29824:26;;:17;:26;;;29820:175;;29890:5;29875:11;:20;29871:77;;29927:1;29920:8;;;;;;;;;29871:77;29966:13;;;;;:::i;:::-;;;;29820:175;29625:381;29620:3;;;;;:::i;:::-;;;;29580:426;;;;30016:56;;;;;;;;;;:::i;:::-;;;;;;;;29216:864;;;;;:::o;57397:99::-;57452:7;57479:4;:9;57484:3;57479:9;;;;;;;;;;;;;;;;57472:16;;57397:99;;;:::o;52830:143::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;52878:15:::1;52896:21;52878:39;;52936:10;52928:28;;:37;52957:7;52928:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52867:106;52830:143::o:0;2763:::-;2863:42;2763:143;:::o;58529:205::-;58668:4;4246:10;4238:18;;:4;:18;;;4234:83;;4273:32;4294:10;4273:20;:32::i;:::-;4234:83;58685:41:::1;58708:4;58714:2;58718:7;58685:22;:41::i;:::-;58529:205:::0;;;;:::o;57145:132::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;57251:18:::1;57231:17;:38;;;;57145:132:::0;:::o;56978:159::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;57110:19:::1;57089:18;:40;;;;56978:159:::0;:::o;52159:663::-;52214:18;;:::i;:::-;52265:549;;;;;;;;52308:10;;52265:549;;;;52353:14;;52265:549;;;;51077:5;52265:549;;;;52441:4;52265:549;;;;;;52501:13;:11;:13::i;:::-;52265:549;;;;52564:1;52546:20;;:6;:20;;;:99;;52623:21;52637:6;52623:13;:21::i;:::-;52546:99;;;52590:1;52546:99;52265:549;;;;52684:18;;52265:549;;;;52740:17;;52265:549;;;;52788:10;;52265:549;;;52245:569;;52159:663;;;:::o;28685:228::-;28788:7;28829:13;:11;:13::i;:::-;28821:5;:21;28813:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28900:5;28893:12;;28685:228;;;:::o;53532:94::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;53612:6:::1;53602:7;:16;;;;;;:::i;:::-;;53532:94:::0;:::o;51205:36::-;;;;:::o;51371:30::-;;;;:::o;50950:35::-;;;;:::o;31922:124::-;31986:7;32013:20;32025:7;32013:11;:20::i;:::-;:25;;;32006:32;;31922:124;;;:::o;50994:37::-;;;;:::o;55055:108::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;55142:13:::1;55129:10;:26;;;;55055:108:::0;:::o;50804:72::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57285:104::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;57370:11:::1;57357:10;:24;;;;57285:104:::0;:::o;30638:258::-;30702:7;30761:1;30744:19;;:5;:19;;;30722:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;30860:12;:19;30873:5;30860:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30852:36;;30845:43;;30638:258;;;:::o;45776:103::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45841:30:::1;45868:1;45841:18;:30::i;:::-;45776:103::o:0;53245:279::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;51077:5:::1;53393:14;53377:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;53355:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;53487:29;53497:2;53501:14;53487:9;:29::i;:::-;53245:279:::0;;:::o;50885:44::-;;;;:::o;45136:87::-;45182:7;45209:6;;;;;;;;;;;45202:13;;45136:87;:::o;56178:309::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;56259:1:::1;56251:4;:9:::0;56247:233:::1;;56292:21;56277:12;;:36;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;56247:233;;;56343:1;56335:4;:9:::0;56331:149:::1;;56376:21;56361:12;;:36;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;56331:149;;;56445:23;56430:12;;:38;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;56331:149;56247:233;56178:309:::0;:::o;32282:104::-;32338:13;32371:7;32364:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32282:104;:::o;53939:1108::-;54105:14;;54087;:32;;54079:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54184:1;54167:14;:18;54159:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;54261:10;;54244:14;:27;;;;:::i;:::-;54231:9;:40;;54223:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54303:12;54318:14;54303:29;;54381:1;54361:17;;:21;:73;;;;;54417:17;;54399:14;:35;;54361:73;:157;;;;;51077:5;54486:17;;54469:14;:34;;;;:::i;:::-;54451:14;:53;;;;:::i;:::-;:67;;54361:157;54343:274;;;54587:17;;54570:14;:34;;;;:::i;:::-;54552:14;:53;;;;:::i;:::-;54545:60;;54343:274;51077:5;54651:4;54635:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:34;;54627:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;54702:27;54712:10;54724:4;54702:9;:27::i;:::-;54759:1;54744:17;;:3;:17;;;54740:300;;54794:1;54782:9;:13;:31;;;;;54812:1;54799:10;;:14;54782:31;:49;;;;;54830:1;54817:10;;:14;54782:49;54778:209;;;54860:3;54852:21;;:119;51466:5;54927:10;;54910:14;54897:10;;:27;;;;:::i;:::-;:40;;;;:::i;:::-;54896:56;;;;:::i;:::-;54852:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54778:209;55014:14;55001:4;:9;55006:3;55001:9;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;54740:300;54010:1037;53939:1108;;:::o;57911:208::-;58042:8;4418:30;4439:8;4418:20;:30::i;:::-;58068:43:::1;58092:8;58102;58068:23;:43::i;:::-;57911:208:::0;;;:::o;58742:239::-;58909:4;4246:10;4238:18;;:4;:18;;;4234:83;;4273:32;4294:10;4273:20;:32::i;:::-;4234:83;58926:47:::1;58949:4;58955:2;58959:7;58968:4;58926:22;:47::i;:::-;58742:239:::0;;;;;:::o;56850:120::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;56947:15:::1;56930:14;:32;;;;56850:120:::0;:::o;55171:999::-;55273:13;55312:17;55320:8;55312:7;:17::i;:::-;55304:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;55386:21;55370:37;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:37;;;;;;;;:::i;:::-;;;55366:777;;55472:1;55454:7;55448:21;;;;;:::i;:::-;;;:25;:184;;;;;;;;;;;;;;;;;55547:7;55556:26;55573:8;55556:16;:26::i;:::-;55530:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55448:184;55424:208;;;;55366:777;55670:21;55654:37;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:37;;;;;;;;:::i;:::-;;;55650:493;;55756:1;55738:7;55732:21;;;;;:::i;:::-;;;:25;:307;;;;;;;;;;;;;;;;;55861:7;55899:26;55916:8;55899:16;:26::i;:::-;55814:176;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55732:307;55708:331;;;;55650:493;56077:23;56061:39;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:39;;;;;;;;:::i;:::-;;;56057:86;;56124:7;56117:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56057:86;56153:9;;;;;;;;;;;;;;55171:999;;;;:::o;40255:43::-;;;;:::o;56611:113::-;56669:7;56696:20;56710:5;56696:13;:20::i;:::-;56689:27;;56611:113;;;:::o;53740:125::-;53803:7;53847:10;;53830:14;:27;;;;:::i;:::-;53823:34;;53740:125;;;:::o;34588:214::-;34730:4;34759:18;:25;34778:5;34759:25;;;;;;;;;;;;;;;:35;34785:8;34759:35;;;;;;;;;;;;;;;;;;;;;;;;;34752:42;;34588:214;;;;:::o;46034:238::-;45367:12;:10;:12::i;:::-;45356:23;;:7;:5;:7::i;:::-;:23;;;45348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46157:1:::1;46137:22;;:8;:22;;::::0;46115:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46236:28;46255:8;46236:18;:28::i;:::-;46034:238:::0;:::o;51040:42::-;51077:5;51040:42;:::o;47684:291::-;47831:4;47888:26;47873:41;;;:11;:41;;;;:94;;;;47931:36;47955:11;47931:23;:36::i;:::-;47873:94;47853:114;;47684:291;;;:::o;22849:98::-;22902:7;22929:10;22922:17;;22849:98;:::o;49185:392::-;49341:17;:15;:17::i;:::-;49325:33;;:12;:33;;;;49303:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;49467:1;49447:22;;:8;:22;;;49439:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;49534:35;;;;;;;;49546:8;49534:35;;;;;;49556:12;49534:35;;;;;49512:19;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49185:392;;:::o;35984:111::-;36041:4;36075:12;;36065:7;:22;36058:29;;35984:111;;;:::o;4476:512::-;4715:1;2863:42;4667:45;;;:49;4663:318;;;2863:42;4756;;;4829:4;4857:8;4756:128;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4733:237;;4945:8;4926:28;;;;;;;;;;;:::i;:::-;;;;;;;;4733:237;4663:318;4476:512;:::o;33338:421::-;33419:13;33435:24;33451:7;33435:15;:24::i;:::-;33419:40;;33484:5;33478:11;;:2;:11;;;33470:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33579:5;33563:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33588:37;33605:5;33612:12;:10;:12::i;:::-;33588:16;:37::i;:::-;33563:62;33541:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33723:28;33732:2;33736:7;33745:5;33723:8;:28::i;:::-;33408:351;33338:421;;:::o;34869:170::-;35003:28;35013:4;35019:2;35023:7;35003:9;:28::i;:::-;34869:170;;;:::o;48817:97::-;48875:6;48901:5;48894:12;;48817:97;:::o;35110:185::-;35248:39;35265:4;35271:2;35275:7;35248:39;;;;;;;;;;;;:16;:39::i;:::-;35110:185;;;:::o;30904:266::-;30965:7;31024:1;31007:19;;:5;:19;;;30985:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;31129:12;:19;31142:5;31129:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;31121:41;;31114:48;;30904:266;;;:::o;31178:682::-;31266:21;;:::i;:::-;31313:16;31321:7;31313;:16::i;:::-;31305:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31389:26;31441:12;31430:7;:23;31426:103;;31516:1;31501:12;31491:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;31470:47;;31426:103;31546:12;31561:7;31546:22;;31541:242;31578:18;31570:4;:26;31541:242;;31621:31;31655:11;:17;31667:4;31655:17;;;;;;;;;;;31621:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31717:1;31691:28;;:9;:14;;;:28;;;31687:85;;31747:9;31740:16;;;;;;;31687:85;31606:177;31598:6;;;;;:::i;:::-;;;;31541:242;;;;31795:57;;;;;;;;;;:::i;:::-;;;;;;;;31178:682;;;;:::o;46432:191::-;46506:16;46525:6;;;;;;;;;;;46506:25;;46551:8;46542:6;;:17;;;;;;;;;;;;;;;;;;46606:8;46575:40;;46596:8;46575:40;;;;;;;;;;;;46495:128;46432:191;:::o;36103:104::-;36172:27;36182:2;36186:8;36172:27;;;;;;;;;;;;:9;:27::i;:::-;36103:104;;:::o;34189:328::-;34336:12;:10;:12::i;:::-;34324:24;;:8;:24;;;34316:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34437:8;34392:18;:32;34411:12;:10;:12::i;:::-;34392:32;;;;;;;;;;;;;;;:42;34425:8;34392:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34490:8;34461:48;;34476:12;:10;:12::i;:::-;34461:48;;;34500:8;34461:48;;;;;;:::i;:::-;;;;;;;;34189:328;;:::o;35366:363::-;35533:28;35543:4;35549:2;35553:7;35533:9;:28::i;:::-;35594:48;35617:4;35623:2;35627:7;35636:5;35594:22;:48::i;:::-;35572:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;35366:363;;;;:::o;23345:723::-;23401:13;23631:1;23622:5;:10;23618:53;;23649:10;;;;;;;;;;;;;;;;;;;;;23618:53;23681:12;23696:5;23681:20;;23712:14;23737:78;23752:1;23744:4;:9;23737:78;;23770:8;;;;;:::i;:::-;;;;23801:2;23793:10;;;;;:::i;:::-;;;23737:78;;;23825:19;23857:6;23847:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23825:39;;23875:154;23891:1;23882:5;:10;23875:154;;23919:1;23909:11;;;;;:::i;:::-;;;23986:2;23978:5;:10;;;;:::i;:::-;23965:2;:24;;;;:::i;:::-;23952:39;;23935:6;23942;23935:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;24015:2;24006:11;;;;;:::i;:::-;;;23875:154;;;24053:6;24039:21;;;;;23345:723;;;;:::o;30152:422::-;30299:4;30356:25;30341:40;;;:11;:40;;;;:105;;;;30413:33;30398:48;;;:11;:48;;;;30341:105;:172;;;;30478:35;30463:50;;;:11;:50;;;;30341:172;:225;;;;30530:36;30554:11;30530:23;:36::i;:::-;30341:225;30321:245;;30152:422;;;:::o;40051:196::-;40193:2;40166:15;:24;40182:7;40166:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40231:7;40227:2;40211:28;;40220:5;40211:28;;;;;;;;;;;;40051:196;;;:::o;38224:1709::-;38339:35;38377:20;38389:7;38377:11;:20::i;:::-;38339:58;;38410:22;38452:13;:18;;;38436:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;38511:12;:10;:12::i;:::-;38487:36;;:20;38499:7;38487:11;:20::i;:::-;:36;;;38436:87;:154;;;;38540:50;38557:13;:18;;;38577:12;:10;:12::i;:::-;38540:16;:50::i;:::-;38436:154;38410:181;;38626:17;38604:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;38778:4;38756:26;;:13;:18;;;:26;;;38734:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;38881:1;38867:16;;:2;:16;;;38859:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38938:43;38960:4;38966:2;38970:7;38979:1;38938:21;:43::i;:::-;39046:49;39063:1;39067:7;39076:13;:18;;;39046:8;:49::i;:::-;39138:1;39108:12;:18;39121:4;39108:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39178:1;39150:12;:16;39163:2;39150:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39213:43;;;;;;;;39228:2;39213:43;;;;;;39239:15;39213:43;;;;;39190:11;:20;39202:7;39190:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39496:19;39528:1;39518:7;:11;;;;:::i;:::-;39496:33;;39585:1;39544:43;;:11;:24;39556:11;39544:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;39540:288;;39608:20;39616:11;39608:7;:20::i;:::-;39604:213;;;39676:125;;;;;;;;39713:13;:18;;;39676:125;;;;;;39754:13;:28;;;39676:125;;;;;39649:11;:24;39661:11;39649:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39604:213;39540:288;39864:7;39860:2;39845:27;;39854:4;39845:27;;;;;;;;;;;;39883:42;39904:4;39910:2;39914:7;39923:1;39883:20;:42::i;:::-;38328:1605;;;38224:1709;;;:::o;36570:1400::-;36693:20;36716:12;;36693:35;;36761:1;36747:16;;:2;:16;;;36739:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36946:21;36954:12;36946:7;:21::i;:::-;36945:22;36937:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37032:12;37020:8;:24;;37012:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37096:61;37126:1;37130:2;37134:12;37148:8;37096:21;:61::i;:::-;37170:30;37203:12;:16;37216:2;37203:16;;;;;;;;;;;;;;;37170:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37249:135;;;;;;;;37305:8;37275:11;:19;;;:39;;;;:::i;:::-;37249:135;;;;;;37364:8;37329:11;:24;;;:44;;;;:::i;:::-;37249:135;;;;;37230:12;:16;37243:2;37230:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37423:43;;;;;;;;37438:2;37423:43;;;;;;37449:15;37423:43;;;;;37395:11;:25;37407:12;37395:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37479:20;37502:12;37479:35;;37532:9;37527:325;37551:8;37547:1;:12;37527:325;;;37611:12;37607:2;37586:38;;37603:1;37586:38;;;;;;;;;;;;37665:59;37696:1;37700:2;37704:12;37718:5;37665:22;:59::i;:::-;37639:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;37826:14;;;;;:::i;:::-;;;;37561:3;;;;;:::i;:::-;;;;37527:325;;;;37879:12;37864;:27;;;;37902:60;37931:1;37935:2;37939:12;37953:8;37902:20;:60::i;:::-;36682:1288;;;36570:1400;;;:::o;41926:985::-;42081:4;42102:15;:2;:13;;;:15::i;:::-;42098:806;;;42171:2;42155:36;;;42214:12;:10;:12::i;:::-;42249:4;42276:7;42306:5;42155:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42134:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42534:1;42517:6;:13;:18;42513:321;;42560:109;;;;;;;;;;:::i;:::-;;;;;;;;42513:321;42784:6;42778:13;42769:6;42765:2;42761:15;42754:38;42134:715;42404:45;;;42394:55;;;:6;:55;;;;42387:62;;;;;42098:806;42888:4;42881:11;;41926:985;;;;;;;:::o;13504:207::-;13634:4;13678:25;13663:40;;;:11;:40;;;;13656:47;;13504:207;;;:::o;43399:159::-;;;;;:::o;43970:158::-;;;;;:::o;14455:387::-;14515:4;14723:12;14790:7;14778:20;14770:28;;14833:1;14826:4;:8;14819:15;;;14455:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:109::-;2061:7;2101:26;2094:5;2090:38;2079:49;;2025:109;;;:::o;2140:120::-;2212:23;2229:5;2212:23;:::i;:::-;2205:5;2202:34;2192:62;;2250:1;2247;2240:12;2192:62;2140:120;:::o;2266:137::-;2311:5;2349:6;2336:20;2327:29;;2365:32;2391:5;2365:32;:::i;:::-;2266:137;;;;:::o;2409:472::-;2476:6;2484;2533:2;2521:9;2512:7;2508:23;2504:32;2501:119;;;2539:79;;:::i;:::-;2501:119;2659:1;2684:53;2729:7;2720:6;2709:9;2705:22;2684:53;:::i;:::-;2674:63;;2630:117;2786:2;2812:52;2856:7;2847:6;2836:9;2832:22;2812:52;:::i;:::-;2802:62;;2757:117;2409:472;;;;;:::o;2887:99::-;2939:6;2973:5;2967:12;2957:22;;2887:99;;;:::o;2992:169::-;3076:11;3110:6;3105:3;3098:19;3150:4;3145:3;3141:14;3126:29;;2992:169;;;;:::o;3167:246::-;3248:1;3258:113;3272:6;3269:1;3266:13;3258:113;;;3357:1;3352:3;3348:11;3342:18;3338:1;3333:3;3329:11;3322:39;3294:2;3291:1;3287:10;3282:15;;3258:113;;;3405:1;3396:6;3391:3;3387:16;3380:27;3229:184;3167:246;;;:::o;3419:102::-;3460:6;3511:2;3507:7;3502:2;3495:5;3491:14;3487:28;3477:38;;3419:102;;;:::o;3527:377::-;3615:3;3643:39;3676:5;3643:39;:::i;:::-;3698:71;3762:6;3757:3;3698:71;:::i;:::-;3691:78;;3778:65;3836:6;3831:3;3824:4;3817:5;3813:16;3778:65;:::i;:::-;3868:29;3890:6;3868:29;:::i;:::-;3863:3;3859:39;3852:46;;3619:285;3527:377;;;;:::o;3910:313::-;4023:4;4061:2;4050:9;4046:18;4038:26;;4110:9;4104:4;4100:20;4096:1;4085:9;4081:17;4074:47;4138:78;4211:4;4202:6;4138:78;:::i;:::-;4130:86;;3910:313;;;;:::o;4229:77::-;4266:7;4295:5;4284:16;;4229:77;;;:::o;4312:122::-;4385:24;4403:5;4385:24;:::i;:::-;4378:5;4375:35;4365:63;;4424:1;4421;4414:12;4365:63;4312:122;:::o;4440:139::-;4486:5;4524:6;4511:20;4502:29;;4540:33;4567:5;4540:33;:::i;:::-;4440:139;;;;:::o;4585:329::-;4644:6;4693:2;4681:9;4672:7;4668:23;4664:32;4661:119;;;4699:79;;:::i;:::-;4661:119;4819:1;4844:53;4889:7;4880:6;4869:9;4865:22;4844:53;:::i;:::-;4834:63;;4790:117;4585:329;;;;:::o;4920:118::-;5007:24;5025:5;5007:24;:::i;:::-;5002:3;4995:37;4920:118;;:::o;5044:222::-;5137:4;5175:2;5164:9;5160:18;5152:26;;5188:71;5256:1;5245:9;5241:17;5232:6;5188:71;:::i;:::-;5044:222;;;;:::o;5272:474::-;5340:6;5348;5397:2;5385:9;5376:7;5372:23;5368:32;5365:119;;;5403:79;;:::i;:::-;5365:119;5523:1;5548:53;5593:7;5584:6;5573:9;5569:22;5548:53;:::i;:::-;5538:63;;5494:117;5650:2;5676:53;5721:7;5712:6;5701:9;5697:22;5676:53;:::i;:::-;5666:63;;5621:118;5272:474;;;;;:::o;5752:118::-;5839:24;5857:5;5839:24;:::i;:::-;5834:3;5827:37;5752:118;;:::o;5876:222::-;5969:4;6007:2;5996:9;5992:18;5984:26;;6020:71;6088:1;6077:9;6073:17;6064:6;6020:71;:::i;:::-;5876:222;;;;:::o;6104:619::-;6181:6;6189;6197;6246:2;6234:9;6225:7;6221:23;6217:32;6214:119;;;6252:79;;:::i;:::-;6214:119;6372:1;6397:53;6442:7;6433:6;6422:9;6418:22;6397:53;:::i;:::-;6387:63;;6343:117;6499:2;6525:53;6570:7;6561:6;6550:9;6546:22;6525:53;:::i;:::-;6515:63;;6470:118;6627:2;6653:53;6698:7;6689:6;6678:9;6674:22;6653:53;:::i;:::-;6643:63;;6598:118;6104:619;;;;;:::o;6729:474::-;6797:6;6805;6854:2;6842:9;6833:7;6829:23;6825:32;6822:119;;;6860:79;;:::i;:::-;6822:119;6980:1;7005:53;7050:7;7041:6;7030:9;7026:22;7005:53;:::i;:::-;6995:63;;6951:117;7107:2;7133:53;7178:7;7169:6;7158:9;7154:22;7133:53;:::i;:::-;7123:63;;7078:118;6729:474;;;;;:::o;7209:332::-;7330:4;7368:2;7357:9;7353:18;7345:26;;7381:71;7449:1;7438:9;7434:17;7425:6;7381:71;:::i;:::-;7462:72;7530:2;7519:9;7515:18;7506:6;7462:72;:::i;:::-;7209:332;;;;;:::o;7547:329::-;7606:6;7655:2;7643:9;7634:7;7630:23;7626:32;7623:119;;;7661:79;;:::i;:::-;7623:119;7781:1;7806:53;7851:7;7842:6;7831:9;7827:22;7806:53;:::i;:::-;7796:63;;7752:117;7547:329;;;;:::o;7882:60::-;7910:3;7931:5;7924:12;;7882:60;;;:::o;7948:142::-;7998:9;8031:53;8049:34;8058:24;8076:5;8058:24;:::i;:::-;8049:34;:::i;:::-;8031:53;:::i;:::-;8018:66;;7948:142;;;:::o;8096:126::-;8146:9;8179:37;8210:5;8179:37;:::i;:::-;8166:50;;8096:126;;;:::o;8228:157::-;8309:9;8342:37;8373:5;8342:37;:::i;:::-;8329:50;;8228:157;;;:::o;8391:193::-;8509:68;8571:5;8509:68;:::i;:::-;8504:3;8497:81;8391:193;;:::o;8590:284::-;8714:4;8752:2;8741:9;8737:18;8729:26;;8765:102;8864:1;8853:9;8849:17;8840:6;8765:102;:::i;:::-;8590:284;;;;:::o;8880:108::-;8957:24;8975:5;8957:24;:::i;:::-;8952:3;8945:37;8880:108;;:::o;8994:99::-;9065:21;9080:5;9065:21;:::i;:::-;9060:3;9053:34;8994:99;;:::o;9167:1809::-;9322:6;9317:3;9313:16;9417:4;9410:5;9406:16;9400:23;9436:63;9493:4;9488:3;9484:14;9470:12;9436:63;:::i;:::-;9339:170;9601:4;9594:5;9590:16;9584:23;9620:63;9677:4;9672:3;9668:14;9654:12;9620:63;:::i;:::-;9519:174;9781:4;9774:5;9770:16;9764:23;9800:63;9857:4;9852:3;9848:14;9834:12;9800:63;:::i;:::-;9703:170;9963:4;9956:5;9952:16;9946:23;9982:57;10033:4;10028:3;10024:14;10010:12;9982:57;:::i;:::-;9883:166;10138:4;10131:5;10127:16;10121:23;10157:63;10214:4;10209:3;10205:14;10191:12;10157:63;:::i;:::-;10059:171;10318:4;10311:5;10307:16;10301:23;10337:63;10394:4;10389:3;10385:14;10371:12;10337:63;:::i;:::-;10240:170;10506:4;10499:5;10495:16;10489:23;10525:63;10582:4;10577:3;10573:14;10559:12;10525:63;:::i;:::-;10420:178;10693:4;10686:5;10682:16;10676:23;10712:63;10769:4;10764:3;10760:14;10746:12;10712:63;:::i;:::-;10608:177;10873:6;10866:5;10862:18;10856:25;10894:65;10951:6;10946:3;10942:16;10928:12;10894:65;:::i;:::-;10795:174;9291:1685;9167:1809;;:::o;10982:339::-;11133:4;11171:3;11160:9;11156:19;11148:27;;11185:129;11311:1;11300:9;11296:17;11287:6;11185:129;:::i;:::-;10982:339;;;;:::o;11327:117::-;11436:1;11433;11426:12;11450:117;11559:1;11556;11549:12;11573:180;11621:77;11618:1;11611:88;11718:4;11715:1;11708:15;11742:4;11739:1;11732:15;11759:281;11842:27;11864:4;11842:27;:::i;:::-;11834:6;11830:40;11972:6;11960:10;11957:22;11936:18;11924:10;11921:34;11918:62;11915:88;;;11983:18;;:::i;:::-;11915:88;12023:10;12019:2;12012:22;11802:238;11759:281;;:::o;12046:129::-;12080:6;12107:20;;:::i;:::-;12097:30;;12136:33;12164:4;12156:6;12136:33;:::i;:::-;12046:129;;;:::o;12181:308::-;12243:4;12333:18;12325:6;12322:30;12319:56;;;12355:18;;:::i;:::-;12319:56;12393:29;12415:6;12393:29;:::i;:::-;12385:37;;12477:4;12471;12467:15;12459:23;;12181:308;;;:::o;12495:146::-;12592:6;12587:3;12582;12569:30;12633:1;12624:6;12619:3;12615:16;12608:27;12495:146;;;:::o;12647:425::-;12725:5;12750:66;12766:49;12808:6;12766:49;:::i;:::-;12750:66;:::i;:::-;12741:75;;12839:6;12832:5;12825:21;12877:4;12870:5;12866:16;12915:3;12906:6;12901:3;12897:16;12894:25;12891:112;;;12922:79;;:::i;:::-;12891:112;13012:54;13059:6;13054:3;13049;13012:54;:::i;:::-;12731:341;12647:425;;;;;:::o;13092:340::-;13148:5;13197:3;13190:4;13182:6;13178:17;13174:27;13164:122;;13205:79;;:::i;:::-;13164:122;13322:6;13309:20;13347:79;13422:3;13414:6;13407:4;13399:6;13395:17;13347:79;:::i;:::-;13338:88;;13154:278;13092:340;;;;:::o;13438:509::-;13507:6;13556:2;13544:9;13535:7;13531:23;13527:32;13524:119;;;13562:79;;:::i;:::-;13524:119;13710:1;13699:9;13695:17;13682:31;13740:18;13732:6;13729:30;13726:117;;;13762:79;;:::i;:::-;13726:117;13867:63;13922:7;13913:6;13902:9;13898:22;13867:63;:::i;:::-;13857:73;;13653:287;13438:509;;;;:::o;13953:474::-;14021:6;14029;14078:2;14066:9;14057:7;14053:23;14049:32;14046:119;;;14084:79;;:::i;:::-;14046:119;14204:1;14229:53;14274:7;14265:6;14254:9;14250:22;14229:53;:::i;:::-;14219:63;;14175:117;14331:2;14357:53;14402:7;14393:6;14382:9;14378:22;14357:53;:::i;:::-;14347:63;;14302:118;13953:474;;;;;:::o;14433:116::-;14503:21;14518:5;14503:21;:::i;:::-;14496:5;14493:32;14483:60;;14539:1;14536;14529:12;14483:60;14433:116;:::o;14555:133::-;14598:5;14636:6;14623:20;14614:29;;14652:30;14676:5;14652:30;:::i;:::-;14555:133;;;;:::o;14694:468::-;14759:6;14767;14816:2;14804:9;14795:7;14791:23;14787:32;14784:119;;;14822:79;;:::i;:::-;14784:119;14942:1;14967:53;15012:7;15003:6;14992:9;14988:22;14967:53;:::i;:::-;14957:63;;14913:117;15069:2;15095:50;15137:7;15128:6;15117:9;15113:22;15095:50;:::i;:::-;15085:60;;15040:115;14694:468;;;;;:::o;15168:307::-;15229:4;15319:18;15311:6;15308:30;15305:56;;;15341:18;;:::i;:::-;15305:56;15379:29;15401:6;15379:29;:::i;:::-;15371:37;;15463:4;15457;15453:15;15445:23;;15168:307;;;:::o;15481:423::-;15558:5;15583:65;15599:48;15640:6;15599:48;:::i;:::-;15583:65;:::i;:::-;15574:74;;15671:6;15664:5;15657:21;15709:4;15702:5;15698:16;15747:3;15738:6;15733:3;15729:16;15726:25;15723:112;;;15754:79;;:::i;:::-;15723:112;15844:54;15891:6;15886:3;15881;15844:54;:::i;:::-;15564:340;15481:423;;;;;:::o;15923:338::-;15978:5;16027:3;16020:4;16012:6;16008:17;16004:27;15994:122;;16035:79;;:::i;:::-;15994:122;16152:6;16139:20;16177:78;16251:3;16243:6;16236:4;16228:6;16224:17;16177:78;:::i;:::-;16168:87;;15984:277;15923:338;;;;:::o;16267:943::-;16362:6;16370;16378;16386;16435:3;16423:9;16414:7;16410:23;16406:33;16403:120;;;16442:79;;:::i;:::-;16403:120;16562:1;16587:53;16632:7;16623:6;16612:9;16608:22;16587:53;:::i;:::-;16577:63;;16533:117;16689:2;16715:53;16760:7;16751:6;16740:9;16736:22;16715:53;:::i;:::-;16705:63;;16660:118;16817:2;16843:53;16888:7;16879:6;16868:9;16864:22;16843:53;:::i;:::-;16833:63;;16788:118;16973:2;16962:9;16958:18;16945:32;17004:18;16996:6;16993:30;16990:117;;;17026:79;;:::i;:::-;16990:117;17131:62;17185:7;17176:6;17165:9;17161:22;17131:62;:::i;:::-;17121:72;;16916:287;16267:943;;;;;;;:::o;17216:474::-;17284:6;17292;17341:2;17329:9;17320:7;17316:23;17312:32;17309:119;;;17347:79;;:::i;:::-;17309:119;17467:1;17492:53;17537:7;17528:6;17517:9;17513:22;17492:53;:::i;:::-;17482:63;;17438:117;17594:2;17620:53;17665:7;17656:6;17645:9;17641:22;17620:53;:::i;:::-;17610:63;;17565:118;17216:474;;;;;:::o;17696:171::-;17836:23;17832:1;17824:6;17820:14;17813:47;17696:171;:::o;17873:366::-;18015:3;18036:67;18100:2;18095:3;18036:67;:::i;:::-;18029:74;;18112:93;18201:3;18112:93;:::i;:::-;18230:2;18225:3;18221:12;18214:19;;17873:366;;;:::o;18245:419::-;18411:4;18449:2;18438:9;18434:18;18426:26;;18498:9;18492:4;18488:20;18484:1;18473:9;18469:17;18462:47;18526:131;18652:4;18526:131;:::i;:::-;18518:139;;18245:419;;;:::o;18670:180::-;18718:77;18715:1;18708:88;18815:4;18812:1;18805:15;18839:4;18836:1;18829:15;18856:320;18900:6;18937:1;18931:4;18927:12;18917:22;;18984:1;18978:4;18974:12;19005:18;18995:81;;19061:4;19053:6;19049:17;19039:27;;18995:81;19123:2;19115:6;19112:14;19092:18;19089:38;19086:84;;19142:18;;:::i;:::-;19086:84;18907:269;18856:320;;;:::o;19182:232::-;19322:34;19318:1;19310:6;19306:14;19299:58;19391:15;19386:2;19378:6;19374:15;19367:40;19182:232;:::o;19420:366::-;19562:3;19583:67;19647:2;19642:3;19583:67;:::i;:::-;19576:74;;19659:93;19748:3;19659:93;:::i;:::-;19777:2;19772:3;19768:12;19761:19;;19420:366;;;:::o;19792:419::-;19958:4;19996:2;19985:9;19981:18;19973:26;;20045:9;20039:4;20035:20;20031:1;20020:9;20016:17;20009:47;20073:131;20199:4;20073:131;:::i;:::-;20065:139;;19792:419;;;:::o;20217:180::-;20265:77;20262:1;20255:88;20362:4;20359:1;20352:15;20386:4;20383:1;20376:15;20403:410;20443:7;20466:20;20484:1;20466:20;:::i;:::-;20461:25;;20500:20;20518:1;20500:20;:::i;:::-;20495:25;;20555:1;20552;20548:9;20577:30;20595:11;20577:30;:::i;:::-;20566:41;;20756:1;20747:7;20743:15;20740:1;20737:22;20717:1;20710:9;20690:83;20667:139;;20786:18;;:::i;:::-;20667:139;20451:362;20403:410;;;;:::o;20819:180::-;20867:77;20864:1;20857:88;20964:4;20961:1;20954:15;20988:4;20985:1;20978:15;21005:185;21045:1;21062:20;21080:1;21062:20;:::i;:::-;21057:25;;21096:20;21114:1;21096:20;:::i;:::-;21091:25;;21135:1;21125:35;;21140:18;;:::i;:::-;21125:35;21182:1;21179;21175:9;21170:14;;21005:185;;;;:::o;21196:221::-;21336:34;21332:1;21324:6;21320:14;21313:58;21405:4;21400:2;21392:6;21388:15;21381:29;21196:221;:::o;21423:366::-;21565:3;21586:67;21650:2;21645:3;21586:67;:::i;:::-;21579:74;;21662:93;21751:3;21662:93;:::i;:::-;21780:2;21775:3;21771:12;21764:19;;21423:366;;;:::o;21795:419::-;21961:4;21999:2;21988:9;21984:18;21976:26;;22048:9;22042:4;22038:20;22034:1;22023:9;22019:17;22012:47;22076:131;22202:4;22076:131;:::i;:::-;22068:139;;21795:419;;;:::o;22220:233::-;22259:3;22282:24;22300:5;22282:24;:::i;:::-;22273:33;;22328:66;22321:5;22318:77;22315:103;;22398:18;;:::i;:::-;22315:103;22445:1;22438:5;22434:13;22427:20;;22220:233;;;:::o;22459:::-;22599:34;22595:1;22587:6;22583:14;22576:58;22668:16;22663:2;22655:6;22651:15;22644:41;22459:233;:::o;22698:366::-;22840:3;22861:67;22925:2;22920:3;22861:67;:::i;:::-;22854:74;;22937:93;23026:3;22937:93;:::i;:::-;23055:2;23050:3;23046:12;23039:19;;22698:366;;;:::o;23070:419::-;23236:4;23274:2;23263:9;23259:18;23251:26;;23323:9;23317:4;23313:20;23309:1;23298:9;23294:17;23287:47;23351:131;23477:4;23351:131;:::i;:::-;23343:139;;23070:419;;;:::o;23495:222::-;23635:34;23631:1;23623:6;23619:14;23612:58;23704:5;23699:2;23691:6;23687:15;23680:30;23495:222;:::o;23723:366::-;23865:3;23886:67;23950:2;23945:3;23886:67;:::i;:::-;23879:74;;23962:93;24051:3;23962:93;:::i;:::-;24080:2;24075:3;24071:12;24064:19;;23723:366;;;:::o;24095:419::-;24261:4;24299:2;24288:9;24284:18;24276:26;;24348:9;24342:4;24338:20;24334:1;24323:9;24319:17;24312:47;24376:131;24502:4;24376:131;:::i;:::-;24368:139;;24095:419;;;:::o;24520:141::-;24569:4;24592:3;24584:11;;24615:3;24612:1;24605:14;24649:4;24646:1;24636:18;24628:26;;24520:141;;;:::o;24667:93::-;24704:6;24751:2;24746;24739:5;24735:14;24731:23;24721:33;;24667:93;;;:::o;24766:107::-;24810:8;24860:5;24854:4;24850:16;24829:37;;24766:107;;;;:::o;24879:393::-;24948:6;24998:1;24986:10;24982:18;25021:97;25051:66;25040:9;25021:97;:::i;:::-;25139:39;25169:8;25158:9;25139:39;:::i;:::-;25127:51;;25211:4;25207:9;25200:5;25196:21;25187:30;;25260:4;25250:8;25246:19;25239:5;25236:30;25226:40;;24955:317;;24879:393;;;;;:::o;25278:142::-;25328:9;25361:53;25379:34;25388:24;25406:5;25388:24;:::i;:::-;25379:34;:::i;:::-;25361:53;:::i;:::-;25348:66;;25278:142;;;:::o;25426:75::-;25469:3;25490:5;25483:12;;25426:75;;;:::o;25507:269::-;25617:39;25648:7;25617:39;:::i;:::-;25678:91;25727:41;25751:16;25727:41;:::i;:::-;25719:6;25712:4;25706:11;25678:91;:::i;:::-;25672:4;25665:105;25583:193;25507:269;;;:::o;25782:73::-;25827:3;25782:73;:::o;25861:189::-;25938:32;;:::i;:::-;25979:65;26037:6;26029;26023:4;25979:65;:::i;:::-;25914:136;25861:189;;:::o;26056:186::-;26116:120;26133:3;26126:5;26123:14;26116:120;;;26187:39;26224:1;26217:5;26187:39;:::i;:::-;26160:1;26153:5;26149:13;26140:22;;26116:120;;;26056:186;;:::o;26248:543::-;26349:2;26344:3;26341:11;26338:446;;;26383:38;26415:5;26383:38;:::i;:::-;26467:29;26485:10;26467:29;:::i;:::-;26457:8;26453:44;26650:2;26638:10;26635:18;26632:49;;;26671:8;26656:23;;26632:49;26694:80;26750:22;26768:3;26750:22;:::i;:::-;26740:8;26736:37;26723:11;26694:80;:::i;:::-;26353:431;;26338:446;26248:543;;;:::o;26797:117::-;26851:8;26901:5;26895:4;26891:16;26870:37;;26797:117;;;;:::o;26920:169::-;26964:6;26997:51;27045:1;27041:6;27033:5;27030:1;27026:13;26997:51;:::i;:::-;26993:56;27078:4;27072;27068:15;27058:25;;26971:118;26920:169;;;;:::o;27094:295::-;27170:4;27316:29;27341:3;27335:4;27316:29;:::i;:::-;27308:37;;27378:3;27375:1;27371:11;27365:4;27362:21;27354:29;;27094:295;;;;:::o;27394:1395::-;27511:37;27544:3;27511:37;:::i;:::-;27613:18;27605:6;27602:30;27599:56;;;27635:18;;:::i;:::-;27599:56;27679:38;27711:4;27705:11;27679:38;:::i;:::-;27764:67;27824:6;27816;27810:4;27764:67;:::i;:::-;27858:1;27882:4;27869:17;;27914:2;27906:6;27903:14;27931:1;27926:618;;;;28588:1;28605:6;28602:77;;;28654:9;28649:3;28645:19;28639:26;28630:35;;28602:77;28705:67;28765:6;28758:5;28705:67;:::i;:::-;28699:4;28692:81;28561:222;27896:887;;27926:618;27978:4;27974:9;27966:6;27962:22;28012:37;28044:4;28012:37;:::i;:::-;28071:1;28085:208;28099:7;28096:1;28093:14;28085:208;;;28178:9;28173:3;28169:19;28163:26;28155:6;28148:42;28229:1;28221:6;28217:14;28207:24;;28276:2;28265:9;28261:18;28248:31;;28122:4;28119:1;28115:12;28110:17;;28085:208;;;28321:6;28312:7;28309:19;28306:179;;;28379:9;28374:3;28370:19;28364:26;28422:48;28464:4;28456:6;28452:17;28441:9;28422:48;:::i;:::-;28414:6;28407:64;28329:156;28306:179;28531:1;28527;28519:6;28515:14;28511:22;28505:4;28498:36;27933:611;;;27896:887;;27486:1303;;;27394:1395;;:::o;28795:230::-;28935:34;28931:1;28923:6;28919:14;28912:58;29004:13;28999:2;28991:6;28987:15;28980:38;28795:230;:::o;29031:366::-;29173:3;29194:67;29258:2;29253:3;29194:67;:::i;:::-;29187:74;;29270:93;29359:3;29270:93;:::i;:::-;29388:2;29383:3;29379:12;29372:19;;29031:366;;;:::o;29403:419::-;29569:4;29607:2;29596:9;29592:18;29584:26;;29656:9;29650:4;29646:20;29642:1;29631:9;29627:17;29620:47;29684:131;29810:4;29684:131;:::i;:::-;29676:139;;29403:419;;;:::o;29828:191::-;29868:3;29887:20;29905:1;29887:20;:::i;:::-;29882:25;;29921:20;29939:1;29921:20;:::i;:::-;29916:25;;29964:1;29961;29957:9;29950:16;;29985:3;29982:1;29979:10;29976:36;;;29992:18;;:::i;:::-;29976:36;29828:191;;;;:::o;30025:177::-;30165:29;30161:1;30153:6;30149:14;30142:53;30025:177;:::o;30208:366::-;30350:3;30371:67;30435:2;30430:3;30371:67;:::i;:::-;30364:74;;30447:93;30536:3;30447:93;:::i;:::-;30565:2;30560:3;30556:12;30549:19;;30208:366;;;:::o;30580:419::-;30746:4;30784:2;30773:9;30769:18;30761:26;;30833:9;30827:4;30823:20;30819:1;30808:9;30804:17;30797:47;30861:131;30987:4;30861:131;:::i;:::-;30853:139;;30580:419;;;:::o;31005:180::-;31053:77;31050:1;31043:88;31150:4;31147:1;31140:15;31174:4;31171:1;31164:15;31191:174;31331:26;31327:1;31319:6;31315:14;31308:50;31191:174;:::o;31371:366::-;31513:3;31534:67;31598:2;31593:3;31534:67;:::i;:::-;31527:74;;31610:93;31699:3;31610:93;:::i;:::-;31728:2;31723:3;31719:12;31712:19;;31371:366;;;:::o;31743:419::-;31909:4;31947:2;31936:9;31932:18;31924:26;;31996:9;31990:4;31986:20;31982:1;31971:9;31967:17;31960:47;32024:131;32150:4;32024:131;:::i;:::-;32016:139;;31743:419;;;:::o;32168:172::-;32308:24;32304:1;32296:6;32292:14;32285:48;32168:172;:::o;32346:366::-;32488:3;32509:67;32573:2;32568:3;32509:67;:::i;:::-;32502:74;;32585:93;32674:3;32585:93;:::i;:::-;32703:2;32698:3;32694:12;32687:19;;32346:366;;;:::o;32718:419::-;32884:4;32922:2;32911:9;32907:18;32899:26;;32971:9;32965:4;32961:20;32957:1;32946:9;32942:17;32935:47;32999:131;33125:4;32999:131;:::i;:::-;32991:139;;32718:419;;;:::o;33143:166::-;33283:18;33279:1;33271:6;33267:14;33260:42;33143:166;:::o;33315:366::-;33457:3;33478:67;33542:2;33537:3;33478:67;:::i;:::-;33471:74;;33554:93;33643:3;33554:93;:::i;:::-;33672:2;33667:3;33663:12;33656:19;;33315:366;;;:::o;33687:419::-;33853:4;33891:2;33880:9;33876:18;33868:26;;33940:9;33934:4;33930:20;33926:1;33915:9;33911:17;33904:47;33968:131;34094:4;33968:131;:::i;:::-;33960:139;;33687:419;;;:::o;34112:167::-;34252:19;34248:1;34240:6;34236:14;34229:43;34112:167;:::o;34285:366::-;34427:3;34448:67;34512:2;34507:3;34448:67;:::i;:::-;34441:74;;34524:93;34613:3;34524:93;:::i;:::-;34642:2;34637:3;34633:12;34626:19;;34285:366;;;:::o;34657:419::-;34823:4;34861:2;34850:9;34846:18;34838:26;;34910:9;34904:4;34900:20;34896:1;34885:9;34881:17;34874:47;34938:131;35064:4;34938:131;:::i;:::-;34930:139;;34657:419;;;:::o;35082:171::-;35222:23;35218:1;35210:6;35206:14;35199:47;35082:171;:::o;35259:366::-;35401:3;35422:67;35486:2;35481:3;35422:67;:::i;:::-;35415:74;;35498:93;35587:3;35498:93;:::i;:::-;35616:2;35611:3;35607:12;35600:19;;35259:366;;;:::o;35631:419::-;35797:4;35835:2;35824:9;35820:18;35812:26;;35884:9;35878:4;35874:20;35870:1;35859:9;35855:17;35848:47;35912:131;36038:4;35912:131;:::i;:::-;35904:139;;35631:419;;;:::o;36056:148::-;36158:11;36195:3;36180:18;;36056:148;;;;:::o;36234:874::-;36337:3;36374:5;36368:12;36403:36;36429:9;36403:36;:::i;:::-;36455:89;36537:6;36532:3;36455:89;:::i;:::-;36448:96;;36575:1;36564:9;36560:17;36591:1;36586:166;;;;36766:1;36761:341;;;;36553:549;;36586:166;36670:4;36666:9;36655;36651:25;36646:3;36639:38;36732:6;36725:14;36718:22;36710:6;36706:35;36701:3;36697:45;36690:52;;36586:166;;36761:341;36828:38;36860:5;36828:38;:::i;:::-;36888:1;36902:154;36916:6;36913:1;36910:13;36902:154;;;36990:7;36984:14;36980:1;36975:3;36971:11;36964:35;37040:1;37031:7;37027:15;37016:26;;36938:4;36935:1;36931:12;36926:17;;36902:154;;;37085:6;37080:3;37076:16;37069:23;;36768:334;;36553:549;;36341:767;;36234:874;;;;:::o;37114:390::-;37220:3;37248:39;37281:5;37248:39;:::i;:::-;37303:89;37385:6;37380:3;37303:89;:::i;:::-;37296:96;;37401:65;37459:6;37454:3;37447:4;37440:5;37436:16;37401:65;:::i;:::-;37491:6;37486:3;37482:16;37475:23;;37224:280;37114:390;;;;:::o;37510:429::-;37687:3;37709:92;37797:3;37788:6;37709:92;:::i;:::-;37702:99;;37818:95;37909:3;37900:6;37818:95;:::i;:::-;37811:102;;37930:3;37923:10;;37510:429;;;;;:::o;37945:155::-;38085:7;38081:1;38073:6;38069:14;38062:31;37945:155;:::o;38106:400::-;38266:3;38287:84;38369:1;38364:3;38287:84;:::i;:::-;38280:91;;38380:93;38469:3;38380:93;:::i;:::-;38498:1;38493:3;38489:11;38482:18;;38106:400;;;:::o;38512:695::-;38790:3;38812:92;38900:3;38891:6;38812:92;:::i;:::-;38805:99;;38921:95;39012:3;39003:6;38921:95;:::i;:::-;38914:102;;39033:148;39177:3;39033:148;:::i;:::-;39026:155;;39198:3;39191:10;;38512:695;;;;;:::o;39213:225::-;39353:34;39349:1;39341:6;39337:14;39330:58;39422:8;39417:2;39409:6;39405:15;39398:33;39213:225;:::o;39444:366::-;39586:3;39607:67;39671:2;39666:3;39607:67;:::i;:::-;39600:74;;39683:93;39772:3;39683:93;:::i;:::-;39801:2;39796:3;39792:12;39785:19;;39444:366;;;:::o;39816:419::-;39982:4;40020:2;40009:9;40005:18;39997:26;;40069:9;40063:4;40059:20;40055:1;40044:9;40040:17;40033:47;40097:131;40223:4;40097:131;:::i;:::-;40089:139;;39816:419;;;:::o;40241:229::-;40381:34;40377:1;40369:6;40365:14;40358:58;40450:12;40445:2;40437:6;40433:15;40426:37;40241:229;:::o;40476:366::-;40618:3;40639:67;40703:2;40698:3;40639:67;:::i;:::-;40632:74;;40715:93;40804:3;40715:93;:::i;:::-;40833:2;40828:3;40824:12;40817:19;;40476:366;;;:::o;40848:419::-;41014:4;41052:2;41041:9;41037:18;41029:26;;41101:9;41095:4;41091:20;41087:1;41076:9;41072:17;41065:47;41129:131;41255:4;41129:131;:::i;:::-;41121:139;;40848:419;;;:::o;41273:175::-;41413:27;41409:1;41401:6;41397:14;41390:51;41273:175;:::o;41454:366::-;41596:3;41617:67;41681:2;41676:3;41617:67;:::i;:::-;41610:74;;41693:93;41782:3;41693:93;:::i;:::-;41811:2;41806:3;41802:12;41795:19;;41454:366;;;:::o;41826:419::-;41992:4;42030:2;42019:9;42015:18;42007:26;;42079:9;42073:4;42069:20;42065:1;42054:9;42050:17;42043:47;42107:131;42233:4;42107:131;:::i;:::-;42099:139;;41826:419;;;:::o;42251:332::-;42372:4;42410:2;42399:9;42395:18;42387:26;;42423:71;42491:1;42480:9;42476:17;42467:6;42423:71;:::i;:::-;42504:72;42572:2;42561:9;42557:18;42548:6;42504:72;:::i;:::-;42251:332;;;;;:::o;42589:137::-;42643:5;42674:6;42668:13;42659:22;;42690:30;42714:5;42690:30;:::i;:::-;42589:137;;;;:::o;42732:345::-;42799:6;42848:2;42836:9;42827:7;42823:23;42819:32;42816:119;;;42854:79;;:::i;:::-;42816:119;42974:1;42999:61;43052:7;43043:6;43032:9;43028:22;42999:61;:::i;:::-;42989:71;;42945:125;42732:345;;;;:::o;43083:221::-;43223:34;43219:1;43211:6;43207:14;43200:58;43292:4;43287:2;43279:6;43275:15;43268:29;43083:221;:::o;43310:366::-;43452:3;43473:67;43537:2;43532:3;43473:67;:::i;:::-;43466:74;;43549:93;43638:3;43549:93;:::i;:::-;43667:2;43662:3;43658:12;43651:19;;43310:366;;;:::o;43682:419::-;43848:4;43886:2;43875:9;43871:18;43863:26;;43935:9;43929:4;43925:20;43921:1;43910:9;43906:17;43899:47;43963:131;44089:4;43963:131;:::i;:::-;43955:139;;43682:419;;;:::o;44107:244::-;44247:34;44243:1;44235:6;44231:14;44224:58;44316:27;44311:2;44303:6;44299:15;44292:52;44107:244;:::o;44357:366::-;44499:3;44520:67;44584:2;44579:3;44520:67;:::i;:::-;44513:74;;44596:93;44685:3;44596:93;:::i;:::-;44714:2;44709:3;44705:12;44698:19;;44357:366;;;:::o;44729:419::-;44895:4;44933:2;44922:9;44918:18;44910:26;;44982:9;44976:4;44972:20;44968:1;44957:9;44953:17;44946:47;45010:131;45136:4;45010:131;:::i;:::-;45002:139;;44729:419;;;:::o;45154:236::-;45294:34;45290:1;45282:6;45278:14;45271:58;45363:19;45358:2;45350:6;45346:15;45339:44;45154:236;:::o;45396:366::-;45538:3;45559:67;45623:2;45618:3;45559:67;:::i;:::-;45552:74;;45635:93;45724:3;45635:93;:::i;:::-;45753:2;45748:3;45744:12;45737:19;;45396:366;;;:::o;45768:419::-;45934:4;45972:2;45961:9;45957:18;45949:26;;46021:9;46015:4;46011:20;46007:1;45996:9;45992:17;45985:47;46049:131;46175:4;46049:131;:::i;:::-;46041:139;;45768:419;;;:::o;46193:229::-;46333:34;46329:1;46321:6;46317:14;46310:58;46402:12;46397:2;46389:6;46385:15;46378:37;46193:229;:::o;46428:366::-;46570:3;46591:67;46655:2;46650:3;46591:67;:::i;:::-;46584:74;;46667:93;46756:3;46667:93;:::i;:::-;46785:2;46780:3;46776:12;46769:19;;46428:366;;;:::o;46800:419::-;46966:4;47004:2;46993:9;46989:18;46981:26;;47053:9;47047:4;47043:20;47039:1;47028:9;47024:17;47017:47;47081:131;47207:4;47081:131;:::i;:::-;47073:139;;46800:419;;;:::o;47225:194::-;47265:4;47285:20;47303:1;47285:20;:::i;:::-;47280:25;;47319:20;47337:1;47319:20;:::i;:::-;47314:25;;47363:1;47360;47356:9;47348:17;;47387:1;47381:4;47378:11;47375:37;;;47392:18;;:::i;:::-;47375:37;47225:194;;;;:::o;47425:171::-;47464:3;47487:24;47505:5;47487:24;:::i;:::-;47478:33;;47533:4;47526:5;47523:15;47520:41;;47541:18;;:::i;:::-;47520:41;47588:1;47581:5;47577:13;47570:20;;47425:171;;;:::o;47602:234::-;47742:34;47738:1;47730:6;47726:14;47719:58;47811:17;47806:2;47798:6;47794:15;47787:42;47602:234;:::o;47842:366::-;47984:3;48005:67;48069:2;48064:3;48005:67;:::i;:::-;47998:74;;48081:93;48170:3;48081:93;:::i;:::-;48199:2;48194:3;48190:12;48183:19;;47842:366;;;:::o;48214:419::-;48380:4;48418:2;48407:9;48403:18;48395:26;;48467:9;48461:4;48457:20;48453:1;48442:9;48438:17;48431:47;48495:131;48621:4;48495:131;:::i;:::-;48487:139;;48214:419;;;:::o;48639:176::-;48779:28;48775:1;48767:6;48763:14;48756:52;48639:176;:::o;48821:366::-;48963:3;48984:67;49048:2;49043:3;48984:67;:::i;:::-;48977:74;;49060:93;49149:3;49060:93;:::i;:::-;49178:2;49173:3;49169:12;49162:19;;48821:366;;;:::o;49193:419::-;49359:4;49397:2;49386:9;49382:18;49374:26;;49446:9;49440:4;49436:20;49432:1;49421:9;49417:17;49410:47;49474:131;49600:4;49474:131;:::i;:::-;49466:139;;49193:419;;;:::o;49618:238::-;49758:34;49754:1;49746:6;49742:14;49735:58;49827:21;49822:2;49814:6;49810:15;49803:46;49618:238;:::o;49862:366::-;50004:3;50025:67;50089:2;50084:3;50025:67;:::i;:::-;50018:74;;50101:93;50190:3;50101:93;:::i;:::-;50219:2;50214:3;50210:12;50203:19;;49862:366;;;:::o;50234:419::-;50400:4;50438:2;50427:9;50423:18;50415:26;;50487:9;50481:4;50477:20;50473:1;50462:9;50458:17;50451:47;50515:131;50641:4;50515:131;:::i;:::-;50507:139;;50234:419;;;:::o;50659:176::-;50691:1;50708:20;50726:1;50708:20;:::i;:::-;50703:25;;50742:20;50760:1;50742:20;:::i;:::-;50737:25;;50781:1;50771:35;;50786:18;;:::i;:::-;50771:35;50827:1;50824;50820:9;50815:14;;50659:176;;;;:::o;50841:180::-;50889:77;50886:1;50879:88;50986:4;50983:1;50976:15;51010:4;51007:1;51000:15;51027:237;51167:34;51163:1;51155:6;51151:14;51144:58;51236:20;51231:2;51223:6;51219:15;51212:45;51027:237;:::o;51270:366::-;51412:3;51433:67;51497:2;51492:3;51433:67;:::i;:::-;51426:74;;51509:93;51598:3;51509:93;:::i;:::-;51627:2;51622:3;51618:12;51611:19;;51270:366;;;:::o;51642:419::-;51808:4;51846:2;51835:9;51831:18;51823:26;;51895:9;51889:4;51885:20;51881:1;51870:9;51866:17;51859:47;51923:131;52049:4;51923:131;:::i;:::-;51915:139;;51642:419;;;:::o;52067:225::-;52207:34;52203:1;52195:6;52191:14;52184:58;52276:8;52271:2;52263:6;52259:15;52252:33;52067:225;:::o;52298:366::-;52440:3;52461:67;52525:2;52520:3;52461:67;:::i;:::-;52454:74;;52537:93;52626:3;52537:93;:::i;:::-;52655:2;52650:3;52646:12;52639:19;;52298:366;;;:::o;52670:419::-;52836:4;52874:2;52863:9;52859:18;52851:26;;52923:9;52917:4;52913:20;52909:1;52898:9;52894:17;52887:47;52951:131;53077:4;52951:131;:::i;:::-;52943:139;;52670:419;;;:::o;53095:224::-;53235:34;53231:1;53223:6;53219:14;53212:58;53304:7;53299:2;53291:6;53287:15;53280:32;53095:224;:::o;53325:366::-;53467:3;53488:67;53552:2;53547:3;53488:67;:::i;:::-;53481:74;;53564:93;53653:3;53564:93;:::i;:::-;53682:2;53677:3;53673:12;53666:19;;53325:366;;;:::o;53697:419::-;53863:4;53901:2;53890:9;53886:18;53878:26;;53950:9;53944:4;53940:20;53936:1;53925:9;53921:17;53914:47;53978:131;54104:4;53978:131;:::i;:::-;53970:139;;53697:419;;;:::o;54122:118::-;54159:7;54199:34;54192:5;54188:46;54177:57;;54122:118;;;:::o;54246:227::-;54286:4;54306:20;54324:1;54306:20;:::i;:::-;54301:25;;54340:20;54358:1;54340:20;:::i;:::-;54335:25;;54384:1;54381;54377:9;54369:17;;54408:34;54402:4;54399:44;54396:70;;;54446:18;;:::i;:::-;54396:70;54246:227;;;;:::o;54479:224::-;54519:3;54538:20;54556:1;54538:20;:::i;:::-;54533:25;;54572:20;54590:1;54572:20;:::i;:::-;54567:25;;54615:1;54612;54608:9;54601:16;;54638:34;54633:3;54630:43;54627:69;;;54676:18;;:::i;:::-;54627:69;54479:224;;;;:::o;54709:220::-;54849:34;54845:1;54837:6;54833:14;54826:58;54918:3;54913:2;54905:6;54901:15;54894:28;54709:220;:::o;54935:366::-;55077:3;55098:67;55162:2;55157:3;55098:67;:::i;:::-;55091:74;;55174:93;55263:3;55174:93;:::i;:::-;55292:2;55287:3;55283:12;55276:19;;54935:366;;;:::o;55307:419::-;55473:4;55511:2;55500:9;55496:18;55488:26;;55560:9;55554:4;55550:20;55546:1;55535:9;55531:17;55524:47;55588:131;55714:4;55588:131;:::i;:::-;55580:139;;55307:419;;;:::o;55732:179::-;55872:31;55868:1;55860:6;55856:14;55849:55;55732:179;:::o;55917:366::-;56059:3;56080:67;56144:2;56139:3;56080:67;:::i;:::-;56073:74;;56156:93;56245:3;56156:93;:::i;:::-;56274:2;56269:3;56265:12;56258:19;;55917:366;;;:::o;56289:419::-;56455:4;56493:2;56482:9;56478:18;56470:26;;56542:9;56536:4;56532:20;56528:1;56517:9;56513:17;56506:47;56570:131;56696:4;56570:131;:::i;:::-;56562:139;;56289:419;;;:::o;56714:221::-;56854:34;56850:1;56842:6;56838:14;56831:58;56923:4;56918:2;56910:6;56906:15;56899:29;56714:221;:::o;56941:366::-;57083:3;57104:67;57168:2;57163:3;57104:67;:::i;:::-;57097:74;;57180:93;57269:3;57180:93;:::i;:::-;57298:2;57293:3;57289:12;57282:19;;56941:366;;;:::o;57313:419::-;57479:4;57517:2;57506:9;57502:18;57494:26;;57566:9;57560:4;57556:20;57552:1;57541:9;57537:17;57530:47;57594:131;57720:4;57594:131;:::i;:::-;57586:139;;57313:419;;;:::o;57738:98::-;57789:6;57823:5;57817:12;57807:22;;57738:98;;;:::o;57842:168::-;57925:11;57959:6;57954:3;57947:19;57999:4;57994:3;57990:14;57975:29;;57842:168;;;;:::o;58016:373::-;58102:3;58130:38;58162:5;58130:38;:::i;:::-;58184:70;58247:6;58242:3;58184:70;:::i;:::-;58177:77;;58263:65;58321:6;58316:3;58309:4;58302:5;58298:16;58263:65;:::i;:::-;58353:29;58375:6;58353:29;:::i;:::-;58348:3;58344:39;58337:46;;58106:283;58016:373;;;;:::o;58395:640::-;58590:4;58628:3;58617:9;58613:19;58605:27;;58642:71;58710:1;58699:9;58695:17;58686:6;58642:71;:::i;:::-;58723:72;58791:2;58780:9;58776:18;58767:6;58723:72;:::i;:::-;58805;58873:2;58862:9;58858:18;58849:6;58805:72;:::i;:::-;58924:9;58918:4;58914:20;58909:2;58898:9;58894:18;58887:48;58952:76;59023:4;59014:6;58952:76;:::i;:::-;58944:84;;58395:640;;;;;;;:::o;59041:141::-;59097:5;59128:6;59122:13;59113:22;;59144:32;59170:5;59144:32;:::i;:::-;59041:141;;;;:::o;59188:349::-;59257:6;59306:2;59294:9;59285:7;59281:23;59277:32;59274:119;;;59312:79;;:::i;:::-;59274:119;59432:1;59457:63;59512:7;59503:6;59492:9;59488:22;59457:63;:::i;:::-;59447:73;;59403:127;59188:349;;;;:::o
Swarm Source
ipfs://38494cf7135b4257c6e4a006efeb10b8e3e332c9319c2fe441d718d0b18860d6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1,814.33 | 0.003 | $5.44 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.