Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
0 RAID
Holders
851
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
6 RAIDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RaidProjectBaseCore
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-07 */ // SPDX-License-Identifier: BUSL-1.1 // File: contracts/interfaces/ILayerZeroUserApplicationConfig.sol pragma solidity >=0.5.0; interface ILayerZeroUserApplicationConfig { // @notice set the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _configType - type of configuration. every messaging library has its own convention. // @param _config - configuration in the bytes. can encode arbitrary content. function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external; // @notice set the send() LayerZero messaging library version to _version // @param _version - new messaging library version function setSendVersion(uint16 _version) external; // @notice set the lzReceive() LayerZero messaging library version to _version // @param _version - new messaging library version function setReceiveVersion(uint16 _version) external; // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload // @param _srcChainId - the chainId of the source chain // @param _srcAddress - the contract address of the source contract at the source chain function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external; } // File: contracts/interfaces/ILayerZeroEndpoint.sol pragma solidity >=0.5.0; interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig { // @notice send a LayerZero message to the specified address at a LayerZero endpoint. // @param _dstChainId - the destination chain identifier // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains // @param _payload - a custom bytes payload to send to the destination contract // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable; // @notice used by the messaging library to publish verified payload // @param _srcChainId - the source chain identifier // @param _srcAddress - the source contract (as bytes) at the source chain // @param _dstAddress - the address on destination chain // @param _nonce - the unbound message ordering nonce // @param _gasLimit - the gas limit for external contract execution // @param _payload - verified payload to send to the destination contract function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external; // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64); // @notice get the outboundNonce from this source chain which, consequently, is always an EVM // @param _srcAddress - the source chain contract address function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64); // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery // @param _dstChainId - the destination chain identifier // @param _userApplication - the user app address on this EVM chain // @param _payload - the custom message to send over LayerZero // @param _payInZRO - if false, user app pays the protocol fee in native token // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee); // @notice get this Endpoint's immutable source identifier function getChainId() external view returns (uint16); // @notice the interface to retry failed message on this Endpoint destination // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address // @param _payload - the payload to be retried function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external; // @notice query if any STORED payload (message blocking) at the endpoint. // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool); // @notice query if the _libraryAddress is valid for sending msgs. // @param _userApplication - the user app address on this EVM chain function getSendLibraryAddress(address _userApplication) external view returns (address); // @notice query if the _libraryAddress is valid for receiving msgs. // @param _userApplication - the user app address on this EVM chain function getReceiveLibraryAddress(address _userApplication) external view returns (address); // @notice query if the non-reentrancy guard for send() is on // @return true if the guard is on. false otherwise function isSendingPayload() external view returns (bool); // @notice query if the non-reentrancy guard for receive() is on // @return true if the guard is on. false otherwise function isReceivingPayload() external view returns (bool); // @notice get the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _userApplication - the contract address of the user application // @param _configType - type of configuration. every messaging library has its own convention. function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory); // @notice get the send() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getSendVersion(address _userApplication) external view returns (uint16); // @notice get the lzReceive() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getReceiveVersion(address _userApplication) external view returns (uint16); } // File: contracts/interfaces/ILayerZeroReceiver.sol pragma solidity >=0.5.0; interface ILayerZeroReceiver { // @notice LayerZero endpoint will invoke this function to deliver the message on the destination // @param _srcChainId - the source endpoint identifier // @param _srcAddress - the source sending contract address from the source chain // @param _nonce - the ordered message nonce // @param _payload - the signed payload is the UA bytes has encoded to be sent function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external; } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString() , ".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 = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/NonblockingReceiver.sol pragma solidity ^0.8.6; abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver { ILayerZeroEndpoint internal endpoint; struct FailedMessages { uint payloadLength; bytes32 payloadHash; } mapping(uint16 => mapping(bytes => mapping(uint => FailedMessages))) public failedMessages; mapping(uint16 => bytes) public trustedRemoteLookup; event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload); function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external override { require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security require(_srcAddress.length == trustedRemoteLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedRemoteLookup[_srcChainId]), "NonblockingReceiver: invalid source sending contract"); // try-catch all errors/exceptions // having failed messages does not block messages passing try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) { // do nothing } catch { // error / exception failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(_payload.length, keccak256(_payload)); emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload); } } function onLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public { // only internal transaction require(msg.sender == address(this), "NonblockingReceiver: caller must be Bridge."); // handle incoming message _LzReceive( _srcChainId, _srcAddress, _nonce, _payload); } // abstract function function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) virtual internal; function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _txParam) internal { endpoint.send{value: msg.value}(_dstChainId, trustedRemoteLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _txParam); } function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload) external payable { // assert there is message to retry FailedMessages storage failedMsg = failedMessages[_srcChainId][_srcAddress][_nonce]; require(failedMsg.payloadHash != bytes32(0), "NonblockingReceiver: no stored message"); require(_payload.length == failedMsg.payloadLength && keccak256(_payload) == failedMsg.payloadHash, "LayerZero: invalid payload"); // clear the stored message failedMsg.payloadLength = 0; failedMsg.payloadHash = bytes32(0); // execute the message. revert if it fails again this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote) external onlyOwner { trustedRemoteLookup[_chainId] = _trustedRemote; } } // File: contracts/GhostlyGhosts.sol pragma solidity ^0.8.7; // _____ _ _ _____ _____ ____ _ ______ _____ _______ //| __ \ (_) | | | __ \| __ \ / __ \ | | ____/ ____|__ __| //| |__) |__ _ _ __| | | |__) | |__) | | | | | | |__ | | | | //| _ // _` | |/ _` | | ___/| _ /| | | |_ | | __|| | | | //| | \ \ (_| | | (_| | | | | | \ \| |__| | |__| | |___| |____ | | //|_| \_\__,_|_|\__,_| |_| |_| \_\\____/ \____/|______\_____| |_| contract RaidProjectBaseCore is Ownable, ERC721, NonblockingReceiver { bool public paused = true; uint256 onChainNFTCount = 0; address public _owner; string private baseURI; uint256 nextTokenId = 0; uint256 MAX_MINT_ETH = 2654; uint maxTXMint = 2; uint gasForDestinationLzReceive = 350000; constructor(string memory baseURI_, address _layerZeroEndpoint) ERC721("Raid Project", "RAID") { _owner = msg.sender; endpoint = ILayerZeroEndpoint(_layerZeroEndpoint); baseURI = baseURI_; } function pause(bool _state) public onlyOwner { paused = _state; } function mint(uint8 numTokens) external payable { require(!paused, "Sale has not started yet"); require(numTokens <= maxTXMint , "RAID: Max mint amount per session exceeded"); require(nextTokenId + numTokens <= MAX_MINT_ETH, "RAID: Mint exceeds supply"); for (uint256 i = 1; i <= numTokens; i++) { _safeMint(msg.sender, ++nextTokenId); onChainNFTCount +=1; } } function estimateFeesView(uint16 _chainId, uint tokenId) public view returns (uint) { bytes memory payload = abi.encode(msg.sender, tokenId); uint16 version = 1; bytes memory adapterParams = abi.encodePacked(version, gasForDestinationLzReceive); (uint messageFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams); return messageFee; } function traverseChains(uint16 _chainId, uint tokenId) public payable { require(msg.sender == ownerOf(tokenId), "You must own the token to traverse"); require(trustedRemoteLookup[_chainId].length > 0, "This chain is currently unavailable for travel"); _burn(tokenId); bytes memory payload = abi.encode(msg.sender, tokenId); uint16 version = 1; bytes memory adapterParams = abi.encodePacked(version, gasForDestinationLzReceive); (uint messageFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams); require(msg.value >= messageFee, "RAID: msg.value not enough to cover messageFee. Send gas for message fees"); endpoint.send{value: msg.value}( _chainId, trustedRemoteLookup[_chainId], payload, payable(msg.sender), address(0x0), adapterParams ); onChainNFTCount -=1; } function setBaseURI(string memory URI) external onlyOwner { baseURI = URI; } function donateForDevelop() external payable { // thank you } function withdraw(uint amt) external onlyOwner { (bool sent, ) = payable(_owner).call{value: amt}(""); require(sent, "RAID: Failed to withdraw Ether"); } function setGasForDestinationLzReceive(uint newVal) external onlyOwner { gasForDestinationLzReceive = newVal; } function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) override internal { // decode (address toAddr, uint tokenId) = abi.decode(_payload, (address, uint)); _safeMint(toAddr, tokenId); onChainNFTCount +=1; } function _baseURI() override internal view returns (string memory) { return baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","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":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donateForDevelop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"estimateFeesView","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600a60006101000a81548160ff0219169083151502179055506000600b556000600e55610a5e600f556002601055620557306011553480156200004857600080fd5b50604051620056e3380380620056e383398181016040528101906200006e9190620003e2565b6040518060400160405280600c81526020017f526169642050726f6a65637400000000000000000000000000000000000000008152506040518060400160405280600481526020017f5241494400000000000000000000000000000000000000000000000000000000815250620000fa620000ee620001d160201b60201c565b620001d960201b60201c565b8160019080519060200190620001129291906200029d565b5080600290805190602001906200012b9291906200029d565b50505033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d9080519060200190620001c89291906200029d565b5050506200061a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ab9062000511565b90600052602060002090601f016020900481019282620002cf57600085556200031b565b82601f10620002ea57805160ff19168380011785556200031b565b828001600101855582156200031b579182015b828111156200031a578251825591602001919060010190620002fd565b5b5090506200032a91906200032e565b5090565b5b80821115620003495760008160009055506001016200032f565b5090565b6000620003646200035e8462000471565b62000448565b905082815260208101848484011115620003835762000382620005e0565b5b62000390848285620004db565b509392505050565b600081519050620003a98162000600565b92915050565b600082601f830112620003c757620003c6620005db565b5b8151620003d98482602086016200034d565b91505092915050565b60008060408385031215620003fc57620003fb620005ea565b5b600083015167ffffffffffffffff8111156200041d576200041c620005e5565b5b6200042b85828601620003af565b92505060206200043e8582860162000398565b9150509250929050565b60006200045462000467565b905062000462828262000547565b919050565b6000604051905090565b600067ffffffffffffffff8211156200048f576200048e620005ac565b5b6200049a82620005ef565b9050602081019050919050565b6000620004b482620004bb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620004fb578082015181840152602081019050620004de565b838111156200050b576000848401525b50505050565b600060028204905060018216806200052a57607f821691505b602082108114156200054157620005406200057d565b5b50919050565b6200055282620005ef565b810181811067ffffffffffffffff82111715620005745762000573620005ac565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200060b81620004a7565b81146200061757600080fd5b50565b6150b9806200062a6000396000f3fe6080604052600436106101e25760003560e01c8063715018a611610102578063b2bdfa7b11610095578063d1deba1f11610064578063d1deba1f146106c3578063e985e9c5146106df578063eb8d72b71461071c578063f2fde38b14610745576101e2565b8063b2bdfa7b14610616578063b88d4fde14610641578063c87b56dd1461066a578063cf89fa03146106a7576101e2565b80638ee74912116100d15780638ee749121461055b578063943fb8721461059957806395d89b41146105c2578063a22cb465146105ed576101e2565b8063715018a6146104d25780637533d788146104e957806377e05b3d146105265780638da5cb5b14610530576101e2565b80632e1a7d4d1161017a5780635c975abb116101495780635c975abb146104115780636352211e1461043c5780636ecd23061461047957806370a0823114610495576101e2565b80632e1a7d4d1461035957806342842e0e1461038257806355f804b3146103ab5780635b30d081146103d4576101e2565b8063081812fc116101b6578063081812fc146102a1578063095ea7b3146102de5780631c37a8221461030757806323b872dd14610330576101e2565b80621d3567146101e757806301ffc9a71461021057806302329a291461024d57806306fdde0314610276575b600080fd5b3480156101f357600080fd5b5061020e60048036038101906102099190613505565b61076e565b005b34801561021c57600080fd5b50610237600480360381019061023291906132c2565b6109b0565b6040516102449190613e55565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190613295565b610a92565b005b34801561028257600080fd5b5061028b610b2b565b6040516102989190613e92565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c391906135e4565b610bbd565b6040516102d59190613dc5565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613255565b610c42565b005b34801561031357600080fd5b5061032e60048036038101906103299190613505565b610d5a565b005b34801561033c57600080fd5b506103576004803603810190610352919061313f565b610dda565b005b34801561036557600080fd5b50610380600480360381019061037b91906135e4565b610e3a565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061313f565b610f88565b005b3480156103b757600080fd5b506103d260048036038101906103cd919061331c565b610fa8565b005b3480156103e057600080fd5b506103fb60048036038101906103f691906135a4565b61103e565b6040516104089190614373565b60405180910390f35b34801561041d57600080fd5b50610426611158565b6040516104339190613e55565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e91906135e4565b61116b565b6040516104709190613dc5565b60405180910390f35b610493600480360381019061048e9190613651565b61121d565b005b3480156104a157600080fd5b506104bc60048036038101906104b79190613092565b61136a565b6040516104c99190614373565b60405180910390f35b3480156104de57600080fd5b506104e7611422565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613365565b6114aa565b60405161051d9190613e70565b60405180910390f35b61052e61154a565b005b34801561053c57600080fd5b5061054561154c565b6040516105529190613dc5565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d91906133f2565b611575565b60405161059092919061438e565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb91906135e4565b6115c9565b005b3480156105ce57600080fd5b506105d761164f565b6040516105e49190613e92565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190613215565b6116e1565b005b34801561062257600080fd5b5061062b6116f7565b6040516106389190613dc5565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190613192565b61171d565b005b34801561067657600080fd5b50610691600480360381019061068c91906135e4565b61177f565b60405161069e9190613e92565b60405180910390f35b6106c160048036038101906106bc91906135a4565b611826565b005b6106dd60048036038101906106d89190613461565b611b33565b005b3480156106eb57600080fd5b50610706600480360381019061070191906130ff565b611cd3565b6040516107139190613e55565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190613392565b611d67565b005b34801561075157600080fd5b5061076c60048036038101906107679190613092565b611e13565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c857600080fd5b600960008561ffff1661ffff16815260200190815260200160002080546107ee9061465d565b905083511480156108345750600960008561ffff1661ffff1681526020019081526020016000206040516108229190613d3e565b60405180910390208380519060200120145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a906140d4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016108b294939291906142aa565b600060405180830381600087803b1580156108cc57600080fd5b505af19250505080156108dd575060015b6109a9576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff168152602001908152602001600020846040516109279190613d27565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d8484848460405161099c94939291906142aa565b60405180910390a16109aa565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a8b5750610a8a82611f0b565b5b9050919050565b610a9a611f75565b73ffffffffffffffffffffffffffffffffffffffff16610ab861154c565b73ffffffffffffffffffffffffffffffffffffffff1614610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b05906140b4565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b606060018054610b3a9061465d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b669061465d565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b6000610bc882611f7d565b610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614094565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c4d8261116b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590614174565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cdd611f75565b73ffffffffffffffffffffffffffffffffffffffff161480610d0c5750610d0b81610d06611f75565b611cd3565b5b610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290613ff4565b60405180910390fd5b610d558383611fe9565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90614054565b60405180910390fd5b610dd4848484846120a2565b50505050565b610deb610de5611f75565b826120e9565b610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190614194565b60405180910390fd5b610e358383836121c7565b505050565b610e42611f75565b73ffffffffffffffffffffffffffffffffffffffff16610e6061154c565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead906140b4565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610efe90613d84565b60006040518083038185875af1925050503d8060008114610f3b576040519150601f19603f3d011682016040523d82523d6000602084013e610f40565b606091505b5050905080610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b906141b4565b60405180910390fd5b5050565b610fa38383836040518060200160405280600081525061171d565b505050565b610fb0611f75565b73ffffffffffffffffffffffffffffffffffffffff16610fce61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b906140b4565b60405180910390fd5b80600d908051906020019061103a929190612d61565b5050565b6000803383604051602001611054929190613e2c565b6040516020818303038152906040529050600060019050600081601154604051602001611082929190613d99565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108830876000876040518663ffffffff1660e01b81526004016110f99594939291906141f4565b604080518083038186803b15801561111057600080fd5b505afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190613611565b5090508094505050505092915050565b600a60009054906101000a900460ff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90614034565b60405180910390fd5b80915050919050565b600a60009054906101000a900460ff161561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490613eb4565b60405180910390fd5b6010548160ff1611156112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac906140f4565b60405180910390fd5b600f548160ff16600e546112c991906144a1565b111561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190614154565b60405180910390fd5b6000600190505b8160ff1681116113665761133933600e6000815461132e906146c0565b919050819055612423565b6001600b600082825461134c91906144a1565b92505081905550808061135e906146c0565b915050611311565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614014565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142a611f75565b73ffffffffffffffffffffffffffffffffffffffff1661144861154c565b73ffffffffffffffffffffffffffffffffffffffff161461149e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611495906140b4565b60405180910390fd5b6114a86000612441565b565b600960205280600052604060002060009150905080546114c99061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546114f59061465d565b80156115425780601f1061151757610100808354040283529160200191611542565b820191906000526020600020905b81548152906001019060200180831161152557829003601f168201915b505050505081565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6115d1611f75565b73ffffffffffffffffffffffffffffffffffffffff166115ef61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906140b4565b60405180910390fd5b8060118190555050565b60606002805461165e9061465d565b80601f016020809104026020016040519081016040528092919081815260200182805461168a9061465d565b80156116d75780601f106116ac576101008083540402835291602001916116d7565b820191906000526020600020905b8154815290600101906020018083116116ba57829003601f168201915b5050505050905090565b6116f36116ec611f75565b8383612505565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61172e611728611f75565b836120e9565b61176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490614194565b60405180910390fd5b61177984848484612672565b50505050565b606061178a82611f7d565b6117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614134565b60405180910390fd5b60006117d36126ce565b905060008151116117f3576040518060200160405280600081525061181e565b806117fd84612760565b60405160200161180e929190613d55565b6040516020818303038152906040525b915050919050565b61182f8161116b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390613f94565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546118c49061465d565b905011611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90613f54565b60405180910390fd5b61190f816128c1565b60003382604051602001611924929190613e2c565b6040516020818303038152906040529050600060019050600081601154604051602001611952929190613d99565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016119c99594939291906141f4565b604080518083038186803b1580156119e057600080fd5b505afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190613611565b50905080341015611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5590613fd4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b8152600401611adf969594939291906142fd565b6000604051808303818588803b158015611af857600080fd5b505af1158015611b0c573d6000803e3d6000fd5b50505050506001600b6000828254611b249190614528565b92505081905550505050505050565b6000600860008761ffff1661ffff16815260200190815260200160002085604051611b5e9190613d27565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b81600101541415611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca906141d4565b60405180910390fd5b806000015483839050148015611c03575080600101548383604051611bf9929190613d0e565b6040518091039020145b611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990613f74565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b8152600401611c99959493929190614255565b600060405180830381600087803b158015611cb357600080fd5b505af1158015611cc7573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d6f611f75565b73ffffffffffffffffffffffffffffffffffffffff16611d8d61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906140b4565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611e0d929190612de7565b50505050565b611e1b611f75565b73ffffffffffffffffffffffffffffffffffffffff16611e3961154c565b73ffffffffffffffffffffffffffffffffffffffff1614611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906140b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef690613ef4565b60405180910390fd5b611f0881612441565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661205c8361116b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080828060200190518101906120b991906130bf565b915091506120c78282612423565b6001600b60008282546120da91906144a1565b92505081905550505050505050565b60006120f482611f7d565b612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a90613fb4565b60405180910390fd5b600061213e8361116b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121ad57508373ffffffffffffffffffffffffffffffffffffffff1661219584610bbd565b73ffffffffffffffffffffffffffffffffffffffff16145b806121be57506121bd8185611cd3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121e78261116b565b73ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614114565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a490613f14565b60405180910390fd5b6122b88383836129d2565b6122c3600082611fe9565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123139190614528565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461236a91906144a1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61243d8282604051806020016040528060008152506129d7565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b90613f34565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126659190613e55565b60405180910390a3505050565b61267d8484846121c7565b61268984848484612a32565b6126c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bf90613ed4565b60405180910390fd5b50505050565b6060600d80546126dd9061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546127099061465d565b80156127565780601f1061272b57610100808354040283529160200191612756565b820191906000526020600020905b81548152906001019060200180831161273957829003601f168201915b5050505050905090565b606060008214156127a8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128bc565b600082905060005b600082146127da5780806127c3906146c0565b915050600a826127d391906144f7565b91506127b0565b60008167ffffffffffffffff8111156127f6576127f5614812565b5b6040519080825280601f01601f1916602001820160405280156128285781602001600182028036833780820191505090505b5090505b600085146128b5576001826128419190614528565b9150600a856128509190614725565b603061285c91906144a1565b60f81b818381518110612872576128716147e3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128ae91906144f7565b945061282c565b8093505050505b919050565b60006128cc8261116b565b90506128da816000846129d2565b6128e5600083611fe9565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129359190614528565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6129e18383612bc9565b6129ee6000848484612a32565b612a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2490613ed4565b60405180910390fd5b505050565b6000612a538473ffffffffffffffffffffffffffffffffffffffff16612d4e565b15612bbc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a7c611f75565b8786866040518563ffffffff1660e01b8152600401612a9e9493929190613de0565b602060405180830381600087803b158015612ab857600080fd5b505af1925050508015612ae957506040513d601f19601f82011682018060405250810190612ae691906132ef565b60015b612b6c573d8060008114612b19576040519150601f19603f3d011682016040523d82523d6000602084013e612b1e565b606091505b50600081511415612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90613ed4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bc1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3090614074565b60405180910390fd5b612c45600083836129d2565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c9591906144a1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d6d9061465d565b90600052602060002090601f016020900481019282612d8f5760008555612dd6565b82601f10612da857805160ff1916838001178555612dd6565b82800160010185558215612dd6579182015b82811115612dd5578251825591602001919060010190612dba565b5b509050612de39190612e6d565b5090565b828054612df39061465d565b90600052602060002090601f016020900481019282612e155760008555612e5c565b82601f10612e2e57803560ff1916838001178555612e5c565b82800160010185558215612e5c579182015b82811115612e5b578235825591602001919060010190612e40565b5b509050612e699190612e6d565b5090565b5b80821115612e86576000816000905550600101612e6e565b5090565b6000612e9d612e98846143dc565b6143b7565b905082815260208101848484011115612eb957612eb8614850565b5b612ec484828561461b565b509392505050565b6000612edf612eda8461440d565b6143b7565b905082815260208101848484011115612efb57612efa614850565b5b612f0684828561461b565b509392505050565b600081359050612f1d81614fcb565b92915050565b600081519050612f3281614fe2565b92915050565b600081359050612f4781614ff9565b92915050565b600081359050612f5c81615010565b92915050565b600081519050612f7181615010565b92915050565b60008083601f840112612f8d57612f8c614846565b5b8235905067ffffffffffffffff811115612faa57612fa9614841565b5b602083019150836001820283011115612fc657612fc561484b565b5b9250929050565b600082601f830112612fe257612fe1614846565b5b8135612ff2848260208601612e8a565b91505092915050565b600082601f8301126130105761300f614846565b5b8135613020848260208601612ecc565b91505092915050565b60008135905061303881615027565b92915050565b60008135905061304d8161503e565b92915050565b6000815190506130628161503e565b92915050565b60008135905061307781615055565b92915050565b60008135905061308c8161506c565b92915050565b6000602082840312156130a8576130a761485a565b5b60006130b684828501612f0e565b91505092915050565b600080604083850312156130d6576130d561485a565b5b60006130e485828601612f23565b92505060206130f585828601613053565b9150509250929050565b600080604083850312156131165761311561485a565b5b600061312485828601612f0e565b925050602061313585828601612f0e565b9150509250929050565b6000806000606084860312156131585761315761485a565b5b600061316686828701612f0e565b935050602061317786828701612f0e565b92505060406131888682870161303e565b9150509250925092565b600080600080608085870312156131ac576131ab61485a565b5b60006131ba87828801612f0e565b94505060206131cb87828801612f0e565b93505060406131dc8782880161303e565b925050606085013567ffffffffffffffff8111156131fd576131fc614855565b5b61320987828801612fcd565b91505092959194509250565b6000806040838503121561322c5761322b61485a565b5b600061323a85828601612f0e565b925050602061324b85828601612f38565b9150509250929050565b6000806040838503121561326c5761326b61485a565b5b600061327a85828601612f0e565b925050602061328b8582860161303e565b9150509250929050565b6000602082840312156132ab576132aa61485a565b5b60006132b984828501612f38565b91505092915050565b6000602082840312156132d8576132d761485a565b5b60006132e684828501612f4d565b91505092915050565b6000602082840312156133055761330461485a565b5b600061331384828501612f62565b91505092915050565b6000602082840312156133325761333161485a565b5b600082013567ffffffffffffffff8111156133505761334f614855565b5b61335c84828501612ffb565b91505092915050565b60006020828403121561337b5761337a61485a565b5b600061338984828501613029565b91505092915050565b6000806000604084860312156133ab576133aa61485a565b5b60006133b986828701613029565b935050602084013567ffffffffffffffff8111156133da576133d9614855565b5b6133e686828701612f77565b92509250509250925092565b60008060006060848603121561340b5761340a61485a565b5b600061341986828701613029565b935050602084013567ffffffffffffffff81111561343a57613439614855565b5b61344686828701612fcd565b92505060406134578682870161303e565b9150509250925092565b60008060008060006080868803121561347d5761347c61485a565b5b600061348b88828901613029565b955050602086013567ffffffffffffffff8111156134ac576134ab614855565b5b6134b888828901612fcd565b94505060406134c988828901613068565b935050606086013567ffffffffffffffff8111156134ea576134e9614855565b5b6134f688828901612f77565b92509250509295509295909350565b6000806000806080858703121561351f5761351e61485a565b5b600061352d87828801613029565b945050602085013567ffffffffffffffff81111561354e5761354d614855565b5b61355a87828801612fcd565b935050604061356b87828801613068565b925050606085013567ffffffffffffffff81111561358c5761358b614855565b5b61359887828801612fcd565b91505092959194509250565b600080604083850312156135bb576135ba61485a565b5b60006135c985828601613029565b92505060206135da8582860161303e565b9150509250929050565b6000602082840312156135fa576135f961485a565b5b60006136088482850161303e565b91505092915050565b600080604083850312156136285761362761485a565b5b600061363685828601613053565b925050602061364785828601613053565b9150509250929050565b6000602082840312156136675761366661485a565b5b60006136758482850161307d565b91505092915050565b6136878161456e565b82525050565b6136968161455c565b82525050565b6136a581614580565b82525050565b6136b48161458c565b82525050565b60006136c68385614469565b93506136d383858461461b565b6136dc8361485f565b840190509392505050565b60006136f3838561447a565b935061370083858461461b565b82840190509392505050565b600061371782614453565b6137218185614469565b935061373181856020860161462a565b61373a8161485f565b840191505092915050565b600061375082614453565b61375a818561447a565b935061376a81856020860161462a565b80840191505092915050565b600081546137838161465d565b61378d8186614469565b945060018216600081146137a857600181146137ba576137ed565b60ff19831686526020860193506137ed565b6137c38561443e565b60005b838110156137e5578154818901526001820191506020810190506137c6565b808801955050505b50505092915050565b600081546138038161465d565b61380d818661447a565b9450600182166000811461382857600181146138395761386c565b60ff1983168652818601935061386c565b6138428561443e565b60005b8381101561386457815481890152600182019150602081019050613845565b838801955050505b50505092915050565b60006138808261445e565b61388a8185614485565b935061389a81856020860161462a565b6138a38161485f565b840191505092915050565b60006138b98261445e565b6138c38185614496565b93506138d381856020860161462a565b80840191505092915050565b60006138ec601883614485565b91506138f78261487d565b602082019050919050565b600061390f603283614485565b915061391a826148a6565b604082019050919050565b6000613932602683614485565b915061393d826148f5565b604082019050919050565b6000613955602483614485565b915061396082614944565b604082019050919050565b6000613978601983614485565b915061398382614993565b602082019050919050565b600061399b602e83614485565b91506139a6826149bc565b604082019050919050565b60006139be601a83614485565b91506139c982614a0b565b602082019050919050565b60006139e1602283614485565b91506139ec82614a34565b604082019050919050565b6000613a04602c83614485565b9150613a0f82614a83565b604082019050919050565b6000613a27604983614485565b9150613a3282614ad2565b606082019050919050565b6000613a4a603883614485565b9150613a5582614b47565b604082019050919050565b6000613a6d602a83614485565b9150613a7882614b96565b604082019050919050565b6000613a90602983614485565b9150613a9b82614be5565b604082019050919050565b6000613ab3602b83614485565b9150613abe82614c34565b604082019050919050565b6000613ad6602083614485565b9150613ae182614c83565b602082019050919050565b6000613af9602c83614485565b9150613b0482614cac565b604082019050919050565b6000613b1c600583614496565b9150613b2782614cfb565b600582019050919050565b6000613b3f602083614485565b9150613b4a82614d24565b602082019050919050565b6000613b62603483614485565b9150613b6d82614d4d565b604082019050919050565b6000613b85602a83614485565b9150613b9082614d9c565b604082019050919050565b6000613ba8602983614485565b9150613bb382614deb565b604082019050919050565b6000613bcb602f83614485565b9150613bd682614e3a565b604082019050919050565b6000613bee601983614485565b9150613bf982614e89565b602082019050919050565b6000613c11602183614485565b9150613c1c82614eb2565b604082019050919050565b6000613c3460008361447a565b9150613c3f82614f01565b600082019050919050565b6000613c57603183614485565b9150613c6282614f04565b604082019050919050565b6000613c7a601e83614485565b9150613c8582614f53565b602082019050919050565b6000613c9d602683614485565b9150613ca882614f7c565b604082019050919050565b613cbc816145c2565b82525050565b613cd3613cce826145c2565b614709565b82525050565b613ce2816145f0565b82525050565b613cf9613cf4826145f0565b61471b565b82525050565b613d08816145fa565b82525050565b6000613d1b8284866136e7565b91508190509392505050565b6000613d338284613745565b915081905092915050565b6000613d4a82846137f6565b915081905092915050565b6000613d6182856138ae565b9150613d6d82846138ae565b9150613d7882613b0f565b91508190509392505050565b6000613d8f82613c27565b9150819050919050565b6000613da58285613cc2565b600282019150613db58284613ce8565b6020820191508190509392505050565b6000602082019050613dda600083018461368d565b92915050565b6000608082019050613df5600083018761368d565b613e02602083018661368d565b613e0f6040830185613cd9565b8181036060830152613e21818461370c565b905095945050505050565b6000604082019050613e41600083018561368d565b613e4e6020830184613cd9565b9392505050565b6000602082019050613e6a600083018461369c565b92915050565b60006020820190508181036000830152613e8a818461370c565b905092915050565b60006020820190508181036000830152613eac8184613875565b905092915050565b60006020820190508181036000830152613ecd816138df565b9050919050565b60006020820190508181036000830152613eed81613902565b9050919050565b60006020820190508181036000830152613f0d81613925565b9050919050565b60006020820190508181036000830152613f2d81613948565b9050919050565b60006020820190508181036000830152613f4d8161396b565b9050919050565b60006020820190508181036000830152613f6d8161398e565b9050919050565b60006020820190508181036000830152613f8d816139b1565b9050919050565b60006020820190508181036000830152613fad816139d4565b9050919050565b60006020820190508181036000830152613fcd816139f7565b9050919050565b60006020820190508181036000830152613fed81613a1a565b9050919050565b6000602082019050818103600083015261400d81613a3d565b9050919050565b6000602082019050818103600083015261402d81613a60565b9050919050565b6000602082019050818103600083015261404d81613a83565b9050919050565b6000602082019050818103600083015261406d81613aa6565b9050919050565b6000602082019050818103600083015261408d81613ac9565b9050919050565b600060208201905081810360008301526140ad81613aec565b9050919050565b600060208201905081810360008301526140cd81613b32565b9050919050565b600060208201905081810360008301526140ed81613b55565b9050919050565b6000602082019050818103600083015261410d81613b78565b9050919050565b6000602082019050818103600083015261412d81613b9b565b9050919050565b6000602082019050818103600083015261414d81613bbe565b9050919050565b6000602082019050818103600083015261416d81613be1565b9050919050565b6000602082019050818103600083015261418d81613c04565b9050919050565b600060208201905081810360008301526141ad81613c4a565b9050919050565b600060208201905081810360008301526141cd81613c6d565b9050919050565b600060208201905081810360008301526141ed81613c90565b9050919050565b600060a0820190506142096000830188613cb3565b614216602083018761368d565b8181036040830152614228818661370c565b9050614237606083018561369c565b8181036080830152614249818461370c565b90509695505050505050565b600060808201905061426a6000830188613cb3565b818103602083015261427c818761370c565b905061428b6040830186613cff565b818103606083015261429e8184866136ba565b90509695505050505050565b60006080820190506142bf6000830187613cb3565b81810360208301526142d1818661370c565b90506142e06040830185613cff565b81810360608301526142f2818461370c565b905095945050505050565b600060c0820190506143126000830189613cb3565b81810360208301526143248188613776565b90508181036040830152614338818761370c565b9050614347606083018661367e565b614354608083018561368d565b81810360a0830152614366818461370c565b9050979650505050505050565b60006020820190506143886000830184613cd9565b92915050565b60006040820190506143a36000830185613cd9565b6143b060208301846136ab565b9392505050565b60006143c16143d2565b90506143cd828261468f565b919050565b6000604051905090565b600067ffffffffffffffff8211156143f7576143f6614812565b5b6144008261485f565b9050602081019050919050565b600067ffffffffffffffff82111561442857614427614812565b5b6144318261485f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006144ac826145f0565b91506144b7836145f0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ec576144eb614756565b5b828201905092915050565b6000614502826145f0565b915061450d836145f0565b92508261451d5761451c614785565b5b828204905092915050565b6000614533826145f0565b915061453e836145f0565b92508282101561455157614550614756565b5b828203905092915050565b6000614567826145d0565b9050919050565b6000614579826145d0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561464857808201518184015260208101905061462d565b83811115614657576000848401525b50505050565b6000600282049050600182168061467557607f821691505b60208210811415614689576146886147b4565b5b50919050565b6146988261485f565b810181811067ffffffffffffffff821117156146b7576146b6614812565b5b80604052505050565b60006146cb826145f0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146fe576146fd614756565b5b600182019050919050565b600061471482614870565b9050919050565b6000819050919050565b6000614730826145f0565b915061473b836145f0565b92508261474b5761474a614785565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f53616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f524149443a206d73672e76616c7565206e6f7420656e6f75676820746f20636f60008201527f766572206d6573736167654665652e2053656e642067617320666f72206d657360208201527f7361676520666565730000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f524149443a204d6178206d696e7420616d6f756e74207065722073657373696f60008201527f6e20657863656564656400000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f524149443a204d696e74206578636565647320737570706c7900000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f524149443a204661696c656420746f2077697468647261772045746865720000600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b614fd48161455c565b8114614fdf57600080fd5b50565b614feb8161456e565b8114614ff657600080fd5b50565b61500281614580565b811461500d57600080fd5b50565b61501981614596565b811461502457600080fd5b50565b615030816145c2565b811461503b57600080fd5b50565b615047816145f0565b811461505257600080fd5b50565b61505e816145fa565b811461506957600080fd5b50565b6150758161460e565b811461508057600080fd5b5056fea26469706673582212205bcee154723fb19dcea65ecc2d8be9fdb47dee1876f742b3de431d1e71c7afb364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d66556634485244465a4a71626865754e504b76764570593743366633667a6137585a544c4650745253504c362f00000000000000000000
Deployed Bytecode
0x6080604052600436106101e25760003560e01c8063715018a611610102578063b2bdfa7b11610095578063d1deba1f11610064578063d1deba1f146106c3578063e985e9c5146106df578063eb8d72b71461071c578063f2fde38b14610745576101e2565b8063b2bdfa7b14610616578063b88d4fde14610641578063c87b56dd1461066a578063cf89fa03146106a7576101e2565b80638ee74912116100d15780638ee749121461055b578063943fb8721461059957806395d89b41146105c2578063a22cb465146105ed576101e2565b8063715018a6146104d25780637533d788146104e957806377e05b3d146105265780638da5cb5b14610530576101e2565b80632e1a7d4d1161017a5780635c975abb116101495780635c975abb146104115780636352211e1461043c5780636ecd23061461047957806370a0823114610495576101e2565b80632e1a7d4d1461035957806342842e0e1461038257806355f804b3146103ab5780635b30d081146103d4576101e2565b8063081812fc116101b6578063081812fc146102a1578063095ea7b3146102de5780631c37a8221461030757806323b872dd14610330576101e2565b80621d3567146101e757806301ffc9a71461021057806302329a291461024d57806306fdde0314610276575b600080fd5b3480156101f357600080fd5b5061020e60048036038101906102099190613505565b61076e565b005b34801561021c57600080fd5b50610237600480360381019061023291906132c2565b6109b0565b6040516102449190613e55565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190613295565b610a92565b005b34801561028257600080fd5b5061028b610b2b565b6040516102989190613e92565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c391906135e4565b610bbd565b6040516102d59190613dc5565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613255565b610c42565b005b34801561031357600080fd5b5061032e60048036038101906103299190613505565b610d5a565b005b34801561033c57600080fd5b506103576004803603810190610352919061313f565b610dda565b005b34801561036557600080fd5b50610380600480360381019061037b91906135e4565b610e3a565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061313f565b610f88565b005b3480156103b757600080fd5b506103d260048036038101906103cd919061331c565b610fa8565b005b3480156103e057600080fd5b506103fb60048036038101906103f691906135a4565b61103e565b6040516104089190614373565b60405180910390f35b34801561041d57600080fd5b50610426611158565b6040516104339190613e55565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e91906135e4565b61116b565b6040516104709190613dc5565b60405180910390f35b610493600480360381019061048e9190613651565b61121d565b005b3480156104a157600080fd5b506104bc60048036038101906104b79190613092565b61136a565b6040516104c99190614373565b60405180910390f35b3480156104de57600080fd5b506104e7611422565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613365565b6114aa565b60405161051d9190613e70565b60405180910390f35b61052e61154a565b005b34801561053c57600080fd5b5061054561154c565b6040516105529190613dc5565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d91906133f2565b611575565b60405161059092919061438e565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb91906135e4565b6115c9565b005b3480156105ce57600080fd5b506105d761164f565b6040516105e49190613e92565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190613215565b6116e1565b005b34801561062257600080fd5b5061062b6116f7565b6040516106389190613dc5565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190613192565b61171d565b005b34801561067657600080fd5b50610691600480360381019061068c91906135e4565b61177f565b60405161069e9190613e92565b60405180910390f35b6106c160048036038101906106bc91906135a4565b611826565b005b6106dd60048036038101906106d89190613461565b611b33565b005b3480156106eb57600080fd5b50610706600480360381019061070191906130ff565b611cd3565b6040516107139190613e55565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190613392565b611d67565b005b34801561075157600080fd5b5061076c60048036038101906107679190613092565b611e13565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c857600080fd5b600960008561ffff1661ffff16815260200190815260200160002080546107ee9061465d565b905083511480156108345750600960008561ffff1661ffff1681526020019081526020016000206040516108229190613d3e565b60405180910390208380519060200120145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a906140d4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016108b294939291906142aa565b600060405180830381600087803b1580156108cc57600080fd5b505af19250505080156108dd575060015b6109a9576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff168152602001908152602001600020846040516109279190613d27565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d8484848460405161099c94939291906142aa565b60405180910390a16109aa565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a8b5750610a8a82611f0b565b5b9050919050565b610a9a611f75565b73ffffffffffffffffffffffffffffffffffffffff16610ab861154c565b73ffffffffffffffffffffffffffffffffffffffff1614610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b05906140b4565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b606060018054610b3a9061465d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b669061465d565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b6000610bc882611f7d565b610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614094565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c4d8261116b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590614174565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cdd611f75565b73ffffffffffffffffffffffffffffffffffffffff161480610d0c5750610d0b81610d06611f75565b611cd3565b5b610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290613ff4565b60405180910390fd5b610d558383611fe9565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90614054565b60405180910390fd5b610dd4848484846120a2565b50505050565b610deb610de5611f75565b826120e9565b610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190614194565b60405180910390fd5b610e358383836121c7565b505050565b610e42611f75565b73ffffffffffffffffffffffffffffffffffffffff16610e6061154c565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead906140b4565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610efe90613d84565b60006040518083038185875af1925050503d8060008114610f3b576040519150601f19603f3d011682016040523d82523d6000602084013e610f40565b606091505b5050905080610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b906141b4565b60405180910390fd5b5050565b610fa38383836040518060200160405280600081525061171d565b505050565b610fb0611f75565b73ffffffffffffffffffffffffffffffffffffffff16610fce61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b906140b4565b60405180910390fd5b80600d908051906020019061103a929190612d61565b5050565b6000803383604051602001611054929190613e2c565b6040516020818303038152906040529050600060019050600081601154604051602001611082929190613d99565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108830876000876040518663ffffffff1660e01b81526004016110f99594939291906141f4565b604080518083038186803b15801561111057600080fd5b505afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190613611565b5090508094505050505092915050565b600a60009054906101000a900460ff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90614034565b60405180910390fd5b80915050919050565b600a60009054906101000a900460ff161561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490613eb4565b60405180910390fd5b6010548160ff1611156112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac906140f4565b60405180910390fd5b600f548160ff16600e546112c991906144a1565b111561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190614154565b60405180910390fd5b6000600190505b8160ff1681116113665761133933600e6000815461132e906146c0565b919050819055612423565b6001600b600082825461134c91906144a1565b92505081905550808061135e906146c0565b915050611311565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614014565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142a611f75565b73ffffffffffffffffffffffffffffffffffffffff1661144861154c565b73ffffffffffffffffffffffffffffffffffffffff161461149e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611495906140b4565b60405180910390fd5b6114a86000612441565b565b600960205280600052604060002060009150905080546114c99061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546114f59061465d565b80156115425780601f1061151757610100808354040283529160200191611542565b820191906000526020600020905b81548152906001019060200180831161152557829003601f168201915b505050505081565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6115d1611f75565b73ffffffffffffffffffffffffffffffffffffffff166115ef61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906140b4565b60405180910390fd5b8060118190555050565b60606002805461165e9061465d565b80601f016020809104026020016040519081016040528092919081815260200182805461168a9061465d565b80156116d75780601f106116ac576101008083540402835291602001916116d7565b820191906000526020600020905b8154815290600101906020018083116116ba57829003601f168201915b5050505050905090565b6116f36116ec611f75565b8383612505565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61172e611728611f75565b836120e9565b61176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490614194565b60405180910390fd5b61177984848484612672565b50505050565b606061178a82611f7d565b6117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614134565b60405180910390fd5b60006117d36126ce565b905060008151116117f3576040518060200160405280600081525061181e565b806117fd84612760565b60405160200161180e929190613d55565b6040516020818303038152906040525b915050919050565b61182f8161116b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390613f94565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546118c49061465d565b905011611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90613f54565b60405180910390fd5b61190f816128c1565b60003382604051602001611924929190613e2c565b6040516020818303038152906040529050600060019050600081601154604051602001611952929190613d99565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016119c99594939291906141f4565b604080518083038186803b1580156119e057600080fd5b505afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190613611565b50905080341015611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5590613fd4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b8152600401611adf969594939291906142fd565b6000604051808303818588803b158015611af857600080fd5b505af1158015611b0c573d6000803e3d6000fd5b50505050506001600b6000828254611b249190614528565b92505081905550505050505050565b6000600860008761ffff1661ffff16815260200190815260200160002085604051611b5e9190613d27565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b81600101541415611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca906141d4565b60405180910390fd5b806000015483839050148015611c03575080600101548383604051611bf9929190613d0e565b6040518091039020145b611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990613f74565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b8152600401611c99959493929190614255565b600060405180830381600087803b158015611cb357600080fd5b505af1158015611cc7573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d6f611f75565b73ffffffffffffffffffffffffffffffffffffffff16611d8d61154c565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906140b4565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611e0d929190612de7565b50505050565b611e1b611f75565b73ffffffffffffffffffffffffffffffffffffffff16611e3961154c565b73ffffffffffffffffffffffffffffffffffffffff1614611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906140b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef690613ef4565b60405180910390fd5b611f0881612441565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661205c8361116b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080828060200190518101906120b991906130bf565b915091506120c78282612423565b6001600b60008282546120da91906144a1565b92505081905550505050505050565b60006120f482611f7d565b612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a90613fb4565b60405180910390fd5b600061213e8361116b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121ad57508373ffffffffffffffffffffffffffffffffffffffff1661219584610bbd565b73ffffffffffffffffffffffffffffffffffffffff16145b806121be57506121bd8185611cd3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121e78261116b565b73ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614114565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a490613f14565b60405180910390fd5b6122b88383836129d2565b6122c3600082611fe9565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123139190614528565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461236a91906144a1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61243d8282604051806020016040528060008152506129d7565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b90613f34565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126659190613e55565b60405180910390a3505050565b61267d8484846121c7565b61268984848484612a32565b6126c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bf90613ed4565b60405180910390fd5b50505050565b6060600d80546126dd9061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546127099061465d565b80156127565780601f1061272b57610100808354040283529160200191612756565b820191906000526020600020905b81548152906001019060200180831161273957829003601f168201915b5050505050905090565b606060008214156127a8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128bc565b600082905060005b600082146127da5780806127c3906146c0565b915050600a826127d391906144f7565b91506127b0565b60008167ffffffffffffffff8111156127f6576127f5614812565b5b6040519080825280601f01601f1916602001820160405280156128285781602001600182028036833780820191505090505b5090505b600085146128b5576001826128419190614528565b9150600a856128509190614725565b603061285c91906144a1565b60f81b818381518110612872576128716147e3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128ae91906144f7565b945061282c565b8093505050505b919050565b60006128cc8261116b565b90506128da816000846129d2565b6128e5600083611fe9565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129359190614528565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6129e18383612bc9565b6129ee6000848484612a32565b612a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2490613ed4565b60405180910390fd5b505050565b6000612a538473ffffffffffffffffffffffffffffffffffffffff16612d4e565b15612bbc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a7c611f75565b8786866040518563ffffffff1660e01b8152600401612a9e9493929190613de0565b602060405180830381600087803b158015612ab857600080fd5b505af1925050508015612ae957506040513d601f19601f82011682018060405250810190612ae691906132ef565b60015b612b6c573d8060008114612b19576040519150601f19603f3d011682016040523d82523d6000602084013e612b1e565b606091505b50600081511415612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90613ed4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bc1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3090614074565b60405180910390fd5b612c45600083836129d2565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c9591906144a1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d6d9061465d565b90600052602060002090601f016020900481019282612d8f5760008555612dd6565b82601f10612da857805160ff1916838001178555612dd6565b82800160010185558215612dd6579182015b82811115612dd5578251825591602001919060010190612dba565b5b509050612de39190612e6d565b5090565b828054612df39061465d565b90600052602060002090601f016020900481019282612e155760008555612e5c565b82601f10612e2e57803560ff1916838001178555612e5c565b82800160010185558215612e5c579182015b82811115612e5b578235825591602001919060010190612e40565b5b509050612e699190612e6d565b5090565b5b80821115612e86576000816000905550600101612e6e565b5090565b6000612e9d612e98846143dc565b6143b7565b905082815260208101848484011115612eb957612eb8614850565b5b612ec484828561461b565b509392505050565b6000612edf612eda8461440d565b6143b7565b905082815260208101848484011115612efb57612efa614850565b5b612f0684828561461b565b509392505050565b600081359050612f1d81614fcb565b92915050565b600081519050612f3281614fe2565b92915050565b600081359050612f4781614ff9565b92915050565b600081359050612f5c81615010565b92915050565b600081519050612f7181615010565b92915050565b60008083601f840112612f8d57612f8c614846565b5b8235905067ffffffffffffffff811115612faa57612fa9614841565b5b602083019150836001820283011115612fc657612fc561484b565b5b9250929050565b600082601f830112612fe257612fe1614846565b5b8135612ff2848260208601612e8a565b91505092915050565b600082601f8301126130105761300f614846565b5b8135613020848260208601612ecc565b91505092915050565b60008135905061303881615027565b92915050565b60008135905061304d8161503e565b92915050565b6000815190506130628161503e565b92915050565b60008135905061307781615055565b92915050565b60008135905061308c8161506c565b92915050565b6000602082840312156130a8576130a761485a565b5b60006130b684828501612f0e565b91505092915050565b600080604083850312156130d6576130d561485a565b5b60006130e485828601612f23565b92505060206130f585828601613053565b9150509250929050565b600080604083850312156131165761311561485a565b5b600061312485828601612f0e565b925050602061313585828601612f0e565b9150509250929050565b6000806000606084860312156131585761315761485a565b5b600061316686828701612f0e565b935050602061317786828701612f0e565b92505060406131888682870161303e565b9150509250925092565b600080600080608085870312156131ac576131ab61485a565b5b60006131ba87828801612f0e565b94505060206131cb87828801612f0e565b93505060406131dc8782880161303e565b925050606085013567ffffffffffffffff8111156131fd576131fc614855565b5b61320987828801612fcd565b91505092959194509250565b6000806040838503121561322c5761322b61485a565b5b600061323a85828601612f0e565b925050602061324b85828601612f38565b9150509250929050565b6000806040838503121561326c5761326b61485a565b5b600061327a85828601612f0e565b925050602061328b8582860161303e565b9150509250929050565b6000602082840312156132ab576132aa61485a565b5b60006132b984828501612f38565b91505092915050565b6000602082840312156132d8576132d761485a565b5b60006132e684828501612f4d565b91505092915050565b6000602082840312156133055761330461485a565b5b600061331384828501612f62565b91505092915050565b6000602082840312156133325761333161485a565b5b600082013567ffffffffffffffff8111156133505761334f614855565b5b61335c84828501612ffb565b91505092915050565b60006020828403121561337b5761337a61485a565b5b600061338984828501613029565b91505092915050565b6000806000604084860312156133ab576133aa61485a565b5b60006133b986828701613029565b935050602084013567ffffffffffffffff8111156133da576133d9614855565b5b6133e686828701612f77565b92509250509250925092565b60008060006060848603121561340b5761340a61485a565b5b600061341986828701613029565b935050602084013567ffffffffffffffff81111561343a57613439614855565b5b61344686828701612fcd565b92505060406134578682870161303e565b9150509250925092565b60008060008060006080868803121561347d5761347c61485a565b5b600061348b88828901613029565b955050602086013567ffffffffffffffff8111156134ac576134ab614855565b5b6134b888828901612fcd565b94505060406134c988828901613068565b935050606086013567ffffffffffffffff8111156134ea576134e9614855565b5b6134f688828901612f77565b92509250509295509295909350565b6000806000806080858703121561351f5761351e61485a565b5b600061352d87828801613029565b945050602085013567ffffffffffffffff81111561354e5761354d614855565b5b61355a87828801612fcd565b935050604061356b87828801613068565b925050606085013567ffffffffffffffff81111561358c5761358b614855565b5b61359887828801612fcd565b91505092959194509250565b600080604083850312156135bb576135ba61485a565b5b60006135c985828601613029565b92505060206135da8582860161303e565b9150509250929050565b6000602082840312156135fa576135f961485a565b5b60006136088482850161303e565b91505092915050565b600080604083850312156136285761362761485a565b5b600061363685828601613053565b925050602061364785828601613053565b9150509250929050565b6000602082840312156136675761366661485a565b5b60006136758482850161307d565b91505092915050565b6136878161456e565b82525050565b6136968161455c565b82525050565b6136a581614580565b82525050565b6136b48161458c565b82525050565b60006136c68385614469565b93506136d383858461461b565b6136dc8361485f565b840190509392505050565b60006136f3838561447a565b935061370083858461461b565b82840190509392505050565b600061371782614453565b6137218185614469565b935061373181856020860161462a565b61373a8161485f565b840191505092915050565b600061375082614453565b61375a818561447a565b935061376a81856020860161462a565b80840191505092915050565b600081546137838161465d565b61378d8186614469565b945060018216600081146137a857600181146137ba576137ed565b60ff19831686526020860193506137ed565b6137c38561443e565b60005b838110156137e5578154818901526001820191506020810190506137c6565b808801955050505b50505092915050565b600081546138038161465d565b61380d818661447a565b9450600182166000811461382857600181146138395761386c565b60ff1983168652818601935061386c565b6138428561443e565b60005b8381101561386457815481890152600182019150602081019050613845565b838801955050505b50505092915050565b60006138808261445e565b61388a8185614485565b935061389a81856020860161462a565b6138a38161485f565b840191505092915050565b60006138b98261445e565b6138c38185614496565b93506138d381856020860161462a565b80840191505092915050565b60006138ec601883614485565b91506138f78261487d565b602082019050919050565b600061390f603283614485565b915061391a826148a6565b604082019050919050565b6000613932602683614485565b915061393d826148f5565b604082019050919050565b6000613955602483614485565b915061396082614944565b604082019050919050565b6000613978601983614485565b915061398382614993565b602082019050919050565b600061399b602e83614485565b91506139a6826149bc565b604082019050919050565b60006139be601a83614485565b91506139c982614a0b565b602082019050919050565b60006139e1602283614485565b91506139ec82614a34565b604082019050919050565b6000613a04602c83614485565b9150613a0f82614a83565b604082019050919050565b6000613a27604983614485565b9150613a3282614ad2565b606082019050919050565b6000613a4a603883614485565b9150613a5582614b47565b604082019050919050565b6000613a6d602a83614485565b9150613a7882614b96565b604082019050919050565b6000613a90602983614485565b9150613a9b82614be5565b604082019050919050565b6000613ab3602b83614485565b9150613abe82614c34565b604082019050919050565b6000613ad6602083614485565b9150613ae182614c83565b602082019050919050565b6000613af9602c83614485565b9150613b0482614cac565b604082019050919050565b6000613b1c600583614496565b9150613b2782614cfb565b600582019050919050565b6000613b3f602083614485565b9150613b4a82614d24565b602082019050919050565b6000613b62603483614485565b9150613b6d82614d4d565b604082019050919050565b6000613b85602a83614485565b9150613b9082614d9c565b604082019050919050565b6000613ba8602983614485565b9150613bb382614deb565b604082019050919050565b6000613bcb602f83614485565b9150613bd682614e3a565b604082019050919050565b6000613bee601983614485565b9150613bf982614e89565b602082019050919050565b6000613c11602183614485565b9150613c1c82614eb2565b604082019050919050565b6000613c3460008361447a565b9150613c3f82614f01565b600082019050919050565b6000613c57603183614485565b9150613c6282614f04565b604082019050919050565b6000613c7a601e83614485565b9150613c8582614f53565b602082019050919050565b6000613c9d602683614485565b9150613ca882614f7c565b604082019050919050565b613cbc816145c2565b82525050565b613cd3613cce826145c2565b614709565b82525050565b613ce2816145f0565b82525050565b613cf9613cf4826145f0565b61471b565b82525050565b613d08816145fa565b82525050565b6000613d1b8284866136e7565b91508190509392505050565b6000613d338284613745565b915081905092915050565b6000613d4a82846137f6565b915081905092915050565b6000613d6182856138ae565b9150613d6d82846138ae565b9150613d7882613b0f565b91508190509392505050565b6000613d8f82613c27565b9150819050919050565b6000613da58285613cc2565b600282019150613db58284613ce8565b6020820191508190509392505050565b6000602082019050613dda600083018461368d565b92915050565b6000608082019050613df5600083018761368d565b613e02602083018661368d565b613e0f6040830185613cd9565b8181036060830152613e21818461370c565b905095945050505050565b6000604082019050613e41600083018561368d565b613e4e6020830184613cd9565b9392505050565b6000602082019050613e6a600083018461369c565b92915050565b60006020820190508181036000830152613e8a818461370c565b905092915050565b60006020820190508181036000830152613eac8184613875565b905092915050565b60006020820190508181036000830152613ecd816138df565b9050919050565b60006020820190508181036000830152613eed81613902565b9050919050565b60006020820190508181036000830152613f0d81613925565b9050919050565b60006020820190508181036000830152613f2d81613948565b9050919050565b60006020820190508181036000830152613f4d8161396b565b9050919050565b60006020820190508181036000830152613f6d8161398e565b9050919050565b60006020820190508181036000830152613f8d816139b1565b9050919050565b60006020820190508181036000830152613fad816139d4565b9050919050565b60006020820190508181036000830152613fcd816139f7565b9050919050565b60006020820190508181036000830152613fed81613a1a565b9050919050565b6000602082019050818103600083015261400d81613a3d565b9050919050565b6000602082019050818103600083015261402d81613a60565b9050919050565b6000602082019050818103600083015261404d81613a83565b9050919050565b6000602082019050818103600083015261406d81613aa6565b9050919050565b6000602082019050818103600083015261408d81613ac9565b9050919050565b600060208201905081810360008301526140ad81613aec565b9050919050565b600060208201905081810360008301526140cd81613b32565b9050919050565b600060208201905081810360008301526140ed81613b55565b9050919050565b6000602082019050818103600083015261410d81613b78565b9050919050565b6000602082019050818103600083015261412d81613b9b565b9050919050565b6000602082019050818103600083015261414d81613bbe565b9050919050565b6000602082019050818103600083015261416d81613be1565b9050919050565b6000602082019050818103600083015261418d81613c04565b9050919050565b600060208201905081810360008301526141ad81613c4a565b9050919050565b600060208201905081810360008301526141cd81613c6d565b9050919050565b600060208201905081810360008301526141ed81613c90565b9050919050565b600060a0820190506142096000830188613cb3565b614216602083018761368d565b8181036040830152614228818661370c565b9050614237606083018561369c565b8181036080830152614249818461370c565b90509695505050505050565b600060808201905061426a6000830188613cb3565b818103602083015261427c818761370c565b905061428b6040830186613cff565b818103606083015261429e8184866136ba565b90509695505050505050565b60006080820190506142bf6000830187613cb3565b81810360208301526142d1818661370c565b90506142e06040830185613cff565b81810360608301526142f2818461370c565b905095945050505050565b600060c0820190506143126000830189613cb3565b81810360208301526143248188613776565b90508181036040830152614338818761370c565b9050614347606083018661367e565b614354608083018561368d565b81810360a0830152614366818461370c565b9050979650505050505050565b60006020820190506143886000830184613cd9565b92915050565b60006040820190506143a36000830185613cd9565b6143b060208301846136ab565b9392505050565b60006143c16143d2565b90506143cd828261468f565b919050565b6000604051905090565b600067ffffffffffffffff8211156143f7576143f6614812565b5b6144008261485f565b9050602081019050919050565b600067ffffffffffffffff82111561442857614427614812565b5b6144318261485f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006144ac826145f0565b91506144b7836145f0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ec576144eb614756565b5b828201905092915050565b6000614502826145f0565b915061450d836145f0565b92508261451d5761451c614785565b5b828204905092915050565b6000614533826145f0565b915061453e836145f0565b92508282101561455157614550614756565b5b828203905092915050565b6000614567826145d0565b9050919050565b6000614579826145d0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561464857808201518184015260208101905061462d565b83811115614657576000848401525b50505050565b6000600282049050600182168061467557607f821691505b60208210811415614689576146886147b4565b5b50919050565b6146988261485f565b810181811067ffffffffffffffff821117156146b7576146b6614812565b5b80604052505050565b60006146cb826145f0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146fe576146fd614756565b5b600182019050919050565b600061471482614870565b9050919050565b6000819050919050565b6000614730826145f0565b915061473b836145f0565b92508261474b5761474a614785565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f53616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f524149443a206d73672e76616c7565206e6f7420656e6f75676820746f20636f60008201527f766572206d6573736167654665652e2053656e642067617320666f72206d657360208201527f7361676520666565730000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f524149443a204d6178206d696e7420616d6f756e74207065722073657373696f60008201527f6e20657863656564656400000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f524149443a204d696e74206578636565647320737570706c7900000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f524149443a204661696c656420746f2077697468647261772045746865720000600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b614fd48161455c565b8114614fdf57600080fd5b50565b614feb8161456e565b8114614ff657600080fd5b50565b61500281614580565b811461500d57600080fd5b50565b61501981614596565b811461502457600080fd5b50565b615030816145c2565b811461503b57600080fd5b50565b615047816145f0565b811461505257600080fd5b50565b61505e816145fa565b811461506957600080fd5b50565b6150758161460e565b811461508057600080fd5b5056fea26469706673582212205bcee154723fb19dcea65ecc2d8be9fdb47dee1876f742b3de431d1e71c7afb364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d66556634485244465a4a71626865754e504b76764570593743366633667a6137585a544c4650745253504c362f00000000000000000000
-----Decoded View---------------
Arg [0] : baseURI_ (string): ipfs://QmfUf4HRDFZJqbheuNPKvvEpY7C6f3fza7XZTLFPtRSPL6/
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d66556634485244465a4a71626865754e504b7676457059
Arg [4] : 3743366633667a6137585a544c4650745253504c362f00000000000000000000
Deployed Bytecode Sourcemap
47869:3577:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44528:949;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31591:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48439:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32536:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34105:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33628:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45485:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34855:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50715:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35265:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50534:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48980:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47947:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32230:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48524:444;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31960:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12581:103;;;;;;;;;;;;;:::i;:::-;;44370:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50632:75;;;:::i;:::-;;11930:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44273:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;50899:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32705:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34398:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48013:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35521:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32880:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49407:1119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46317:758;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34624:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47083:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12839:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44528:949;44690:8;;;;;;;;;;;44668:31;;:10;:31;;;44660:40;;;;;;44811:19;:32;44831:11;44811:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;44789:11;:18;:61;:134;;;;;44890:19;:32;44910:11;44890:32;;;;;;;;;;;;;;;44880:43;;;;;;:::i;:::-;;;;;;;;44864:11;44854:22;;;;;;:69;44789:134;44781:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;45122:4;:16;;;45139:11;45152;45165:6;45173:8;45122:60;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45118:352;;45329:52;;;;;;;;45344:8;:15;45329:52;;;;45371:8;45361:19;;;;;;45329:52;;;45278:14;:27;45293:11;45278:27;;;;;;;;;;;;;;;45306:11;45278:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;45319:6;45278:48;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;;;;;45401:57;45415:11;45428;45441:6;45449:8;45401:57;;;;;;;;;:::i;:::-;;;;;;;;45118:352;;;;44528:949;;;;:::o;31591:305::-;31693:4;31745:25;31730:40;;;:11;:40;;;;:105;;;;31802:33;31787:48;;;:11;:48;;;;31730:105;:158;;;;31852:36;31876:11;31852:23;:36::i;:::-;31730:158;31710:178;;31591:305;;;:::o;48439:79::-;12161:12;:10;:12::i;:::-;12150:23;;:7;:5;:7::i;:::-;:23;;;12142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48504:6:::1;48495;;:15;;;;;;;;;;;;;;;;;;48439:79:::0;:::o;32536:100::-;32590:13;32623:5;32616:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32536:100;:::o;34105:221::-;34181:7;34209:16;34217:7;34209;:16::i;:::-;34201:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34294:15;:24;34310:7;34294:24;;;;;;;;;;;;;;;;;;;;;34287:31;;34105:221;;;:::o;33628:411::-;33709:13;33725:23;33740:7;33725:14;:23::i;:::-;33709:39;;33773:5;33767:11;;:2;:11;;;;33759:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33867:5;33851:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33876:37;33893:5;33900:12;:10;:12::i;:::-;33876:16;:37::i;:::-;33851:62;33829:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;34010:21;34019:2;34023:7;34010:8;:21::i;:::-;33698:341;33628:411;;:::o;45485:356::-;45676:4;45654:27;;:10;:27;;;45646:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;45778:55;45790:11;45803;45816:6;45824:8;45778:10;:55::i;:::-;45485:356;;;;:::o;34855:339::-;35050:41;35069:12;:10;:12::i;:::-;35083:7;35050:18;:41::i;:::-;35042:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35158:28;35168:4;35174:2;35178:7;35158:9;:28::i;:::-;34855:339;;;:::o;50715:176::-;12161:12;:10;:12::i;:::-;12150:23;;:7;:5;:7::i;:::-;:23;;;12142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50774:9:::1;50797:6;;;;;;;;;;;50789:20;;50817:3;50789:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50773:52;;;50844:4;50836:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;50762:129;50715:176:::0;:::o;35265:185::-;35403:39;35420:4;35426:2;35430:7;35403:39;;;;;;;;;;;;:16;:39::i;:::-;35265:185;;;:::o;50534:90::-;12161:12;:10;:12::i;:::-;12150:23;;:7;:5;:7::i;:::-;:23;;;12142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50613:3:::1;50603:7;:13;;;;;;;;;;;;:::i;:::-;;50534:90:::0;:::o;48980:421::-;49058:4;49075:20;49109:10;49121:7;49098:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49075:54;;49142:14;49159:1;49142:18;;49171:26;49217:7;49226:26;;49200:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49171:82;;49267:15;49288:8;;;;;;;;;;;:21;;;49310:8;49328:4;49335:7;49344:5;49351:13;49288:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49266:99;;;49383:10;49376:17;;;;;;48980:421;;;;:::o;47947:25::-;;;;;;;;;;;;;:::o;32230:239::-;32302:7;32322:13;32338:7;:16;32346:7;32338:16;;;;;;;;;;;;;;;;;;;;;32322:32;;32390:1;32373:19;;:5;:19;;;;32365:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32456:5;32449:12;;;32230:239;;;:::o;48524:444::-;48592:6;;;;;;;;;;;48591:7;48583:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;48659:9;;48646;:22;;;;48638:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;48762:12;;48749:9;48735:23;;:11;;:23;;;;:::i;:::-;:39;;48727:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48820:9;48832:1;48820:13;;48815:139;48840:9;48835:14;;:1;:14;48815:139;;48872:36;48882:10;48896:11;;48894:13;;;;;:::i;:::-;;;;;;;48872:9;:36::i;:::-;48941:1;48923:15;;:19;;;;;;;:::i;:::-;;;;;;;;48851:3;;;;;:::i;:::-;;;;48815:139;;;;48524:444;:::o;31960:208::-;32032:7;32077:1;32060:19;;:5;:19;;;;32052:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32144:9;:16;32154:5;32144:16;;;;;;;;;;;;;;;;32137:23;;31960:208;;;:::o;12581:103::-;12161:12;:10;:12::i;:::-;12150:23;;:7;:5;:7::i;:::-;:23;;;12142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12646:30:::1;12673:1;12646:18;:30::i;:::-;12581:103::o:0;44370:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50632:75::-;:::o;11930:87::-;11976:7;12003:6;;;;;;;;;;;11996:13;;11930:87;:::o;44273:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50899:125::-;12161:12;:10;:12::i;:::-;12150:23;;:7;:5;:7::i;:::-;:23;;;12142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51010:6:::1;50981:26;:35;;;;50899:125:::0;:::o;32705:104::-;32761:13;32794:7;32787:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32705:104;:::o;34398:155::-;34493:52;34512:12;:10;:12::i;:::-;34526:8;34536;34493:18;:52::i;:::-;34398:155;;:::o;48013:21::-;;;;;;;;;;;;;:::o;35521:328::-;35696:41;35715:12;:10;:12::i;:::-;35729:7;35696:18;:41::i;:::-;35688:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35802:39;35816:4;35822:2;35826:7;35835:5;35802:13;:39::i;:::-;35521:328;;;;:::o;32880:344::-;32953:13;32987:16;32995:7;32987;:16::i;:::-;32979:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33068:21;33092:10;:8;:10::i;:::-;33068:34;;33144:1;33126:7;33120:21;:25;:96;;;;;;;;;;;;;;;;;33172:7;33181:18;:7;:16;:18::i;:::-;33155:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33120:96;33113:103;;;32880:344;;;:::o;49407:1119::-;49510:16;49518:7;49510;:16::i;:::-;49496:30;;:10;:30;;;49488:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49623:1;49584:19;:29;49604:8;49584:29;;;;;;;;;;;;;;;:36;;;;;:::i;:::-;;;:40;49576:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;49688:14;49694:7;49688:5;:14::i;:::-;49715:20;49749:10;49761:7;49738:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49715:54;;49782:14;49799:1;49782:18;;49811:26;49857:7;49866:26;;49840:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49811:82;;49907:15;49928:8;;;;;;;;;;;:21;;;49950:8;49968:4;49975:7;49984:5;49991:13;49928:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49906:99;;;50047:10;50034:9;:23;;50026:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;50148:8;;;;;;;;;;;:13;;;50169:9;50194:8;50244:19;:29;50264:8;50244:29;;;;;;;;;;;;;;;50294:7;50351:10;50400:3;50442:13;50148:340;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50517:1;50499:15;;:19;;;;;;;:::i;:::-;;;;;;;;49477:1049;;;;49407:1119;;:::o;46317:758::-;46498:32;46533:14;:27;46548:11;46533:27;;;;;;;;;;;;;;;46561:11;46533:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;46574:6;46533:48;;;;;;;;;;;;;46498:83;;46633:1;46625:10;;46600:9;:21;;;:35;;46592:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46716:9;:23;;;46697:8;;:15;;:42;:90;;;;;46766:9;:21;;;46753:8;;46743:19;;;;;;;:::i;:::-;;;;;;;;:44;46697:90;46689:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;46892:1;46866:9;:23;;:27;;;;46936:1;46928:10;;46904:9;:21;;:34;;;;47007:4;:16;;;47024:11;47037;47050:6;47058:8;;47007:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46442:633;46317:758;;;;;:::o;34624:164::-;34721:4;34745:18;:25;34764:5;34745:25;;;;;;;;;;;;;;;:35;34771:8;34745:35;;;;;;;;;;;;;;;;;;;;;;;;;34738:42;;34624:164;;;;:::o;47083:158::-;12161:12;:10;:12::i;:::-;12150:23;;:7;:5;:7::i;:::-;:23;;;12142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47219:14:::1;;47187:19;:29;47207:8;47187:29;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;47083:158:::0;;;:::o;12839:201::-;12161:12;:10;:12::i;:::-;12150:23;;:7;:5;:7::i;:::-;:23;;;12142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12948:1:::1;12928:22;;:8;:22;;;;12920:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13004:28;13023:8;13004:18;:28::i;:::-;12839:201:::0;:::o;24362:157::-;24447:4;24486:25;24471:40;;;:11;:40;;;;24464:47;;24362:157;;;:::o;10654:98::-;10707:7;10734:10;10727:17;;10654:98;:::o;37359:127::-;37424:4;37476:1;37448:30;;:7;:16;37456:7;37448:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37441:37;;37359:127;;;:::o;41272:174::-;41374:2;41347:15;:24;41363:7;41347:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41430:7;41426:2;41392:46;;41401:23;41416:7;41401:14;:23::i;:::-;41392:46;;;;;;;;;;;;41272:174;;:::o;51034:299::-;51187:14;51203:12;51230:8;51219:37;;;;;;;;;;;;:::i;:::-;51186:70;;;;51269:26;51279:6;51287:7;51269:9;:26::i;:::-;51324:1;51306:15;;:19;;;;;;;:::i;:::-;;;;;;;;51156:177;;51034:299;;;;:::o;37653:348::-;37746:4;37771:16;37779:7;37771;:16::i;:::-;37763:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37847:13;37863:23;37878:7;37863:14;:23::i;:::-;37847:39;;37916:5;37905:16;;:7;:16;;;:51;;;;37949:7;37925:31;;:20;37937:7;37925:11;:20::i;:::-;:31;;;37905:51;:87;;;;37960:32;37977:5;37984:7;37960:16;:32::i;:::-;37905:87;37897:96;;;37653:348;;;;:::o;40576:578::-;40735:4;40708:31;;:23;40723:7;40708:14;:23::i;:::-;:31;;;40700:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40818:1;40804:16;;:2;:16;;;;40796:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40874:39;40895:4;40901:2;40905:7;40874:20;:39::i;:::-;40978:29;40995:1;40999:7;40978:8;:29::i;:::-;41039:1;41020:9;:15;41030:4;41020:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41068:1;41051:9;:13;41061:2;41051:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41099:2;41080:7;:16;41088:7;41080:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41138:7;41134:2;41119:27;;41128:4;41119:27;;;;;;;;;;;;40576:578;;;:::o;38343:110::-;38419:26;38429:2;38433:7;38419:26;;;;;;;;;;;;:9;:26::i;:::-;38343:110;;:::o;13200:191::-;13274:16;13293:6;;;;;;;;;;;13274:25;;13319:8;13310:6;;:17;;;;;;;;;;;;;;;;;;13374:8;13343:40;;13364:8;13343:40;;;;;;;;;;;;13263:128;13200:191;:::o;41588:315::-;41743:8;41734:17;;:5;:17;;;;41726:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41830:8;41792:18;:25;41811:5;41792:25;;;;;;;;;;;;;;;:35;41818:8;41792:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41876:8;41854:41;;41869:5;41854:41;;;41886:8;41854:41;;;;;;:::i;:::-;;;;;;;;41588:315;;;:::o;36731:::-;36888:28;36898:4;36904:2;36908:7;36888:9;:28::i;:::-;36935:48;36958:4;36964:2;36968:7;36977:5;36935:22;:48::i;:::-;36927:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36731:315;;;;:::o;51343:100::-;51395:13;51428:7;51421:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51343:100;:::o;8216:723::-;8272:13;8502:1;8493:5;:10;8489:53;;;8520:10;;;;;;;;;;;;;;;;;;;;;8489:53;8552:12;8567:5;8552:20;;8583:14;8608:78;8623:1;8615:4;:9;8608:78;;8641:8;;;;;:::i;:::-;;;;8672:2;8664:10;;;;;:::i;:::-;;;8608:78;;;8696:19;8728:6;8718:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8696:39;;8746:154;8762:1;8753:5;:10;8746:154;;8790:1;8780:11;;;;;:::i;:::-;;;8857:2;8849:5;:10;;;;:::i;:::-;8836:2;:24;;;;:::i;:::-;8823:39;;8806:6;8813;8806:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8886:2;8877:11;;;;;:::i;:::-;;;8746:154;;;8924:6;8910:21;;;;;8216:723;;;;:::o;39879:360::-;39939:13;39955:23;39970:7;39955:14;:23::i;:::-;39939:39;;39991:48;40012:5;40027:1;40031:7;39991:20;:48::i;:::-;40080:29;40097:1;40101:7;40080:8;:29::i;:::-;40142:1;40122:9;:16;40132:5;40122:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;40161:7;:16;40169:7;40161:16;;;;;;;;;;;;40154:23;;;;;;;;;;;40223:7;40219:1;40195:36;;40204:5;40195:36;;;;;;;;;;;;39928:311;39879:360;:::o;43839:126::-;;;;:::o;38680:321::-;38810:18;38816:2;38820:7;38810:5;:18::i;:::-;38861:54;38892:1;38896:2;38900:7;38909:5;38861:22;:54::i;:::-;38839:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38680:321;;;:::o;42468:799::-;42623:4;42644:15;:2;:13;;;:15::i;:::-;42640:620;;;42696:2;42680:36;;;42717:12;:10;:12::i;:::-;42731:4;42737:7;42746:5;42680:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42676:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42939:1;42922:6;:13;:18;42918:272;;;42965:60;;;;;;;;;;:::i;:::-;;;;;;;;42918:272;43140:6;43134:13;43125:6;43121:2;43117:15;43110:38;42676:529;42813:41;;;42803:51;;;:6;:51;;;;42796:58;;;;;42640:620;43244:4;43237:11;;42468:799;;;;;;;:::o;39337:313::-;39431:1;39417:16;;:2;:16;;;;39409:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39483:45;39512:1;39516:2;39520:7;39483:20;:45::i;:::-;39558:1;39541:9;:13;39551:2;39541:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39589:2;39570:7;:16;39578:7;39570:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39634:7;39630:2;39609:33;;39626:1;39609:33;;;;;;;;;;;;39337:313;;:::o;14218:387::-;14278:4;14486:12;14553:7;14541:20;14533:28;;14596:1;14589:4;:8;14582:15;;;14218:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:159::-;1051:5;1082:6;1076:13;1067:22;;1098:41;1133:5;1098:41;:::i;:::-;986:159;;;;:::o;1151:133::-;1194:5;1232:6;1219:20;1210:29;;1248:30;1272:5;1248:30;:::i;:::-;1151:133;;;;:::o;1290:137::-;1335:5;1373:6;1360:20;1351:29;;1389:32;1415:5;1389:32;:::i;:::-;1290:137;;;;:::o;1433:141::-;1489:5;1520:6;1514:13;1505:22;;1536:32;1562:5;1536:32;:::i;:::-;1433:141;;;;:::o;1593:552::-;1650:8;1660:6;1710:3;1703:4;1695:6;1691:17;1687:27;1677:122;;1718:79;;:::i;:::-;1677:122;1831:6;1818:20;1808:30;;1861:18;1853:6;1850:30;1847:117;;;1883:79;;:::i;:::-;1847:117;1997:4;1989:6;1985:17;1973:29;;2051:3;2043:4;2035:6;2031:17;2021:8;2017:32;2014:41;2011:128;;;2058:79;;:::i;:::-;2011:128;1593:552;;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:137::-;2913:5;2951:6;2938:20;2929:29;;2967:32;2993:5;2967:32;:::i;:::-;2868:137;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:143::-;3213:5;3244:6;3238:13;3229:22;;3260:33;3287:5;3260:33;:::i;:::-;3156:143;;;;:::o;3305:137::-;3350:5;3388:6;3375:20;3366:29;;3404:32;3430:5;3404:32;:::i;:::-;3305:137;;;;:::o;3448:135::-;3492:5;3530:6;3517:20;3508:29;;3546:31;3571:5;3546:31;:::i;:::-;3448:135;;;;:::o;3589:329::-;3648:6;3697:2;3685:9;3676:7;3672:23;3668:32;3665:119;;;3703:79;;:::i;:::-;3665:119;3823:1;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3794:117;3589:329;;;;:::o;3924:523::-;4011:6;4019;4068:2;4056:9;4047:7;4043:23;4039:32;4036:119;;;4074:79;;:::i;:::-;4036:119;4194:1;4219:72;4283:7;4274:6;4263:9;4259:22;4219:72;:::i;:::-;4209:82;;4165:136;4340:2;4366:64;4422:7;4413:6;4402:9;4398:22;4366:64;:::i;:::-;4356:74;;4311:129;3924:523;;;;;:::o;4453:474::-;4521:6;4529;4578:2;4566:9;4557:7;4553:23;4549:32;4546:119;;;4584:79;;:::i;:::-;4546:119;4704:1;4729:53;4774:7;4765:6;4754:9;4750:22;4729:53;:::i;:::-;4719:63;;4675:117;4831:2;4857:53;4902:7;4893:6;4882:9;4878:22;4857:53;:::i;:::-;4847:63;;4802:118;4453:474;;;;;:::o;4933:619::-;5010:6;5018;5026;5075:2;5063:9;5054:7;5050:23;5046:32;5043:119;;;5081:79;;:::i;:::-;5043:119;5201:1;5226:53;5271:7;5262:6;5251:9;5247:22;5226:53;:::i;:::-;5216:63;;5172:117;5328:2;5354:53;5399:7;5390:6;5379:9;5375:22;5354:53;:::i;:::-;5344:63;;5299:118;5456:2;5482:53;5527:7;5518:6;5507:9;5503:22;5482:53;:::i;:::-;5472:63;;5427:118;4933:619;;;;;:::o;5558:943::-;5653:6;5661;5669;5677;5726:3;5714:9;5705:7;5701:23;5697:33;5694:120;;;5733:79;;:::i;:::-;5694:120;5853:1;5878:53;5923:7;5914:6;5903:9;5899:22;5878:53;:::i;:::-;5868:63;;5824:117;5980:2;6006:53;6051:7;6042:6;6031:9;6027:22;6006:53;:::i;:::-;5996:63;;5951:118;6108:2;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6079:118;6264:2;6253:9;6249:18;6236:32;6295:18;6287:6;6284:30;6281:117;;;6317:79;;:::i;:::-;6281:117;6422:62;6476:7;6467:6;6456:9;6452:22;6422:62;:::i;:::-;6412:72;;6207:287;5558:943;;;;;;;:::o;6507:468::-;6572:6;6580;6629:2;6617:9;6608:7;6604:23;6600:32;6597:119;;;6635:79;;:::i;:::-;6597:119;6755:1;6780:53;6825:7;6816:6;6805:9;6801:22;6780:53;:::i;:::-;6770:63;;6726:117;6882:2;6908:50;6950:7;6941:6;6930:9;6926:22;6908:50;:::i;:::-;6898:60;;6853:115;6507:468;;;;;:::o;6981:474::-;7049:6;7057;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;7359:2;7385:53;7430:7;7421:6;7410:9;7406:22;7385:53;:::i;:::-;7375:63;;7330:118;6981:474;;;;;:::o;7461:323::-;7517:6;7566:2;7554:9;7545:7;7541:23;7537:32;7534:119;;;7572:79;;:::i;:::-;7534:119;7692:1;7717:50;7759:7;7750:6;7739:9;7735:22;7717:50;:::i;:::-;7707:60;;7663:114;7461:323;;;;:::o;7790:327::-;7848:6;7897:2;7885:9;7876:7;7872:23;7868:32;7865:119;;;7903:79;;:::i;:::-;7865:119;8023:1;8048:52;8092:7;8083:6;8072:9;8068:22;8048:52;:::i;:::-;8038:62;;7994:116;7790:327;;;;:::o;8123:349::-;8192:6;8241:2;8229:9;8220:7;8216:23;8212:32;8209:119;;;8247:79;;:::i;:::-;8209:119;8367:1;8392:63;8447:7;8438:6;8427:9;8423:22;8392:63;:::i;:::-;8382:73;;8338:127;8123:349;;;;:::o;8478:509::-;8547:6;8596:2;8584:9;8575:7;8571:23;8567:32;8564:119;;;8602:79;;:::i;:::-;8564:119;8750:1;8739:9;8735:17;8722:31;8780:18;8772:6;8769:30;8766:117;;;8802:79;;:::i;:::-;8766:117;8907:63;8962:7;8953:6;8942:9;8938:22;8907:63;:::i;:::-;8897:73;;8693:287;8478:509;;;;:::o;8993:327::-;9051:6;9100:2;9088:9;9079:7;9075:23;9071:32;9068:119;;;9106:79;;:::i;:::-;9068:119;9226:1;9251:52;9295:7;9286:6;9275:9;9271:22;9251:52;:::i;:::-;9241:62;;9197:116;8993:327;;;;:::o;9326:670::-;9404:6;9412;9420;9469:2;9457:9;9448:7;9444:23;9440:32;9437:119;;;9475:79;;:::i;:::-;9437:119;9595:1;9620:52;9664:7;9655:6;9644:9;9640:22;9620:52;:::i;:::-;9610:62;;9566:116;9749:2;9738:9;9734:18;9721:32;9780:18;9772:6;9769:30;9766:117;;;9802:79;;:::i;:::-;9766:117;9915:64;9971:7;9962:6;9951:9;9947:22;9915:64;:::i;:::-;9897:82;;;;9692:297;9326:670;;;;;:::o;10002:795::-;10087:6;10095;10103;10152:2;10140:9;10131:7;10127:23;10123:32;10120:119;;;10158:79;;:::i;:::-;10120:119;10278:1;10303:52;10347:7;10338:6;10327:9;10323:22;10303:52;:::i;:::-;10293:62;;10249:116;10432:2;10421:9;10417:18;10404:32;10463:18;10455:6;10452:30;10449:117;;;10485:79;;:::i;:::-;10449:117;10590:62;10644:7;10635:6;10624:9;10620:22;10590:62;:::i;:::-;10580:72;;10375:287;10701:2;10727:53;10772:7;10763:6;10752:9;10748:22;10727:53;:::i;:::-;10717:63;;10672:118;10002:795;;;;;:::o;10803:1137::-;10907:6;10915;10923;10931;10939;10988:3;10976:9;10967:7;10963:23;10959:33;10956:120;;;10995:79;;:::i;:::-;10956:120;11115:1;11140:52;11184:7;11175:6;11164:9;11160:22;11140:52;:::i;:::-;11130:62;;11086:116;11269:2;11258:9;11254:18;11241:32;11300:18;11292:6;11289:30;11286:117;;;11322:79;;:::i;:::-;11286:117;11427:62;11481:7;11472:6;11461:9;11457:22;11427:62;:::i;:::-;11417:72;;11212:287;11538:2;11564:52;11608:7;11599:6;11588:9;11584:22;11564:52;:::i;:::-;11554:62;;11509:117;11693:2;11682:9;11678:18;11665:32;11724:18;11716:6;11713:30;11710:117;;;11746:79;;:::i;:::-;11710:117;11859:64;11915:7;11906:6;11895:9;11891:22;11859:64;:::i;:::-;11841:82;;;;11636:297;10803:1137;;;;;;;;:::o;11946:1117::-;12048:6;12056;12064;12072;12121:3;12109:9;12100:7;12096:23;12092:33;12089:120;;;12128:79;;:::i;:::-;12089:120;12248:1;12273:52;12317:7;12308:6;12297:9;12293:22;12273:52;:::i;:::-;12263:62;;12219:116;12402:2;12391:9;12387:18;12374:32;12433:18;12425:6;12422:30;12419:117;;;12455:79;;:::i;:::-;12419:117;12560:62;12614:7;12605:6;12594:9;12590:22;12560:62;:::i;:::-;12550:72;;12345:287;12671:2;12697:52;12741:7;12732:6;12721:9;12717:22;12697:52;:::i;:::-;12687:62;;12642:117;12826:2;12815:9;12811:18;12798:32;12857:18;12849:6;12846:30;12843:117;;;12879:79;;:::i;:::-;12843:117;12984:62;13038:7;13029:6;13018:9;13014:22;12984:62;:::i;:::-;12974:72;;12769:287;11946:1117;;;;;;;:::o;13069:472::-;13136:6;13144;13193:2;13181:9;13172:7;13168:23;13164:32;13161:119;;;13199:79;;:::i;:::-;13161:119;13319:1;13344:52;13388:7;13379:6;13368:9;13364:22;13344:52;:::i;:::-;13334:62;;13290:116;13445:2;13471:53;13516:7;13507:6;13496:9;13492:22;13471:53;:::i;:::-;13461:63;;13416:118;13069:472;;;;;:::o;13547:329::-;13606:6;13655:2;13643:9;13634:7;13630:23;13626:32;13623:119;;;13661:79;;:::i;:::-;13623:119;13781:1;13806:53;13851:7;13842:6;13831:9;13827:22;13806:53;:::i;:::-;13796:63;;13752:117;13547:329;;;;:::o;13882:507::-;13961:6;13969;14018:2;14006:9;13997:7;13993:23;13989:32;13986:119;;;14024:79;;:::i;:::-;13986:119;14144:1;14169:64;14225:7;14216:6;14205:9;14201:22;14169:64;:::i;:::-;14159:74;;14115:128;14282:2;14308:64;14364:7;14355:6;14344:9;14340:22;14308:64;:::i;:::-;14298:74;;14253:129;13882:507;;;;;:::o;14395:325::-;14452:6;14501:2;14489:9;14480:7;14476:23;14472:32;14469:119;;;14507:79;;:::i;:::-;14469:119;14627:1;14652:51;14695:7;14686:6;14675:9;14671:22;14652:51;:::i;:::-;14642:61;;14598:115;14395:325;;;;:::o;14726:142::-;14829:32;14855:5;14829:32;:::i;:::-;14824:3;14817:45;14726:142;;:::o;14874:118::-;14961:24;14979:5;14961:24;:::i;:::-;14956:3;14949:37;14874:118;;:::o;14998:109::-;15079:21;15094:5;15079:21;:::i;:::-;15074:3;15067:34;14998:109;;:::o;15113:118::-;15200:24;15218:5;15200:24;:::i;:::-;15195:3;15188:37;15113:118;;:::o;15259:301::-;15355:3;15376:70;15439:6;15434:3;15376:70;:::i;:::-;15369:77;;15456:43;15492:6;15487:3;15480:5;15456:43;:::i;:::-;15524:29;15546:6;15524:29;:::i;:::-;15519:3;15515:39;15508:46;;15259:301;;;;;:::o;15588:314::-;15702:3;15723:88;15804:6;15799:3;15723:88;:::i;:::-;15716:95;;15821:43;15857:6;15852:3;15845:5;15821:43;:::i;:::-;15889:6;15884:3;15880:16;15873:23;;15588:314;;;;;:::o;15908:360::-;15994:3;16022:38;16054:5;16022:38;:::i;:::-;16076:70;16139:6;16134:3;16076:70;:::i;:::-;16069:77;;16155:52;16200:6;16195:3;16188:4;16181:5;16177:16;16155:52;:::i;:::-;16232:29;16254:6;16232:29;:::i;:::-;16227:3;16223:39;16216:46;;15998:270;15908:360;;;;:::o;16274:373::-;16378:3;16406:38;16438:5;16406:38;:::i;:::-;16460:88;16541:6;16536:3;16460:88;:::i;:::-;16453:95;;16557:52;16602:6;16597:3;16590:4;16583:5;16579:16;16557:52;:::i;:::-;16634:6;16629:3;16625:16;16618:23;;16382:265;16274:373;;;;:::o;16675:798::-;16758:3;16795:5;16789:12;16824:36;16850:9;16824:36;:::i;:::-;16876:70;16939:6;16934:3;16876:70;:::i;:::-;16869:77;;16977:1;16966:9;16962:17;16993:1;16988:135;;;;17137:1;17132:335;;;;16955:512;;16988:135;17072:4;17068:9;17057;17053:25;17048:3;17041:38;17108:4;17103:3;17099:14;17092:21;;16988:135;;17132:335;17199:37;17230:5;17199:37;:::i;:::-;17258:1;17272:154;17286:6;17283:1;17280:13;17272:154;;;17360:7;17354:14;17350:1;17345:3;17341:11;17334:35;17410:1;17401:7;17397:15;17386:26;;17308:4;17305:1;17301:12;17296:17;;17272:154;;;17455:1;17450:3;17446:11;17439:18;;17139:328;;16955:512;;16762:711;;16675:798;;;;:::o;17501:841::-;17602:3;17639:5;17633:12;17668:36;17694:9;17668:36;:::i;:::-;17720:88;17801:6;17796:3;17720:88;:::i;:::-;17713:95;;17839:1;17828:9;17824:17;17855:1;17850:137;;;;18001:1;17996:340;;;;17817:519;;17850:137;17934:4;17930:9;17919;17915:25;17910:3;17903:38;17970:6;17965:3;17961:16;17954:23;;17850:137;;17996:340;18063:37;18094:5;18063:37;:::i;:::-;18122:1;18136:154;18150:6;18147:1;18144:13;18136:154;;;18224:7;18218:14;18214:1;18209:3;18205:11;18198:35;18274:1;18265:7;18261:15;18250:26;;18172:4;18169:1;18165:12;18160:17;;18136:154;;;18319:6;18314:3;18310:16;18303:23;;18003:333;;17817:519;;17606:736;;17501:841;;;;:::o;18348:364::-;18436:3;18464:39;18497:5;18464:39;:::i;:::-;18519:71;18583:6;18578:3;18519:71;:::i;:::-;18512:78;;18599:52;18644:6;18639:3;18632:4;18625:5;18621:16;18599:52;:::i;:::-;18676:29;18698:6;18676:29;:::i;:::-;18671:3;18667:39;18660:46;;18440:272;18348:364;;;;:::o;18718:377::-;18824:3;18852:39;18885:5;18852:39;:::i;:::-;18907:89;18989:6;18984:3;18907:89;:::i;:::-;18900:96;;19005:52;19050:6;19045:3;19038:4;19031:5;19027:16;19005:52;:::i;:::-;19082:6;19077:3;19073:16;19066:23;;18828:267;18718:377;;;;:::o;19101:366::-;19243:3;19264:67;19328:2;19323:3;19264:67;:::i;:::-;19257:74;;19340:93;19429:3;19340:93;:::i;:::-;19458:2;19453:3;19449:12;19442:19;;19101:366;;;:::o;19473:::-;19615:3;19636:67;19700:2;19695:3;19636:67;:::i;:::-;19629:74;;19712:93;19801:3;19712:93;:::i;:::-;19830:2;19825:3;19821:12;19814:19;;19473:366;;;:::o;19845:::-;19987:3;20008:67;20072:2;20067:3;20008:67;:::i;:::-;20001:74;;20084:93;20173:3;20084:93;:::i;:::-;20202:2;20197:3;20193:12;20186:19;;19845:366;;;:::o;20217:::-;20359:3;20380:67;20444:2;20439:3;20380:67;:::i;:::-;20373:74;;20456:93;20545:3;20456:93;:::i;:::-;20574:2;20569:3;20565:12;20558:19;;20217:366;;;:::o;20589:::-;20731:3;20752:67;20816:2;20811:3;20752:67;:::i;:::-;20745:74;;20828:93;20917:3;20828:93;:::i;:::-;20946:2;20941:3;20937:12;20930:19;;20589:366;;;:::o;20961:::-;21103:3;21124:67;21188:2;21183:3;21124:67;:::i;:::-;21117:74;;21200:93;21289:3;21200:93;:::i;:::-;21318:2;21313:3;21309:12;21302:19;;20961:366;;;:::o;21333:::-;21475:3;21496:67;21560:2;21555:3;21496:67;:::i;:::-;21489:74;;21572:93;21661:3;21572:93;:::i;:::-;21690:2;21685:3;21681:12;21674:19;;21333:366;;;:::o;21705:::-;21847:3;21868:67;21932:2;21927:3;21868:67;:::i;:::-;21861:74;;21944:93;22033:3;21944:93;:::i;:::-;22062:2;22057:3;22053:12;22046:19;;21705:366;;;:::o;22077:::-;22219:3;22240:67;22304:2;22299:3;22240:67;:::i;:::-;22233:74;;22316:93;22405:3;22316:93;:::i;:::-;22434:2;22429:3;22425:12;22418:19;;22077:366;;;:::o;22449:::-;22591:3;22612:67;22676:2;22671:3;22612:67;:::i;:::-;22605:74;;22688:93;22777:3;22688:93;:::i;:::-;22806:2;22801:3;22797:12;22790:19;;22449:366;;;:::o;22821:::-;22963:3;22984:67;23048:2;23043:3;22984:67;:::i;:::-;22977:74;;23060:93;23149:3;23060:93;:::i;:::-;23178:2;23173:3;23169:12;23162:19;;22821:366;;;:::o;23193:::-;23335:3;23356:67;23420:2;23415:3;23356:67;:::i;:::-;23349:74;;23432:93;23521:3;23432:93;:::i;:::-;23550:2;23545:3;23541:12;23534:19;;23193:366;;;:::o;23565:::-;23707:3;23728:67;23792:2;23787:3;23728:67;:::i;:::-;23721:74;;23804:93;23893:3;23804:93;:::i;:::-;23922:2;23917:3;23913:12;23906:19;;23565:366;;;:::o;23937:::-;24079:3;24100:67;24164:2;24159:3;24100:67;:::i;:::-;24093:74;;24176:93;24265:3;24176:93;:::i;:::-;24294:2;24289:3;24285:12;24278:19;;23937:366;;;:::o;24309:::-;24451:3;24472:67;24536:2;24531:3;24472:67;:::i;:::-;24465:74;;24548:93;24637:3;24548:93;:::i;:::-;24666:2;24661:3;24657:12;24650:19;;24309:366;;;:::o;24681:::-;24823:3;24844:67;24908:2;24903:3;24844:67;:::i;:::-;24837:74;;24920:93;25009:3;24920:93;:::i;:::-;25038:2;25033:3;25029:12;25022:19;;24681:366;;;:::o;25053:400::-;25213:3;25234:84;25316:1;25311:3;25234:84;:::i;:::-;25227:91;;25327:93;25416:3;25327:93;:::i;:::-;25445:1;25440:3;25436:11;25429:18;;25053:400;;;:::o;25459:366::-;25601:3;25622:67;25686:2;25681:3;25622:67;:::i;:::-;25615:74;;25698:93;25787:3;25698:93;:::i;:::-;25816:2;25811:3;25807:12;25800:19;;25459:366;;;:::o;25831:::-;25973:3;25994:67;26058:2;26053:3;25994:67;:::i;:::-;25987:74;;26070:93;26159:3;26070:93;:::i;:::-;26188:2;26183:3;26179:12;26172:19;;25831:366;;;:::o;26203:::-;26345:3;26366:67;26430:2;26425:3;26366:67;:::i;:::-;26359:74;;26442:93;26531:3;26442:93;:::i;:::-;26560:2;26555:3;26551:12;26544:19;;26203:366;;;:::o;26575:::-;26717:3;26738:67;26802:2;26797:3;26738:67;:::i;:::-;26731:74;;26814:93;26903:3;26814:93;:::i;:::-;26932:2;26927:3;26923:12;26916:19;;26575:366;;;:::o;26947:::-;27089:3;27110:67;27174:2;27169:3;27110:67;:::i;:::-;27103:74;;27186:93;27275:3;27186:93;:::i;:::-;27304:2;27299:3;27295:12;27288:19;;26947:366;;;:::o;27319:::-;27461:3;27482:67;27546:2;27541:3;27482:67;:::i;:::-;27475:74;;27558:93;27647:3;27558:93;:::i;:::-;27676:2;27671:3;27667:12;27660:19;;27319:366;;;:::o;27691:::-;27833:3;27854:67;27918:2;27913:3;27854:67;:::i;:::-;27847:74;;27930:93;28019:3;27930:93;:::i;:::-;28048:2;28043:3;28039:12;28032:19;;27691:366;;;:::o;28063:398::-;28222:3;28243:83;28324:1;28319:3;28243:83;:::i;:::-;28236:90;;28335:93;28424:3;28335:93;:::i;:::-;28453:1;28448:3;28444:11;28437:18;;28063:398;;;:::o;28467:366::-;28609:3;28630:67;28694:2;28689:3;28630:67;:::i;:::-;28623:74;;28706:93;28795:3;28706:93;:::i;:::-;28824:2;28819:3;28815:12;28808:19;;28467:366;;;:::o;28839:::-;28981:3;29002:67;29066:2;29061:3;29002:67;:::i;:::-;28995:74;;29078:93;29167:3;29078:93;:::i;:::-;29196:2;29191:3;29187:12;29180:19;;28839:366;;;:::o;29211:::-;29353:3;29374:67;29438:2;29433:3;29374:67;:::i;:::-;29367:74;;29450:93;29539:3;29450:93;:::i;:::-;29568:2;29563:3;29559:12;29552:19;;29211:366;;;:::o;29583:115::-;29668:23;29685:5;29668:23;:::i;:::-;29663:3;29656:36;29583:115;;:::o;29704:153::-;29807:43;29826:23;29843:5;29826:23;:::i;:::-;29807:43;:::i;:::-;29802:3;29795:56;29704:153;;:::o;29863:118::-;29950:24;29968:5;29950:24;:::i;:::-;29945:3;29938:37;29863:118;;:::o;29987:157::-;30092:45;30112:24;30130:5;30112:24;:::i;:::-;30092:45;:::i;:::-;30087:3;30080:58;29987:157;;:::o;30150:115::-;30235:23;30252:5;30235:23;:::i;:::-;30230:3;30223:36;30150:115;;:::o;30271:291::-;30411:3;30433:103;30532:3;30523:6;30515;30433:103;:::i;:::-;30426:110;;30553:3;30546:10;;30271:291;;;;;:::o;30568:271::-;30698:3;30720:93;30809:3;30800:6;30720:93;:::i;:::-;30713:100;;30830:3;30823:10;;30568:271;;;;:::o;30845:265::-;30972:3;30994:90;31080:3;31071:6;30994:90;:::i;:::-;30987:97;;31101:3;31094:10;;30845:265;;;;:::o;31116:701::-;31397:3;31419:95;31510:3;31501:6;31419:95;:::i;:::-;31412:102;;31531:95;31622:3;31613:6;31531:95;:::i;:::-;31524:102;;31643:148;31787:3;31643:148;:::i;:::-;31636:155;;31808:3;31801:10;;31116:701;;;;;:::o;31823:379::-;32007:3;32029:147;32172:3;32029:147;:::i;:::-;32022:154;;32193:3;32186:10;;31823:379;;;:::o;32208:392::-;32346:3;32361:73;32430:3;32421:6;32361:73;:::i;:::-;32459:1;32454:3;32450:11;32443:18;;32471:75;32542:3;32533:6;32471:75;:::i;:::-;32571:2;32566:3;32562:12;32555:19;;32591:3;32584:10;;32208:392;;;;;:::o;32606:222::-;32699:4;32737:2;32726:9;32722:18;32714:26;;32750:71;32818:1;32807:9;32803:17;32794:6;32750:71;:::i;:::-;32606:222;;;;:::o;32834:640::-;33029:4;33067:3;33056:9;33052:19;33044:27;;33081:71;33149:1;33138:9;33134:17;33125:6;33081:71;:::i;:::-;33162:72;33230:2;33219:9;33215:18;33206:6;33162:72;:::i;:::-;33244;33312:2;33301:9;33297:18;33288:6;33244:72;:::i;:::-;33363:9;33357:4;33353:20;33348:2;33337:9;33333:18;33326:48;33391:76;33462:4;33453:6;33391:76;:::i;:::-;33383:84;;32834:640;;;;;;;:::o;33480:332::-;33601:4;33639:2;33628:9;33624:18;33616:26;;33652:71;33720:1;33709:9;33705:17;33696:6;33652:71;:::i;:::-;33733:72;33801:2;33790:9;33786:18;33777:6;33733:72;:::i;:::-;33480:332;;;;;:::o;33818:210::-;33905:4;33943:2;33932:9;33928:18;33920:26;;33956:65;34018:1;34007:9;34003:17;33994:6;33956:65;:::i;:::-;33818:210;;;;:::o;34034:309::-;34145:4;34183:2;34172:9;34168:18;34160:26;;34232:9;34226:4;34222:20;34218:1;34207:9;34203:17;34196:47;34260:76;34331:4;34322:6;34260:76;:::i;:::-;34252:84;;34034:309;;;;:::o;34349:313::-;34462:4;34500:2;34489:9;34485:18;34477:26;;34549:9;34543:4;34539:20;34535:1;34524:9;34520:17;34513:47;34577:78;34650:4;34641:6;34577:78;:::i;:::-;34569:86;;34349:313;;;;:::o;34668:419::-;34834:4;34872:2;34861:9;34857:18;34849:26;;34921:9;34915:4;34911:20;34907:1;34896:9;34892:17;34885:47;34949:131;35075:4;34949:131;:::i;:::-;34941:139;;34668:419;;;:::o;35093:::-;35259:4;35297:2;35286:9;35282:18;35274:26;;35346:9;35340:4;35336:20;35332:1;35321:9;35317:17;35310:47;35374:131;35500:4;35374:131;:::i;:::-;35366:139;;35093:419;;;:::o;35518:::-;35684:4;35722:2;35711:9;35707:18;35699:26;;35771:9;35765:4;35761:20;35757:1;35746:9;35742:17;35735:47;35799:131;35925:4;35799:131;:::i;:::-;35791:139;;35518:419;;;:::o;35943:::-;36109:4;36147:2;36136:9;36132:18;36124:26;;36196:9;36190:4;36186:20;36182:1;36171:9;36167:17;36160:47;36224:131;36350:4;36224:131;:::i;:::-;36216:139;;35943:419;;;:::o;36368:::-;36534:4;36572:2;36561:9;36557:18;36549:26;;36621:9;36615:4;36611:20;36607:1;36596:9;36592:17;36585:47;36649:131;36775:4;36649:131;:::i;:::-;36641:139;;36368:419;;;:::o;36793:::-;36959:4;36997:2;36986:9;36982:18;36974:26;;37046:9;37040:4;37036:20;37032:1;37021:9;37017:17;37010:47;37074:131;37200:4;37074:131;:::i;:::-;37066:139;;36793:419;;;:::o;37218:::-;37384:4;37422:2;37411:9;37407:18;37399:26;;37471:9;37465:4;37461:20;37457:1;37446:9;37442:17;37435:47;37499:131;37625:4;37499:131;:::i;:::-;37491:139;;37218:419;;;:::o;37643:::-;37809:4;37847:2;37836:9;37832:18;37824:26;;37896:9;37890:4;37886:20;37882:1;37871:9;37867:17;37860:47;37924:131;38050:4;37924:131;:::i;:::-;37916:139;;37643:419;;;:::o;38068:::-;38234:4;38272:2;38261:9;38257:18;38249:26;;38321:9;38315:4;38311:20;38307:1;38296:9;38292:17;38285:47;38349:131;38475:4;38349:131;:::i;:::-;38341:139;;38068:419;;;:::o;38493:::-;38659:4;38697:2;38686:9;38682:18;38674:26;;38746:9;38740:4;38736:20;38732:1;38721:9;38717:17;38710:47;38774:131;38900:4;38774:131;:::i;:::-;38766:139;;38493:419;;;:::o;38918:::-;39084:4;39122:2;39111:9;39107:18;39099:26;;39171:9;39165:4;39161:20;39157:1;39146:9;39142:17;39135:47;39199:131;39325:4;39199:131;:::i;:::-;39191:139;;38918:419;;;:::o;39343:::-;39509:4;39547:2;39536:9;39532:18;39524:26;;39596:9;39590:4;39586:20;39582:1;39571:9;39567:17;39560:47;39624:131;39750:4;39624:131;:::i;:::-;39616:139;;39343:419;;;:::o;39768:::-;39934:4;39972:2;39961:9;39957:18;39949:26;;40021:9;40015:4;40011:20;40007:1;39996:9;39992:17;39985:47;40049:131;40175:4;40049:131;:::i;:::-;40041:139;;39768:419;;;:::o;40193:::-;40359:4;40397:2;40386:9;40382:18;40374:26;;40446:9;40440:4;40436:20;40432:1;40421:9;40417:17;40410:47;40474:131;40600:4;40474:131;:::i;:::-;40466:139;;40193:419;;;:::o;40618:::-;40784:4;40822:2;40811:9;40807:18;40799:26;;40871:9;40865:4;40861:20;40857:1;40846:9;40842:17;40835:47;40899:131;41025:4;40899:131;:::i;:::-;40891:139;;40618:419;;;:::o;41043:::-;41209:4;41247:2;41236:9;41232:18;41224:26;;41296:9;41290:4;41286:20;41282:1;41271:9;41267:17;41260:47;41324:131;41450:4;41324:131;:::i;:::-;41316:139;;41043:419;;;:::o;41468:::-;41634:4;41672:2;41661:9;41657:18;41649:26;;41721:9;41715:4;41711:20;41707:1;41696:9;41692:17;41685:47;41749:131;41875:4;41749:131;:::i;:::-;41741:139;;41468:419;;;:::o;41893:::-;42059:4;42097:2;42086:9;42082:18;42074:26;;42146:9;42140:4;42136:20;42132:1;42121:9;42117:17;42110:47;42174:131;42300:4;42174:131;:::i;:::-;42166:139;;41893:419;;;:::o;42318:::-;42484:4;42522:2;42511:9;42507:18;42499:26;;42571:9;42565:4;42561:20;42557:1;42546:9;42542:17;42535:47;42599:131;42725:4;42599:131;:::i;:::-;42591:139;;42318:419;;;:::o;42743:::-;42909:4;42947:2;42936:9;42932:18;42924:26;;42996:9;42990:4;42986:20;42982:1;42971:9;42967:17;42960:47;43024:131;43150:4;43024:131;:::i;:::-;43016:139;;42743:419;;;:::o;43168:::-;43334:4;43372:2;43361:9;43357:18;43349:26;;43421:9;43415:4;43411:20;43407:1;43396:9;43392:17;43385:47;43449:131;43575:4;43449:131;:::i;:::-;43441:139;;43168:419;;;:::o;43593:::-;43759:4;43797:2;43786:9;43782:18;43774:26;;43846:9;43840:4;43836:20;43832:1;43821:9;43817:17;43810:47;43874:131;44000:4;43874:131;:::i;:::-;43866:139;;43593:419;;;:::o;44018:::-;44184:4;44222:2;44211:9;44207:18;44199:26;;44271:9;44265:4;44261:20;44257:1;44246:9;44242:17;44235:47;44299:131;44425:4;44299:131;:::i;:::-;44291:139;;44018:419;;;:::o;44443:::-;44609:4;44647:2;44636:9;44632:18;44624:26;;44696:9;44690:4;44686:20;44682:1;44671:9;44667:17;44660:47;44724:131;44850:4;44724:131;:::i;:::-;44716:139;;44443:419;;;:::o;44868:::-;45034:4;45072:2;45061:9;45057:18;45049:26;;45121:9;45115:4;45111:20;45107:1;45096:9;45092:17;45085:47;45149:131;45275:4;45149:131;:::i;:::-;45141:139;;44868:419;;;:::o;45293:::-;45459:4;45497:2;45486:9;45482:18;45474:26;;45546:9;45540:4;45536:20;45532:1;45521:9;45517:17;45510:47;45574:131;45700:4;45574:131;:::i;:::-;45566:139;;45293:419;;;:::o;45718:822::-;45951:4;45989:3;45978:9;45974:19;45966:27;;46003:69;46069:1;46058:9;46054:17;46045:6;46003:69;:::i;:::-;46082:72;46150:2;46139:9;46135:18;46126:6;46082:72;:::i;:::-;46201:9;46195:4;46191:20;46186:2;46175:9;46171:18;46164:48;46229:76;46300:4;46291:6;46229:76;:::i;:::-;46221:84;;46315:66;46377:2;46366:9;46362:18;46353:6;46315:66;:::i;:::-;46429:9;46423:4;46419:20;46413:3;46402:9;46398:19;46391:49;46457:76;46528:4;46519:6;46457:76;:::i;:::-;46449:84;;45718:822;;;;;;;;:::o;46546:739::-;46765:4;46803:3;46792:9;46788:19;46780:27;;46817:69;46883:1;46872:9;46868:17;46859:6;46817:69;:::i;:::-;46933:9;46927:4;46923:20;46918:2;46907:9;46903:18;46896:48;46961:76;47032:4;47023:6;46961:76;:::i;:::-;46953:84;;47047:70;47113:2;47102:9;47098:18;47089:6;47047:70;:::i;:::-;47164:9;47158:4;47154:20;47149:2;47138:9;47134:18;47127:48;47192:86;47273:4;47264:6;47256;47192:86;:::i;:::-;47184:94;;46546:739;;;;;;;;:::o;47291:719::-;47500:4;47538:3;47527:9;47523:19;47515:27;;47552:69;47618:1;47607:9;47603:17;47594:6;47552:69;:::i;:::-;47668:9;47662:4;47658:20;47653:2;47642:9;47638:18;47631:48;47696:76;47767:4;47758:6;47696:76;:::i;:::-;47688:84;;47782:70;47848:2;47837:9;47833:18;47824:6;47782:70;:::i;:::-;47899:9;47893:4;47889:20;47884:2;47873:9;47869:18;47862:48;47927:76;47998:4;47989:6;47927:76;:::i;:::-;47919:84;;47291:719;;;;;;;:::o;48016:1058::-;48314:4;48352:3;48341:9;48337:19;48329:27;;48366:69;48432:1;48421:9;48417:17;48408:6;48366:69;:::i;:::-;48482:9;48476:4;48472:20;48467:2;48456:9;48452:18;48445:48;48510:73;48578:4;48569:6;48510:73;:::i;:::-;48502:81;;48630:9;48624:4;48620:20;48615:2;48604:9;48600:18;48593:48;48658:76;48729:4;48720:6;48658:76;:::i;:::-;48650:84;;48744:88;48828:2;48817:9;48813:18;48804:6;48744:88;:::i;:::-;48842:73;48910:3;48899:9;48895:19;48886:6;48842:73;:::i;:::-;48963:9;48957:4;48953:20;48947:3;48936:9;48932:19;48925:49;48991:76;49062:4;49053:6;48991:76;:::i;:::-;48983:84;;48016:1058;;;;;;;;;:::o;49080:222::-;49173:4;49211:2;49200:9;49196:18;49188:26;;49224:71;49292:1;49281:9;49277:17;49268:6;49224:71;:::i;:::-;49080:222;;;;:::o;49308:332::-;49429:4;49467:2;49456:9;49452:18;49444:26;;49480:71;49548:1;49537:9;49533:17;49524:6;49480:71;:::i;:::-;49561:72;49629:2;49618:9;49614:18;49605:6;49561:72;:::i;:::-;49308:332;;;;;:::o;49646:129::-;49680:6;49707:20;;:::i;:::-;49697:30;;49736:33;49764:4;49756:6;49736:33;:::i;:::-;49646:129;;;:::o;49781:75::-;49814:6;49847:2;49841:9;49831:19;;49781:75;:::o;49862:307::-;49923:4;50013:18;50005:6;50002:30;49999:56;;;50035:18;;:::i;:::-;49999:56;50073:29;50095:6;50073:29;:::i;:::-;50065:37;;50157:4;50151;50147:15;50139:23;;49862:307;;;:::o;50175:308::-;50237:4;50327:18;50319:6;50316:30;50313:56;;;50349:18;;:::i;:::-;50313:56;50387:29;50409:6;50387:29;:::i;:::-;50379:37;;50471:4;50465;50461:15;50453:23;;50175:308;;;:::o;50489:140::-;50537:4;50560:3;50552:11;;50583:3;50580:1;50573:14;50617:4;50614:1;50604:18;50596:26;;50489:140;;;:::o;50635:98::-;50686:6;50720:5;50714:12;50704:22;;50635:98;;;:::o;50739:99::-;50791:6;50825:5;50819:12;50809:22;;50739:99;;;:::o;50844:168::-;50927:11;50961:6;50956:3;50949:19;51001:4;50996:3;50992:14;50977:29;;50844:168;;;;:::o;51018:147::-;51119:11;51156:3;51141:18;;51018:147;;;;:::o;51171:169::-;51255:11;51289:6;51284:3;51277:19;51329:4;51324:3;51320:14;51305:29;;51171:169;;;;:::o;51346:148::-;51448:11;51485:3;51470:18;;51346:148;;;;:::o;51500:305::-;51540:3;51559:20;51577:1;51559:20;:::i;:::-;51554:25;;51593:20;51611:1;51593:20;:::i;:::-;51588:25;;51747:1;51679:66;51675:74;51672:1;51669:81;51666:107;;;51753:18;;:::i;:::-;51666:107;51797:1;51794;51790:9;51783:16;;51500:305;;;;:::o;51811:185::-;51851:1;51868:20;51886:1;51868:20;:::i;:::-;51863:25;;51902:20;51920:1;51902:20;:::i;:::-;51897:25;;51941:1;51931:35;;51946:18;;:::i;:::-;51931:35;51988:1;51985;51981:9;51976:14;;51811:185;;;;:::o;52002:191::-;52042:4;52062:20;52080:1;52062:20;:::i;:::-;52057:25;;52096:20;52114:1;52096:20;:::i;:::-;52091:25;;52135:1;52132;52129:8;52126:34;;;52140:18;;:::i;:::-;52126:34;52185:1;52182;52178:9;52170:17;;52002:191;;;;:::o;52199:96::-;52236:7;52265:24;52283:5;52265:24;:::i;:::-;52254:35;;52199:96;;;:::o;52301:104::-;52346:7;52375:24;52393:5;52375:24;:::i;:::-;52364:35;;52301:104;;;:::o;52411:90::-;52445:7;52488:5;52481:13;52474:21;52463:32;;52411:90;;;:::o;52507:77::-;52544:7;52573:5;52562:16;;52507:77;;;:::o;52590:149::-;52626:7;52666:66;52659:5;52655:78;52644:89;;52590:149;;;:::o;52745:89::-;52781:7;52821:6;52814:5;52810:18;52799:29;;52745:89;;;:::o;52840:126::-;52877:7;52917:42;52910:5;52906:54;52895:65;;52840:126;;;:::o;52972:77::-;53009:7;53038:5;53027:16;;52972:77;;;:::o;53055:101::-;53091:7;53131:18;53124:5;53120:30;53109:41;;53055:101;;;:::o;53162:86::-;53197:7;53237:4;53230:5;53226:16;53215:27;;53162:86;;;:::o;53254:154::-;53338:6;53333:3;53328;53315:30;53400:1;53391:6;53386:3;53382:16;53375:27;53254:154;;;:::o;53414:307::-;53482:1;53492:113;53506:6;53503:1;53500:13;53492:113;;;53591:1;53586:3;53582:11;53576:18;53572:1;53567:3;53563:11;53556:39;53528:2;53525:1;53521:10;53516:15;;53492:113;;;53623:6;53620:1;53617:13;53614:101;;;53703:1;53694:6;53689:3;53685:16;53678:27;53614:101;53463:258;53414:307;;;:::o;53727:320::-;53771:6;53808:1;53802:4;53798:12;53788:22;;53855:1;53849:4;53845:12;53876:18;53866:81;;53932:4;53924:6;53920:17;53910:27;;53866:81;53994:2;53986:6;53983:14;53963:18;53960:38;53957:84;;;54013:18;;:::i;:::-;53957:84;53778:269;53727:320;;;:::o;54053:281::-;54136:27;54158:4;54136:27;:::i;:::-;54128:6;54124:40;54266:6;54254:10;54251:22;54230:18;54218:10;54215:34;54212:62;54209:88;;;54277:18;;:::i;:::-;54209:88;54317:10;54313:2;54306:22;54096:238;54053:281;;:::o;54340:233::-;54379:3;54402:24;54420:5;54402:24;:::i;:::-;54393:33;;54448:66;54441:5;54438:77;54435:103;;;54518:18;;:::i;:::-;54435:103;54565:1;54558:5;54554:13;54547:20;;54340:233;;;:::o;54579:94::-;54617:7;54646:21;54661:5;54646:21;:::i;:::-;54635:32;;54579:94;;;:::o;54679:79::-;54718:7;54747:5;54736:16;;54679:79;;;:::o;54764:176::-;54796:1;54813:20;54831:1;54813:20;:::i;:::-;54808:25;;54847:20;54865:1;54847:20;:::i;:::-;54842:25;;54886:1;54876:35;;54891:18;;:::i;:::-;54876:35;54932:1;54929;54925:9;54920:14;;54764:176;;;;:::o;54946:180::-;54994:77;54991:1;54984:88;55091:4;55088:1;55081:15;55115:4;55112:1;55105:15;55132:180;55180:77;55177:1;55170:88;55277:4;55274:1;55267:15;55301:4;55298:1;55291:15;55318:180;55366:77;55363:1;55356:88;55463:4;55460:1;55453:15;55487:4;55484:1;55477:15;55504:180;55552:77;55549:1;55542:88;55649:4;55646:1;55639:15;55673:4;55670:1;55663:15;55690:180;55738:77;55735:1;55728:88;55835:4;55832:1;55825:15;55859:4;55856:1;55849:15;55876:117;55985:1;55982;55975:12;55999:117;56108:1;56105;56098:12;56122:117;56231:1;56228;56221:12;56245:117;56354:1;56351;56344:12;56368:117;56477:1;56474;56467:12;56491:117;56600:1;56597;56590:12;56614:102;56655:6;56706:2;56702:7;56697:2;56690:5;56686:14;56682:28;56672:38;;56614:102;;;:::o;56722:96::-;56756:8;56805:5;56800:3;56796:15;56775:36;;56722:96;;;:::o;56824:174::-;56964:26;56960:1;56952:6;56948:14;56941:50;56824:174;:::o;57004:237::-;57144:34;57140:1;57132:6;57128:14;57121:58;57213:20;57208:2;57200:6;57196:15;57189:45;57004:237;:::o;57247:225::-;57387:34;57383:1;57375:6;57371:14;57364:58;57456:8;57451:2;57443:6;57439:15;57432:33;57247:225;:::o;57478:223::-;57618:34;57614:1;57606:6;57602:14;57595:58;57687:6;57682:2;57674:6;57670:15;57663:31;57478:223;:::o;57707:175::-;57847:27;57843:1;57835:6;57831:14;57824:51;57707:175;:::o;57888:233::-;58028:34;58024:1;58016:6;58012:14;58005:58;58097:16;58092:2;58084:6;58080:15;58073:41;57888:233;:::o;58127:176::-;58267:28;58263:1;58255:6;58251:14;58244:52;58127:176;:::o;58309:221::-;58449:34;58445:1;58437:6;58433:14;58426:58;58518:4;58513:2;58505:6;58501:15;58494:29;58309:221;:::o;58536:231::-;58676:34;58672:1;58664:6;58660:14;58653:58;58745:14;58740:2;58732:6;58728:15;58721:39;58536:231;:::o;58773:297::-;58913:34;58909:1;58901:6;58897:14;58890:58;58982:34;58977:2;58969:6;58965:15;58958:59;59051:11;59046:2;59038:6;59034:15;59027:36;58773:297;:::o;59076:243::-;59216:34;59212:1;59204:6;59200:14;59193:58;59285:26;59280:2;59272:6;59268:15;59261:51;59076:243;:::o;59325:229::-;59465:34;59461:1;59453:6;59449:14;59442:58;59534:12;59529:2;59521:6;59517:15;59510:37;59325:229;:::o;59560:228::-;59700:34;59696:1;59688:6;59684:14;59677:58;59769:11;59764:2;59756:6;59752:15;59745:36;59560:228;:::o;59794:230::-;59934:34;59930:1;59922:6;59918:14;59911:58;60003:13;59998:2;59990:6;59986:15;59979:38;59794:230;:::o;60030:182::-;60170:34;60166:1;60158:6;60154:14;60147:58;60030:182;:::o;60218:231::-;60358:34;60354:1;60346:6;60342:14;60335:58;60427:14;60422:2;60414:6;60410:15;60403:39;60218:231;:::o;60455:155::-;60595:7;60591:1;60583:6;60579:14;60572:31;60455:155;:::o;60616:182::-;60756:34;60752:1;60744:6;60740:14;60733:58;60616:182;:::o;60804:239::-;60944:34;60940:1;60932:6;60928:14;60921:58;61013:22;61008:2;61000:6;60996:15;60989:47;60804:239;:::o;61049:229::-;61189:34;61185:1;61177:6;61173:14;61166:58;61258:12;61253:2;61245:6;61241:15;61234:37;61049:229;:::o;61284:228::-;61424:34;61420:1;61412:6;61408:14;61401:58;61493:11;61488:2;61480:6;61476:15;61469:36;61284:228;:::o;61518:234::-;61658:34;61654:1;61646:6;61642:14;61635:58;61727:17;61722:2;61714:6;61710:15;61703:42;61518:234;:::o;61758:175::-;61898:27;61894:1;61886:6;61882:14;61875:51;61758:175;:::o;61939:220::-;62079:34;62075:1;62067:6;62063:14;62056:58;62148:3;62143:2;62135:6;62131:15;62124:28;61939:220;:::o;62165:114::-;;:::o;62285:236::-;62425:34;62421:1;62413:6;62409:14;62402:58;62494:19;62489:2;62481:6;62477:15;62470:44;62285:236;:::o;62527:180::-;62667:32;62663:1;62655:6;62651:14;62644:56;62527:180;:::o;62713:225::-;62853:34;62849:1;62841:6;62837:14;62830:58;62922:8;62917:2;62909:6;62905:15;62898:33;62713:225;:::o;62944:122::-;63017:24;63035:5;63017:24;:::i;:::-;63010:5;63007:35;62997:63;;63056:1;63053;63046:12;62997:63;62944:122;:::o;63072:138::-;63153:32;63179:5;63153:32;:::i;:::-;63146:5;63143:43;63133:71;;63200:1;63197;63190:12;63133:71;63072:138;:::o;63216:116::-;63286:21;63301:5;63286:21;:::i;:::-;63279:5;63276:32;63266:60;;63322:1;63319;63312:12;63266:60;63216:116;:::o;63338:120::-;63410:23;63427:5;63410:23;:::i;:::-;63403:5;63400:34;63390:62;;63448:1;63445;63438:12;63390:62;63338:120;:::o;63464:::-;63536:23;63553:5;63536:23;:::i;:::-;63529:5;63526:34;63516:62;;63574:1;63571;63564:12;63516:62;63464:120;:::o;63590:122::-;63663:24;63681:5;63663:24;:::i;:::-;63656:5;63653:35;63643:63;;63702:1;63699;63692:12;63643:63;63590:122;:::o;63718:120::-;63790:23;63807:5;63790:23;:::i;:::-;63783:5;63780:34;63770:62;;63828:1;63825;63818:12;63770:62;63718:120;:::o;63844:118::-;63915:22;63931:5;63915:22;:::i;:::-;63908:5;63905:33;63895:61;;63952:1;63949;63942:12;63895:61;63844:118;:::o
Swarm Source
ipfs://5bcee154723fb19dcea65ecc2d8be9fdb47dee1876f742b3de431d1e71c7afb3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.