Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
155
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ShibArmy
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-17 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // 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 (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @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 (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: ShibArmy.sol pragma solidity >= 0.7.0 < 0.9.0; contract ShibArmy is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; // URIs string public uriPrefix = "https://shibarmy-nft.com/nfts/jsons/"; string public uriSuffix = ".json"; string public hiddenMetadataUri; // Costs uint256 public presaleCost = 0.05 ether; uint256 public publicsaleCost = 0.06 ether; // Supplies uint256 public maxSupply = 9999; uint256 public maxSupplyLimit = 9999; // Per Address & TX Limits uint256 public nftPresalePerAddressLimit = 100; uint256 public nftPublicsalePerAddressLimit = 100; uint256 public maxMintAmountPerTx = 6; // Stats bool public paused = false; bool public presale = true; bool public onlyWhitelisted = true; bool public revealed = false; // Whitelist Addresses mapping(address => bool) public whitelistedAddressesList; // Minted Balances mapping(address => uint256) public addressPresaleMintedBalance; mapping(address => uint256) public addressPublicsaleMintedBalance; // Constructor constructor() ERC721("Shib Army", "SA") { setHiddenMetadataUri("https://shibarmy-nft.com/nfts/placeholder.json"); } // Mint Compliance modifier mintCompliance(uint256 _mintAmount) { if(presale == true) { if(onlyWhitelisted == true) { require(isInWhiteList(msg.sender), "MSG: User is not whitelisted"); } uint256 ownerMintedCount = addressPresaleMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPresalePerAddressLimit, "MSG: Max NFT per address exceeded for presale"); } else { uint256 ownerMintedCount = addressPublicsaleMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPublicsalePerAddressLimit, "MSG: Max NFT per address exceeded for publicsale"); } require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "MSG: Invalid mint amount"); require(supply.current() + _mintAmount <= maxSupplyLimit, "MSG: Max supply exceeded"); _; } // Total Supply function totalSupply() public view returns (uint256) { return supply.current(); } // Mint function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "MSG: The contract is paused"); if(presale == true) { require(msg.value >= presaleCost * _mintAmount, "MSG: Insufficient funds"); } else { require(msg.value >= publicsaleCost * _mintAmount, "MSG: Insufficient funds"); } if(_mintAmount == 2) { _mintLoop(msg.sender, 3); } else if(_mintAmount == 4) { _mintLoop(msg.sender, 6); } else if(_mintAmount == 6) { _mintLoop(msg.sender, 9); } else { _mintLoop(msg.sender, _mintAmount); } withdraw(); } // Mint Functions function ownerMint(uint256 _mintAmount) public onlyOwner { require(!paused, "MSG: The contract is paused"); _mintLoop(msg.sender, _mintAmount); } function ownerMintSpecific(uint256 _tokenId) public onlyOwner { require(!paused, "MSG: The contract is paused"); _safeMint(msg.sender, _tokenId); if(presale == true) { addressPublicsaleMintedBalance[msg.sender]++; } else { addressPublicsaleMintedBalance[msg.sender]++; } } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } // Wallet Of Owner function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } // Token URI function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "MSG: URI query for nonexistent token"); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } // Set Max Supply function setMaxSupply(uint256 _supply) public onlyOwner { maxSupply = _supply; } // Set Max Supply Limit function setMaxSupplyLimit(uint256 _supply) public onlyOwner { maxSupplyLimit = _supply; } // Presale Cost function setPresaleCost(uint256 _cost) public onlyOwner { presaleCost = _cost; } // Publicsale Cost function setPublicsaleCost(uint256 _cost) public onlyOwner { publicsaleCost = _cost; } // Set NFT Publicsale Per Address Limit function setNFTPublicsalePerAddressLimit(uint256 _cost) public onlyOwner { nftPublicsalePerAddressLimit = _cost; } // Set NFT Presale Per Address Limit function setNFTPresalePerAddressLimit(uint256 _cost) public onlyOwner { nftPresalePerAddressLimit = _cost; } // Set URI Prefix function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } // Set URI Suffix function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } // Set Hidden Metadata URI function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } // Set Paused function setPaused(bool _state) public onlyOwner { paused = _state; } // Set Presale function setPresale(bool _state) public onlyOwner { presale = _state; } // Set Revealed function setRevealed(bool _state) public onlyOwner { revealed = _state; } // Withdraw function withdraw() public payable { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } // Mint Loop function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); if(presale == true) { addressPresaleMintedBalance[msg.sender]++; } else { addressPublicsaleMintedBalance[msg.sender]++; } } } // Base URI function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } // Set Only Whitelisted function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } // Whitelist Functions function addToWhiteList(address _addr) public onlyOwner { whitelistedAddressesList[_addr] = true; } function addArrayToWhiteList(address[] memory _addrs) public onlyOwner { for (uint256 i = 0;i< _addrs.length; i++) { whitelistedAddressesList[_addrs[i]] = true; } } function removeFromWhiteList(address _addr) public onlyOwner { whitelistedAddressesList[_addr] = false; } function isInWhiteList(address _addr) public view returns (bool) { return whitelistedAddressesList[_addr] || _addr == owner(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"addArrayToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressPresaleMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressPublicsaleMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isInWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPresalePerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPublicsalePerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerMintSpecific","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicsaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeFromWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setNFTPresalePerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setNFTPublicsalePerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPublicsaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddressesList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180606001604052806024815260200162005d70602491396008908051906020019062000035929190620003c2565b506040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000083929190620003c2565b5066b1a2bc2ec50000600b5566d529ae9e860000600c5561270f600d5561270f600e556064600f55606460105560066011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055506000601260036101000a81548160ff0219169083151502179055503480156200012e57600080fd5b506040518060400160405280600981526020017f536869622041726d7900000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f53410000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001b3929190620003c2565b508060019080519060200190620001cc929190620003c2565b505050620001ef620001e36200021f60201b60201c565b6200022760201b60201c565b620002196040518060600160405280602e815260200162005d42602e9139620002ed60201b60201c565b6200055a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002fd6200021f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003236200039860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003739062000499565b60405180910390fd5b80600a908051906020019062000394929190620003c2565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003d090620004cc565b90600052602060002090601f016020900481019282620003f4576000855562000440565b82601f106200040f57805160ff191683800117855562000440565b8280016001018555821562000440579182015b828111156200043f57825182559160200191906001019062000422565b5b5090506200044f919062000453565b5090565b5b808211156200046e57600081600090555060010162000454565b5090565b600062000481602083620004bb565b91506200048e8262000531565b602082019050919050565b60006020820190508181036000830152620004b48162000472565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004e557607f821691505b60208210811415620004fc57620004fb62000502565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6157d8806200056a6000396000f3fe6080604052600436106103765760003560e01c80638da5cb5b116101d1578063c54e73e311610102578063e985e9c5116100a0578063f2fde38b1161006f578063f2fde38b14610c90578063f9d38e9714610cb9578063fa65b59214610cf6578063fdea8e0b14610d3357610376565b8063e985e9c514610bd6578063eb95416014610c13578063efbd73f414610c3e578063f19e75d414610c6757610376565b8063e08823c5116100dc578063e08823c514610b32578063e0a8085314610b5b578063e688008014610b84578063e9058c3714610bad57610376565b8063c54e73e314610aa1578063c87b56dd14610aca578063d5abeb0114610b0757610376565b8063a0712d681161016f578063ae13730711610149578063ae137307146109fb578063b88d4fde14610a24578063b8d988a214610a4d578063c243c6c114610a7857610376565b8063a0712d681461098b578063a22cb465146109a7578063a45ba8e7146109d057610376565b806394354fd0116101ab57806394354fd0146108cd57806395d89b41146108f857806396bfc229146109235780639c70b5121461096057610376565b80638da5cb5b1461084e5780638fdcf9421461087957806392829d74146108a257610376565b8063438b6300116102ab5780636352211e116102495780636f8b44b0116102235780636f8b44b0146107a857806370a08231146107d1578063715018a61461080e5780637ec4a6591461082557610376565b80636352211e146107175780636905b184146107545780636f636e8b1461077d57610376565b80635183022711610285578063518302271461066b5780635503a0e8146106965780635c975abb146106c157806362b99ad4146106ec57610376565b8063438b6300146105dc57806347ee0394146106195780634fdd43cb1461064257610376565b806316c38b3c116103185780632a23d07d116102f25780632a23d07d146105555780633c952764146105805780633ccfd60b146105a957806342842e0e146105b357610376565b806316c38b3c146104d857806318160ddd1461050157806323b872dd1461052c57610376565b806307b9f56d1161035457806307b9f56d1461040c578063081812fc14610449578063095ea7b31461048657806316ba10e0146104af57610376565b806301bf66481461037b57806301ffc9a7146103a457806306fdde03146103e1575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d9190614008565b610d5e565b005b3480156103b057600080fd5b506103cb60048036038101906103c69190614241565b610e35565b6040516103d8919061493c565b60405180910390f35b3480156103ed57600080fd5b506103f6610f17565b6040516104039190614957565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190614008565b610fa9565b6040516104409190614c59565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b91906142e4565b610fc1565b60405161047d91906148b3565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a8919061418b565b611046565b005b3480156104bb57600080fd5b506104d660048036038101906104d1919061429b565b61115e565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190614214565b6111f4565b005b34801561050d57600080fd5b5061051661128d565b6040516105239190614c59565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190614075565b61129e565b005b34801561056157600080fd5b5061056a6112fe565b6040516105779190614c59565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190614214565b611304565b005b6105b161139d565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190614075565b61141d565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190614008565b61143d565b604051610610919061491a565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614008565b611548565b005b34801561064e57600080fd5b506106696004803603810190610664919061429b565b61161f565b005b34801561067757600080fd5b506106806116b5565b60405161068d919061493c565b60405180910390f35b3480156106a257600080fd5b506106ab6116c8565b6040516106b89190614957565b60405180910390f35b3480156106cd57600080fd5b506106d6611756565b6040516106e3919061493c565b60405180910390f35b3480156106f857600080fd5b50610701611769565b60405161070e9190614957565b60405180910390f35b34801561072357600080fd5b5061073e600480360381019061073991906142e4565b6117f7565b60405161074b91906148b3565b60405180910390f35b34801561076057600080fd5b5061077b600480360381019061077691906142e4565b6118a9565b005b34801561078957600080fd5b5061079261192f565b60405161079f9190614c59565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca91906142e4565b611935565b005b3480156107dd57600080fd5b506107f860048036038101906107f39190614008565b6119bb565b6040516108059190614c59565b60405180910390f35b34801561081a57600080fd5b50610823611a73565b005b34801561083157600080fd5b5061084c6004803603810190610847919061429b565b611afb565b005b34801561085a57600080fd5b50610863611b91565b60405161087091906148b3565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b91906142e4565b611bbb565b005b3480156108ae57600080fd5b506108b7611c41565b6040516108c49190614c59565b60405180910390f35b3480156108d957600080fd5b506108e2611c47565b6040516108ef9190614c59565b60405180910390f35b34801561090457600080fd5b5061090d611c4d565b60405161091a9190614957565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614008565b611cdf565b604051610957919061493c565b60405180910390f35b34801561096c57600080fd5b50610975611d72565b604051610982919061493c565b60405180910390f35b6109a560048036038101906109a091906142e4565b611d85565b005b3480156109b357600080fd5b506109ce60048036038101906109c9919061414b565b612157565b005b3480156109dc57600080fd5b506109e561216d565b6040516109f29190614957565b60405180910390f35b348015610a0757600080fd5b50610a226004803603810190610a1d91906142e4565b6121fb565b005b348015610a3057600080fd5b50610a4b6004803603810190610a4691906140c8565b612281565b005b348015610a5957600080fd5b50610a626122e3565b604051610a6f9190614c59565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906141cb565b6122e9565b005b348015610aad57600080fd5b50610ac86004803603810190610ac39190614214565b6123fa565b005b348015610ad657600080fd5b50610af16004803603810190610aec91906142e4565b612493565b604051610afe9190614957565b60405180910390f35b348015610b1357600080fd5b50610b1c6125ec565b604051610b299190614c59565b60405180910390f35b348015610b3e57600080fd5b50610b596004803603810190610b5491906142e4565b6125f2565b005b348015610b6757600080fd5b50610b826004803603810190610b7d9190614214565b612797565b005b348015610b9057600080fd5b50610bab6004803603810190610ba691906142e4565b612830565b005b348015610bb957600080fd5b50610bd46004803603810190610bcf91906142e4565b6128b6565b005b348015610be257600080fd5b50610bfd6004803603810190610bf89190614035565b61293c565b604051610c0a919061493c565b60405180910390f35b348015610c1f57600080fd5b50610c286129d0565b604051610c359190614c59565b60405180910390f35b348015610c4a57600080fd5b50610c656004803603810190610c609190614311565b6129d6565b005b348015610c7357600080fd5b50610c8e6004803603810190610c8991906142e4565b612cbd565b005b348015610c9c57600080fd5b50610cb76004803603810190610cb29190614008565b612d96565b005b348015610cc557600080fd5b50610ce06004803603810190610cdb9190614008565b612e8e565b604051610ced9190614c59565b60405180910390f35b348015610d0257600080fd5b50610d1d6004803603810190610d189190614008565b612ea6565b604051610d2a919061493c565b60405180910390f35b348015610d3f57600080fd5b50610d48612ec6565b604051610d55919061493c565b60405180910390f35b610d66612ed9565b73ffffffffffffffffffffffffffffffffffffffff16610d84611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190614b79565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f0057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f105750610f0f82612ee1565b5b9050919050565b606060008054610f2690614f8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5290614f8e565b8015610f9f5780601f10610f7457610100808354040283529160200191610f9f565b820191906000526020600020905b815481529060010190602001808311610f8257829003601f168201915b5050505050905090565b60156020528060005260406000206000915090505481565b6000610fcc82612f4b565b61100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290614b39565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611051826117f7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990614bd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110e1612ed9565b73ffffffffffffffffffffffffffffffffffffffff161480611110575061110f8161110a612ed9565b61293c565b5b61114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690614a99565b60405180910390fd5b6111598383612fb7565b505050565b611166612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611184611b91565b73ffffffffffffffffffffffffffffffffffffffff16146111da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d190614b79565b60405180910390fd5b80600990805190602001906111f0929190613d7e565b5050565b6111fc612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661121a611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790614b79565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60006112996007613070565b905090565b6112af6112a9612ed9565b8261307e565b6112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e590614bf9565b60405180910390fd5b6112f983838361315c565b505050565b600b5481565b61130c612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661132a611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790614b79565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b60006113a7611b91565b73ffffffffffffffffffffffffffffffffffffffff16476040516113ca9061489e565b60006040518083038185875af1925050503d8060008114611407576040519150601f19603f3d011682016040523d82523d6000602084013e61140c565b606091505b505090508061141a57600080fd5b50565b61143883838360405180602001604052806000815250612281565b505050565b6060600061144a836119bb565b905060008167ffffffffffffffff81111561146857611467615127565b5b6040519080825280602002602001820160405280156114965781602001602082028036833780820191505090505b50905060006001905060005b83811080156114b35750600d548211155b1561153c5760006114c3836117f7565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611528578284838151811061150d5761150c6150f8565b5b602002602001018181525050818061152490614ff1565b9250505b828061153390614ff1565b935050506114a2565b82945050505050919050565b611550612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661156e611b91565b73ffffffffffffffffffffffffffffffffffffffff16146115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb90614b79565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611627612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611645611b91565b73ffffffffffffffffffffffffffffffffffffffff161461169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169290614b79565b60405180910390fd5b80600a90805190602001906116b1929190613d7e565b5050565b601260039054906101000a900460ff1681565b600980546116d590614f8e565b80601f016020809104026020016040519081016040528092919081815260200182805461170190614f8e565b801561174e5780601f106117235761010080835404028352916020019161174e565b820191906000526020600020905b81548152906001019060200180831161173157829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b6008805461177690614f8e565b80601f01602080910402602001604051908101604052809291908181526020018280546117a290614f8e565b80156117ef5780601f106117c4576101008083540402835291602001916117ef565b820191906000526020600020905b8154815290600101906020018083116117d257829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790614ad9565b60405180910390fd5b80915050919050565b6118b1612ed9565b73ffffffffffffffffffffffffffffffffffffffff166118cf611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614b79565b60405180910390fd5b80600c8190555050565b600f5481565b61193d612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661195b611b91565b73ffffffffffffffffffffffffffffffffffffffff16146119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890614b79565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390614ab9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a7b612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611a99611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690614b79565b60405180910390fd5b611af960006133c3565b565b611b03612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611b21611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90614b79565b60405180910390fd5b8060089080519060200190611b8d929190613d7e565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bc3612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611be1611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614b79565b60405180910390fd5b80600b8190555050565b600c5481565b60115481565b606060018054611c5c90614f8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8890614f8e565b8015611cd55780601f10611caa57610100808354040283529160200191611cd5565b820191906000526020600020905b815481529060010190602001808311611cb857829003601f168201915b5050505050905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d6b5750611d3c611b91565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b601260029054906101000a900460ff1681565b8060011515601260019054906101000a900460ff1615151415611ea15760011515601260029054906101000a900460ff1615151415611e0757611dc733611cdf565b611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd90614979565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548282611e5a9190614dc3565b1115611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9290614b19565b60405180910390fd5b50611f37565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548282611ef49190614dc3565b1115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90614c19565b60405180910390fd5b505b600081118015611f4957506011548111155b611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614b99565b60405180910390fd5b600e5481611f966007613070565b611fa09190614dc3565b1115611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614c39565b60405180910390fd5b601260009054906101000a900460ff1615612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202890614a19565b60405180910390fd5b60011515601260019054906101000a900460ff16151514156120a25781600b5461205b9190614e4a565b34101561209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490614b59565b60405180910390fd5b6120f3565b81600c546120b09190614e4a565b3410156120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990614b59565b60405180910390fd5b5b600282141561210c57612107336003613489565b61214b565b600482141561212557612120336006613489565b61214a565b600682141561213e57612139336009613489565b612149565b6121483383613489565b5b5b5b61215361139d565b5050565b612169612162612ed9565b8383613595565b5050565b600a805461217a90614f8e565b80601f01602080910402602001604051908101604052809291908181526020018280546121a690614f8e565b80156121f35780601f106121c8576101008083540402835291602001916121f3565b820191906000526020600020905b8154815290600101906020018083116121d657829003601f168201915b505050505081565b612203612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612221611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226e90614b79565b60405180910390fd5b8060108190555050565b61229261228c612ed9565b8361307e565b6122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614bf9565b60405180910390fd5b6122dd84848484613702565b50505050565b60105481565b6122f1612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661230f611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614b79565b60405180910390fd5b60005b81518110156123f65760016013600084848151811061238a576123896150f8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123ee90614ff1565b915050612368565b5050565b612402612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612420611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90614b79565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b606061249e82612f4b565b6124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614bb9565b60405180910390fd5b60001515601260039054906101000a900460ff161515141561258b57600a805461250690614f8e565b80601f016020809104026020016040519081016040528092919081815260200182805461253290614f8e565b801561257f5780601f106125545761010080835404028352916020019161257f565b820191906000526020600020905b81548152906001019060200180831161256257829003601f168201915b505050505090506125e7565b600061259561375e565b905060008151116125b557604051806020016040528060008152506125e3565b806125bf846137f0565b60096040516020016125d39392919061486d565b6040516020818303038152906040525b9150505b919050565b600d5481565b6125fa612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612618611b91565b73ffffffffffffffffffffffffffffffffffffffff161461266e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266590614b79565b60405180910390fd5b601260009054906101000a900460ff16156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614a19565b60405180910390fd5b6126c83382613951565b60011515601260019054906101000a900460ff161515141561273e57601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061273490614ff1565b9190505550612794565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061278e90614ff1565b91905055505b50565b61279f612ed9565b73ffffffffffffffffffffffffffffffffffffffff166127bd611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a90614b79565b60405180910390fd5b80601260036101000a81548160ff02191690831515021790555050565b612838612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612856611b91565b73ffffffffffffffffffffffffffffffffffffffff16146128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390614b79565b60405180910390fd5b80600e8190555050565b6128be612ed9565b73ffffffffffffffffffffffffffffffffffffffff166128dc611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292990614b79565b60405180910390fd5b80600f8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b8160011515601260019054906101000a900460ff1615151415612af25760011515601260029054906101000a900460ff1615151415612a5857612a1833611cdf565b612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e90614979565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548282612aab9190614dc3565b1115612aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae390614b19565b60405180910390fd5b50612b88565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548282612b459190614dc3565b1115612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d90614c19565b60405180910390fd5b505b600081118015612b9a57506011548111155b612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614b99565b60405180910390fd5b600e5481612be76007613070565b612bf19190614dc3565b1115612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614c39565b60405180910390fd5b612c3a612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612c58611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca590614b79565b60405180910390fd5b612cb88284613489565b505050565b612cc5612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612ce3611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3090614b79565b60405180910390fd5b601260009054906101000a900460ff1615612d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8090614a19565b60405180910390fd5b612d933382613489565b50565b612d9e612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612dbc611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0990614b79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e79906149b9565b60405180910390fd5b612e8b816133c3565b50565b60146020528060005260406000206000915090505481565b60136020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661302a836117f7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061308982612f4b565b6130c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bf90614a79565b60405180910390fd5b60006130d3836117f7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061314257508373ffffffffffffffffffffffffffffffffffffffff1661312a84610fc1565b73ffffffffffffffffffffffffffffffffffffffff16145b806131535750613152818561293c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661317c826117f7565b73ffffffffffffffffffffffffffffffffffffffff16146131d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c9906149d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323990614a39565b60405180910390fd5b61324d83838361396f565b613258600082612fb7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132a89190614ea4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132ff9190614dc3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133be838383613974565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156135905761349e6007613979565b6134b1836134ac6007613070565b613951565b60011515601260019054906101000a900460ff161515141561352757601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061351d90614ff1565b919050555061357d565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061357790614ff1565b91905055505b808061358890614ff1565b91505061348c565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fb90614a59565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516136f5919061493c565b60405180910390a3505050565b61370d84848461315c565b6137198484848461398f565b613758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374f90614999565b60405180910390fd5b50505050565b60606008805461376d90614f8e565b80601f016020809104026020016040519081016040528092919081815260200182805461379990614f8e565b80156137e65780601f106137bb576101008083540402835291602001916137e6565b820191906000526020600020905b8154815290600101906020018083116137c957829003601f168201915b5050505050905090565b60606000821415613838576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061394c565b600082905060005b6000821461386a57808061385390614ff1565b915050600a826138639190614e19565b9150613840565b60008167ffffffffffffffff81111561388657613885615127565b5b6040519080825280601f01601f1916602001820160405280156138b85781602001600182028036833780820191505090505b5090505b60008514613945576001826138d19190614ea4565b9150600a856138e0919061503a565b60306138ec9190614dc3565b60f81b818381518110613902576139016150f8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561393e9190614e19565b94506138bc565b8093505050505b919050565b61396b828260405180602001604052806000815250613b26565b5050565b505050565b505050565b6001816000016000828254019250508190555050565b60006139b08473ffffffffffffffffffffffffffffffffffffffff16613b81565b15613b19578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026139d9612ed9565b8786866040518563ffffffff1660e01b81526004016139fb94939291906148ce565b602060405180830381600087803b158015613a1557600080fd5b505af1925050508015613a4657506040513d601f19601f82011682018060405250810190613a43919061426e565b60015b613ac9573d8060008114613a76576040519150601f19603f3d011682016040523d82523d6000602084013e613a7b565b606091505b50600081511415613ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab890614999565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613b1e565b600190505b949350505050565b613b308383613ba4565b613b3d600084848461398f565b613b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7390614999565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0b90614af9565b60405180910390fd5b613c1d81612f4b565b15613c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c54906149f9565b60405180910390fd5b613c696000838361396f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613cb99190614dc3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613d7a60008383613974565b5050565b828054613d8a90614f8e565b90600052602060002090601f016020900481019282613dac5760008555613df3565b82601f10613dc557805160ff1916838001178555613df3565b82800160010185558215613df3579182015b82811115613df2578251825591602001919060010190613dd7565b5b509050613e009190613e04565b5090565b5b80821115613e1d576000816000905550600101613e05565b5090565b6000613e34613e2f84614c99565b614c74565b90508083825260208201905082856020860282011115613e5757613e5661515b565b5b60005b85811015613e875781613e6d8882613f15565b845260208401935060208301925050600181019050613e5a565b5050509392505050565b6000613ea4613e9f84614cc5565b614c74565b905082815260208101848484011115613ec057613ebf615160565b5b613ecb848285614f4c565b509392505050565b6000613ee6613ee184614cf6565b614c74565b905082815260208101848484011115613f0257613f01615160565b5b613f0d848285614f4c565b509392505050565b600081359050613f2481615746565b92915050565b600082601f830112613f3f57613f3e615156565b5b8135613f4f848260208601613e21565b91505092915050565b600081359050613f678161575d565b92915050565b600081359050613f7c81615774565b92915050565b600081519050613f9181615774565b92915050565b600082601f830112613fac57613fab615156565b5b8135613fbc848260208601613e91565b91505092915050565b600082601f830112613fda57613fd9615156565b5b8135613fea848260208601613ed3565b91505092915050565b6000813590506140028161578b565b92915050565b60006020828403121561401e5761401d61516a565b5b600061402c84828501613f15565b91505092915050565b6000806040838503121561404c5761404b61516a565b5b600061405a85828601613f15565b925050602061406b85828601613f15565b9150509250929050565b60008060006060848603121561408e5761408d61516a565b5b600061409c86828701613f15565b93505060206140ad86828701613f15565b92505060406140be86828701613ff3565b9150509250925092565b600080600080608085870312156140e2576140e161516a565b5b60006140f087828801613f15565b945050602061410187828801613f15565b935050604061411287828801613ff3565b925050606085013567ffffffffffffffff81111561413357614132615165565b5b61413f87828801613f97565b91505092959194509250565b600080604083850312156141625761416161516a565b5b600061417085828601613f15565b925050602061418185828601613f58565b9150509250929050565b600080604083850312156141a2576141a161516a565b5b60006141b085828601613f15565b92505060206141c185828601613ff3565b9150509250929050565b6000602082840312156141e1576141e061516a565b5b600082013567ffffffffffffffff8111156141ff576141fe615165565b5b61420b84828501613f2a565b91505092915050565b60006020828403121561422a5761422961516a565b5b600061423884828501613f58565b91505092915050565b6000602082840312156142575761425661516a565b5b600061426584828501613f6d565b91505092915050565b6000602082840312156142845761428361516a565b5b600061429284828501613f82565b91505092915050565b6000602082840312156142b1576142b061516a565b5b600082013567ffffffffffffffff8111156142cf576142ce615165565b5b6142db84828501613fc5565b91505092915050565b6000602082840312156142fa576142f961516a565b5b600061430884828501613ff3565b91505092915050565b600080604083850312156143285761432761516a565b5b600061433685828601613ff3565b925050602061434785828601613f15565b9150509250929050565b600061435d838361484f565b60208301905092915050565b61437281614ed8565b82525050565b600061438382614d4c565b61438d8185614d7a565b935061439883614d27565b8060005b838110156143c95781516143b08882614351565b97506143bb83614d6d565b92505060018101905061439c565b5085935050505092915050565b6143df81614eea565b82525050565b60006143f082614d57565b6143fa8185614d8b565b935061440a818560208601614f5b565b6144138161516f565b840191505092915050565b600061442982614d62565b6144338185614da7565b9350614443818560208601614f5b565b61444c8161516f565b840191505092915050565b600061446282614d62565b61446c8185614db8565b935061447c818560208601614f5b565b80840191505092915050565b6000815461449581614f8e565b61449f8186614db8565b945060018216600081146144ba57600181146144cb576144fe565b60ff198316865281860193506144fe565b6144d485614d37565b60005b838110156144f6578154818901526001820191506020810190506144d7565b838801955050505b50505092915050565b6000614514601c83614da7565b915061451f82615180565b602082019050919050565b6000614537603283614da7565b9150614542826151a9565b604082019050919050565b600061455a602683614da7565b9150614565826151f8565b604082019050919050565b600061457d602583614da7565b915061458882615247565b604082019050919050565b60006145a0601c83614da7565b91506145ab82615296565b602082019050919050565b60006145c3601b83614da7565b91506145ce826152bf565b602082019050919050565b60006145e6602483614da7565b91506145f1826152e8565b604082019050919050565b6000614609601983614da7565b915061461482615337565b602082019050919050565b600061462c602c83614da7565b915061463782615360565b604082019050919050565b600061464f603883614da7565b915061465a826153af565b604082019050919050565b6000614672602a83614da7565b915061467d826153fe565b604082019050919050565b6000614695602983614da7565b91506146a08261544d565b604082019050919050565b60006146b8602083614da7565b91506146c38261549c565b602082019050919050565b60006146db602d83614da7565b91506146e6826154c5565b604082019050919050565b60006146fe602c83614da7565b915061470982615514565b604082019050919050565b6000614721601783614da7565b915061472c82615563565b602082019050919050565b6000614744602083614da7565b915061474f8261558c565b602082019050919050565b6000614767601883614da7565b9150614772826155b5565b602082019050919050565b600061478a602483614da7565b9150614795826155de565b604082019050919050565b60006147ad602183614da7565b91506147b88261562d565b604082019050919050565b60006147d0600083614d9c565b91506147db8261567c565b600082019050919050565b60006147f3603183614da7565b91506147fe8261567f565b604082019050919050565b6000614816603083614da7565b9150614821826156ce565b604082019050919050565b6000614839601883614da7565b91506148448261571d565b602082019050919050565b61485881614f42565b82525050565b61486781614f42565b82525050565b60006148798286614457565b91506148858285614457565b91506148918284614488565b9150819050949350505050565b60006148a9826147c3565b9150819050919050565b60006020820190506148c86000830184614369565b92915050565b60006080820190506148e36000830187614369565b6148f06020830186614369565b6148fd604083018561485e565b818103606083015261490f81846143e5565b905095945050505050565b600060208201905081810360008301526149348184614378565b905092915050565b600060208201905061495160008301846143d6565b92915050565b60006020820190508181036000830152614971818461441e565b905092915050565b6000602082019050818103600083015261499281614507565b9050919050565b600060208201905081810360008301526149b28161452a565b9050919050565b600060208201905081810360008301526149d28161454d565b9050919050565b600060208201905081810360008301526149f281614570565b9050919050565b60006020820190508181036000830152614a1281614593565b9050919050565b60006020820190508181036000830152614a32816145b6565b9050919050565b60006020820190508181036000830152614a52816145d9565b9050919050565b60006020820190508181036000830152614a72816145fc565b9050919050565b60006020820190508181036000830152614a928161461f565b9050919050565b60006020820190508181036000830152614ab281614642565b9050919050565b60006020820190508181036000830152614ad281614665565b9050919050565b60006020820190508181036000830152614af281614688565b9050919050565b60006020820190508181036000830152614b12816146ab565b9050919050565b60006020820190508181036000830152614b32816146ce565b9050919050565b60006020820190508181036000830152614b52816146f1565b9050919050565b60006020820190508181036000830152614b7281614714565b9050919050565b60006020820190508181036000830152614b9281614737565b9050919050565b60006020820190508181036000830152614bb28161475a565b9050919050565b60006020820190508181036000830152614bd28161477d565b9050919050565b60006020820190508181036000830152614bf2816147a0565b9050919050565b60006020820190508181036000830152614c12816147e6565b9050919050565b60006020820190508181036000830152614c3281614809565b9050919050565b60006020820190508181036000830152614c528161482c565b9050919050565b6000602082019050614c6e600083018461485e565b92915050565b6000614c7e614c8f565b9050614c8a8282614fc0565b919050565b6000604051905090565b600067ffffffffffffffff821115614cb457614cb3615127565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ce057614cdf615127565b5b614ce98261516f565b9050602081019050919050565b600067ffffffffffffffff821115614d1157614d10615127565b5b614d1a8261516f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614dce82614f42565b9150614dd983614f42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e0e57614e0d61506b565b5b828201905092915050565b6000614e2482614f42565b9150614e2f83614f42565b925082614e3f57614e3e61509a565b5b828204905092915050565b6000614e5582614f42565b9150614e6083614f42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e9957614e9861506b565b5b828202905092915050565b6000614eaf82614f42565b9150614eba83614f42565b925082821015614ecd57614ecc61506b565b5b828203905092915050565b6000614ee382614f22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f79578082015181840152602081019050614f5e565b83811115614f88576000848401525b50505050565b60006002820490506001821680614fa657607f821691505b60208210811415614fba57614fb96150c9565b5b50919050565b614fc98261516f565b810181811067ffffffffffffffff82111715614fe857614fe7615127565b5b80604052505050565b6000614ffc82614f42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561502f5761502e61506b565b5b600182019050919050565b600061504582614f42565b915061505083614f42565b9250826150605761505f61509a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d53473a2055736572206973206e6f742077686974656c697374656400000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d53473a2054686520636f6e7472616374206973207061757365640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f722070726573616c6500000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d53473a20496e73756666696369656e742066756e6473000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d53473a20496e76616c6964206d696e7420616d6f756e740000000000000000600082015250565b7f4d53473a2055524920717565727920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f72207075626c696373616c6500000000000000000000000000000000602082015250565b7f4d53473a204d617820737570706c792065786365656465640000000000000000600082015250565b61574f81614ed8565b811461575a57600080fd5b50565b61576681614eea565b811461577157600080fd5b50565b61577d81614ef6565b811461578857600080fd5b50565b61579481614f42565b811461579f57600080fd5b5056fea2646970667358221220c13ea399061ae3daf5665789c7e083bc503d26ec9b86f7a2e1f0960e2bf9076c64736f6c6343000807003368747470733a2f2f7368696261726d792d6e66742e636f6d2f6e6674732f706c616365686f6c6465722e6a736f6e68747470733a2f2f7368696261726d792d6e66742e636f6d2f6e6674732f6a736f6e732f
Deployed Bytecode
0x6080604052600436106103765760003560e01c80638da5cb5b116101d1578063c54e73e311610102578063e985e9c5116100a0578063f2fde38b1161006f578063f2fde38b14610c90578063f9d38e9714610cb9578063fa65b59214610cf6578063fdea8e0b14610d3357610376565b8063e985e9c514610bd6578063eb95416014610c13578063efbd73f414610c3e578063f19e75d414610c6757610376565b8063e08823c5116100dc578063e08823c514610b32578063e0a8085314610b5b578063e688008014610b84578063e9058c3714610bad57610376565b8063c54e73e314610aa1578063c87b56dd14610aca578063d5abeb0114610b0757610376565b8063a0712d681161016f578063ae13730711610149578063ae137307146109fb578063b88d4fde14610a24578063b8d988a214610a4d578063c243c6c114610a7857610376565b8063a0712d681461098b578063a22cb465146109a7578063a45ba8e7146109d057610376565b806394354fd0116101ab57806394354fd0146108cd57806395d89b41146108f857806396bfc229146109235780639c70b5121461096057610376565b80638da5cb5b1461084e5780638fdcf9421461087957806392829d74146108a257610376565b8063438b6300116102ab5780636352211e116102495780636f8b44b0116102235780636f8b44b0146107a857806370a08231146107d1578063715018a61461080e5780637ec4a6591461082557610376565b80636352211e146107175780636905b184146107545780636f636e8b1461077d57610376565b80635183022711610285578063518302271461066b5780635503a0e8146106965780635c975abb146106c157806362b99ad4146106ec57610376565b8063438b6300146105dc57806347ee0394146106195780634fdd43cb1461064257610376565b806316c38b3c116103185780632a23d07d116102f25780632a23d07d146105555780633c952764146105805780633ccfd60b146105a957806342842e0e146105b357610376565b806316c38b3c146104d857806318160ddd1461050157806323b872dd1461052c57610376565b806307b9f56d1161035457806307b9f56d1461040c578063081812fc14610449578063095ea7b31461048657806316ba10e0146104af57610376565b806301bf66481461037b57806301ffc9a7146103a457806306fdde03146103e1575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d9190614008565b610d5e565b005b3480156103b057600080fd5b506103cb60048036038101906103c69190614241565b610e35565b6040516103d8919061493c565b60405180910390f35b3480156103ed57600080fd5b506103f6610f17565b6040516104039190614957565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190614008565b610fa9565b6040516104409190614c59565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b91906142e4565b610fc1565b60405161047d91906148b3565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a8919061418b565b611046565b005b3480156104bb57600080fd5b506104d660048036038101906104d1919061429b565b61115e565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190614214565b6111f4565b005b34801561050d57600080fd5b5061051661128d565b6040516105239190614c59565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190614075565b61129e565b005b34801561056157600080fd5b5061056a6112fe565b6040516105779190614c59565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190614214565b611304565b005b6105b161139d565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190614075565b61141d565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190614008565b61143d565b604051610610919061491a565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614008565b611548565b005b34801561064e57600080fd5b506106696004803603810190610664919061429b565b61161f565b005b34801561067757600080fd5b506106806116b5565b60405161068d919061493c565b60405180910390f35b3480156106a257600080fd5b506106ab6116c8565b6040516106b89190614957565b60405180910390f35b3480156106cd57600080fd5b506106d6611756565b6040516106e3919061493c565b60405180910390f35b3480156106f857600080fd5b50610701611769565b60405161070e9190614957565b60405180910390f35b34801561072357600080fd5b5061073e600480360381019061073991906142e4565b6117f7565b60405161074b91906148b3565b60405180910390f35b34801561076057600080fd5b5061077b600480360381019061077691906142e4565b6118a9565b005b34801561078957600080fd5b5061079261192f565b60405161079f9190614c59565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca91906142e4565b611935565b005b3480156107dd57600080fd5b506107f860048036038101906107f39190614008565b6119bb565b6040516108059190614c59565b60405180910390f35b34801561081a57600080fd5b50610823611a73565b005b34801561083157600080fd5b5061084c6004803603810190610847919061429b565b611afb565b005b34801561085a57600080fd5b50610863611b91565b60405161087091906148b3565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b91906142e4565b611bbb565b005b3480156108ae57600080fd5b506108b7611c41565b6040516108c49190614c59565b60405180910390f35b3480156108d957600080fd5b506108e2611c47565b6040516108ef9190614c59565b60405180910390f35b34801561090457600080fd5b5061090d611c4d565b60405161091a9190614957565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614008565b611cdf565b604051610957919061493c565b60405180910390f35b34801561096c57600080fd5b50610975611d72565b604051610982919061493c565b60405180910390f35b6109a560048036038101906109a091906142e4565b611d85565b005b3480156109b357600080fd5b506109ce60048036038101906109c9919061414b565b612157565b005b3480156109dc57600080fd5b506109e561216d565b6040516109f29190614957565b60405180910390f35b348015610a0757600080fd5b50610a226004803603810190610a1d91906142e4565b6121fb565b005b348015610a3057600080fd5b50610a4b6004803603810190610a4691906140c8565b612281565b005b348015610a5957600080fd5b50610a626122e3565b604051610a6f9190614c59565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906141cb565b6122e9565b005b348015610aad57600080fd5b50610ac86004803603810190610ac39190614214565b6123fa565b005b348015610ad657600080fd5b50610af16004803603810190610aec91906142e4565b612493565b604051610afe9190614957565b60405180910390f35b348015610b1357600080fd5b50610b1c6125ec565b604051610b299190614c59565b60405180910390f35b348015610b3e57600080fd5b50610b596004803603810190610b5491906142e4565b6125f2565b005b348015610b6757600080fd5b50610b826004803603810190610b7d9190614214565b612797565b005b348015610b9057600080fd5b50610bab6004803603810190610ba691906142e4565b612830565b005b348015610bb957600080fd5b50610bd46004803603810190610bcf91906142e4565b6128b6565b005b348015610be257600080fd5b50610bfd6004803603810190610bf89190614035565b61293c565b604051610c0a919061493c565b60405180910390f35b348015610c1f57600080fd5b50610c286129d0565b604051610c359190614c59565b60405180910390f35b348015610c4a57600080fd5b50610c656004803603810190610c609190614311565b6129d6565b005b348015610c7357600080fd5b50610c8e6004803603810190610c8991906142e4565b612cbd565b005b348015610c9c57600080fd5b50610cb76004803603810190610cb29190614008565b612d96565b005b348015610cc557600080fd5b50610ce06004803603810190610cdb9190614008565b612e8e565b604051610ced9190614c59565b60405180910390f35b348015610d0257600080fd5b50610d1d6004803603810190610d189190614008565b612ea6565b604051610d2a919061493c565b60405180910390f35b348015610d3f57600080fd5b50610d48612ec6565b604051610d55919061493c565b60405180910390f35b610d66612ed9565b73ffffffffffffffffffffffffffffffffffffffff16610d84611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190614b79565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f0057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f105750610f0f82612ee1565b5b9050919050565b606060008054610f2690614f8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5290614f8e565b8015610f9f5780601f10610f7457610100808354040283529160200191610f9f565b820191906000526020600020905b815481529060010190602001808311610f8257829003601f168201915b5050505050905090565b60156020528060005260406000206000915090505481565b6000610fcc82612f4b565b61100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290614b39565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611051826117f7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990614bd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110e1612ed9565b73ffffffffffffffffffffffffffffffffffffffff161480611110575061110f8161110a612ed9565b61293c565b5b61114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690614a99565b60405180910390fd5b6111598383612fb7565b505050565b611166612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611184611b91565b73ffffffffffffffffffffffffffffffffffffffff16146111da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d190614b79565b60405180910390fd5b80600990805190602001906111f0929190613d7e565b5050565b6111fc612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661121a611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790614b79565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60006112996007613070565b905090565b6112af6112a9612ed9565b8261307e565b6112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e590614bf9565b60405180910390fd5b6112f983838361315c565b505050565b600b5481565b61130c612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661132a611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790614b79565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b60006113a7611b91565b73ffffffffffffffffffffffffffffffffffffffff16476040516113ca9061489e565b60006040518083038185875af1925050503d8060008114611407576040519150601f19603f3d011682016040523d82523d6000602084013e61140c565b606091505b505090508061141a57600080fd5b50565b61143883838360405180602001604052806000815250612281565b505050565b6060600061144a836119bb565b905060008167ffffffffffffffff81111561146857611467615127565b5b6040519080825280602002602001820160405280156114965781602001602082028036833780820191505090505b50905060006001905060005b83811080156114b35750600d548211155b1561153c5760006114c3836117f7565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611528578284838151811061150d5761150c6150f8565b5b602002602001018181525050818061152490614ff1565b9250505b828061153390614ff1565b935050506114a2565b82945050505050919050565b611550612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661156e611b91565b73ffffffffffffffffffffffffffffffffffffffff16146115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb90614b79565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611627612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611645611b91565b73ffffffffffffffffffffffffffffffffffffffff161461169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169290614b79565b60405180910390fd5b80600a90805190602001906116b1929190613d7e565b5050565b601260039054906101000a900460ff1681565b600980546116d590614f8e565b80601f016020809104026020016040519081016040528092919081815260200182805461170190614f8e565b801561174e5780601f106117235761010080835404028352916020019161174e565b820191906000526020600020905b81548152906001019060200180831161173157829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b6008805461177690614f8e565b80601f01602080910402602001604051908101604052809291908181526020018280546117a290614f8e565b80156117ef5780601f106117c4576101008083540402835291602001916117ef565b820191906000526020600020905b8154815290600101906020018083116117d257829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790614ad9565b60405180910390fd5b80915050919050565b6118b1612ed9565b73ffffffffffffffffffffffffffffffffffffffff166118cf611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614b79565b60405180910390fd5b80600c8190555050565b600f5481565b61193d612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661195b611b91565b73ffffffffffffffffffffffffffffffffffffffff16146119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890614b79565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390614ab9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a7b612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611a99611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690614b79565b60405180910390fd5b611af960006133c3565b565b611b03612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611b21611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90614b79565b60405180910390fd5b8060089080519060200190611b8d929190613d7e565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bc3612ed9565b73ffffffffffffffffffffffffffffffffffffffff16611be1611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614b79565b60405180910390fd5b80600b8190555050565b600c5481565b60115481565b606060018054611c5c90614f8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8890614f8e565b8015611cd55780601f10611caa57610100808354040283529160200191611cd5565b820191906000526020600020905b815481529060010190602001808311611cb857829003601f168201915b5050505050905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d6b5750611d3c611b91565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b601260029054906101000a900460ff1681565b8060011515601260019054906101000a900460ff1615151415611ea15760011515601260029054906101000a900460ff1615151415611e0757611dc733611cdf565b611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd90614979565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548282611e5a9190614dc3565b1115611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9290614b19565b60405180910390fd5b50611f37565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548282611ef49190614dc3565b1115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90614c19565b60405180910390fd5b505b600081118015611f4957506011548111155b611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614b99565b60405180910390fd5b600e5481611f966007613070565b611fa09190614dc3565b1115611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614c39565b60405180910390fd5b601260009054906101000a900460ff1615612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202890614a19565b60405180910390fd5b60011515601260019054906101000a900460ff16151514156120a25781600b5461205b9190614e4a565b34101561209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490614b59565b60405180910390fd5b6120f3565b81600c546120b09190614e4a565b3410156120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990614b59565b60405180910390fd5b5b600282141561210c57612107336003613489565b61214b565b600482141561212557612120336006613489565b61214a565b600682141561213e57612139336009613489565b612149565b6121483383613489565b5b5b5b61215361139d565b5050565b612169612162612ed9565b8383613595565b5050565b600a805461217a90614f8e565b80601f01602080910402602001604051908101604052809291908181526020018280546121a690614f8e565b80156121f35780601f106121c8576101008083540402835291602001916121f3565b820191906000526020600020905b8154815290600101906020018083116121d657829003601f168201915b505050505081565b612203612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612221611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226e90614b79565b60405180910390fd5b8060108190555050565b61229261228c612ed9565b8361307e565b6122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614bf9565b60405180910390fd5b6122dd84848484613702565b50505050565b60105481565b6122f1612ed9565b73ffffffffffffffffffffffffffffffffffffffff1661230f611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614b79565b60405180910390fd5b60005b81518110156123f65760016013600084848151811061238a576123896150f8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123ee90614ff1565b915050612368565b5050565b612402612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612420611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90614b79565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b606061249e82612f4b565b6124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614bb9565b60405180910390fd5b60001515601260039054906101000a900460ff161515141561258b57600a805461250690614f8e565b80601f016020809104026020016040519081016040528092919081815260200182805461253290614f8e565b801561257f5780601f106125545761010080835404028352916020019161257f565b820191906000526020600020905b81548152906001019060200180831161256257829003601f168201915b505050505090506125e7565b600061259561375e565b905060008151116125b557604051806020016040528060008152506125e3565b806125bf846137f0565b60096040516020016125d39392919061486d565b6040516020818303038152906040525b9150505b919050565b600d5481565b6125fa612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612618611b91565b73ffffffffffffffffffffffffffffffffffffffff161461266e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266590614b79565b60405180910390fd5b601260009054906101000a900460ff16156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614a19565b60405180910390fd5b6126c83382613951565b60011515601260019054906101000a900460ff161515141561273e57601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061273490614ff1565b9190505550612794565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061278e90614ff1565b91905055505b50565b61279f612ed9565b73ffffffffffffffffffffffffffffffffffffffff166127bd611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a90614b79565b60405180910390fd5b80601260036101000a81548160ff02191690831515021790555050565b612838612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612856611b91565b73ffffffffffffffffffffffffffffffffffffffff16146128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390614b79565b60405180910390fd5b80600e8190555050565b6128be612ed9565b73ffffffffffffffffffffffffffffffffffffffff166128dc611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292990614b79565b60405180910390fd5b80600f8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b8160011515601260019054906101000a900460ff1615151415612af25760011515601260029054906101000a900460ff1615151415612a5857612a1833611cdf565b612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e90614979565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548282612aab9190614dc3565b1115612aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae390614b19565b60405180910390fd5b50612b88565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548282612b459190614dc3565b1115612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d90614c19565b60405180910390fd5b505b600081118015612b9a57506011548111155b612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614b99565b60405180910390fd5b600e5481612be76007613070565b612bf19190614dc3565b1115612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614c39565b60405180910390fd5b612c3a612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612c58611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca590614b79565b60405180910390fd5b612cb88284613489565b505050565b612cc5612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612ce3611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3090614b79565b60405180910390fd5b601260009054906101000a900460ff1615612d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8090614a19565b60405180910390fd5b612d933382613489565b50565b612d9e612ed9565b73ffffffffffffffffffffffffffffffffffffffff16612dbc611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0990614b79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e79906149b9565b60405180910390fd5b612e8b816133c3565b50565b60146020528060005260406000206000915090505481565b60136020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661302a836117f7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061308982612f4b565b6130c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bf90614a79565b60405180910390fd5b60006130d3836117f7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061314257508373ffffffffffffffffffffffffffffffffffffffff1661312a84610fc1565b73ffffffffffffffffffffffffffffffffffffffff16145b806131535750613152818561293c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661317c826117f7565b73ffffffffffffffffffffffffffffffffffffffff16146131d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c9906149d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323990614a39565b60405180910390fd5b61324d83838361396f565b613258600082612fb7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132a89190614ea4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132ff9190614dc3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133be838383613974565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156135905761349e6007613979565b6134b1836134ac6007613070565b613951565b60011515601260019054906101000a900460ff161515141561352757601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061351d90614ff1565b919050555061357d565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061357790614ff1565b91905055505b808061358890614ff1565b91505061348c565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fb90614a59565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516136f5919061493c565b60405180910390a3505050565b61370d84848461315c565b6137198484848461398f565b613758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374f90614999565b60405180910390fd5b50505050565b60606008805461376d90614f8e565b80601f016020809104026020016040519081016040528092919081815260200182805461379990614f8e565b80156137e65780601f106137bb576101008083540402835291602001916137e6565b820191906000526020600020905b8154815290600101906020018083116137c957829003601f168201915b5050505050905090565b60606000821415613838576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061394c565b600082905060005b6000821461386a57808061385390614ff1565b915050600a826138639190614e19565b9150613840565b60008167ffffffffffffffff81111561388657613885615127565b5b6040519080825280601f01601f1916602001820160405280156138b85781602001600182028036833780820191505090505b5090505b60008514613945576001826138d19190614ea4565b9150600a856138e0919061503a565b60306138ec9190614dc3565b60f81b818381518110613902576139016150f8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561393e9190614e19565b94506138bc565b8093505050505b919050565b61396b828260405180602001604052806000815250613b26565b5050565b505050565b505050565b6001816000016000828254019250508190555050565b60006139b08473ffffffffffffffffffffffffffffffffffffffff16613b81565b15613b19578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026139d9612ed9565b8786866040518563ffffffff1660e01b81526004016139fb94939291906148ce565b602060405180830381600087803b158015613a1557600080fd5b505af1925050508015613a4657506040513d601f19601f82011682018060405250810190613a43919061426e565b60015b613ac9573d8060008114613a76576040519150601f19603f3d011682016040523d82523d6000602084013e613a7b565b606091505b50600081511415613ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab890614999565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613b1e565b600190505b949350505050565b613b308383613ba4565b613b3d600084848461398f565b613b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7390614999565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0b90614af9565b60405180910390fd5b613c1d81612f4b565b15613c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c54906149f9565b60405180910390fd5b613c696000838361396f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613cb99190614dc3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613d7a60008383613974565b5050565b828054613d8a90614f8e565b90600052602060002090601f016020900481019282613dac5760008555613df3565b82601f10613dc557805160ff1916838001178555613df3565b82800160010185558215613df3579182015b82811115613df2578251825591602001919060010190613dd7565b5b509050613e009190613e04565b5090565b5b80821115613e1d576000816000905550600101613e05565b5090565b6000613e34613e2f84614c99565b614c74565b90508083825260208201905082856020860282011115613e5757613e5661515b565b5b60005b85811015613e875781613e6d8882613f15565b845260208401935060208301925050600181019050613e5a565b5050509392505050565b6000613ea4613e9f84614cc5565b614c74565b905082815260208101848484011115613ec057613ebf615160565b5b613ecb848285614f4c565b509392505050565b6000613ee6613ee184614cf6565b614c74565b905082815260208101848484011115613f0257613f01615160565b5b613f0d848285614f4c565b509392505050565b600081359050613f2481615746565b92915050565b600082601f830112613f3f57613f3e615156565b5b8135613f4f848260208601613e21565b91505092915050565b600081359050613f678161575d565b92915050565b600081359050613f7c81615774565b92915050565b600081519050613f9181615774565b92915050565b600082601f830112613fac57613fab615156565b5b8135613fbc848260208601613e91565b91505092915050565b600082601f830112613fda57613fd9615156565b5b8135613fea848260208601613ed3565b91505092915050565b6000813590506140028161578b565b92915050565b60006020828403121561401e5761401d61516a565b5b600061402c84828501613f15565b91505092915050565b6000806040838503121561404c5761404b61516a565b5b600061405a85828601613f15565b925050602061406b85828601613f15565b9150509250929050565b60008060006060848603121561408e5761408d61516a565b5b600061409c86828701613f15565b93505060206140ad86828701613f15565b92505060406140be86828701613ff3565b9150509250925092565b600080600080608085870312156140e2576140e161516a565b5b60006140f087828801613f15565b945050602061410187828801613f15565b935050604061411287828801613ff3565b925050606085013567ffffffffffffffff81111561413357614132615165565b5b61413f87828801613f97565b91505092959194509250565b600080604083850312156141625761416161516a565b5b600061417085828601613f15565b925050602061418185828601613f58565b9150509250929050565b600080604083850312156141a2576141a161516a565b5b60006141b085828601613f15565b92505060206141c185828601613ff3565b9150509250929050565b6000602082840312156141e1576141e061516a565b5b600082013567ffffffffffffffff8111156141ff576141fe615165565b5b61420b84828501613f2a565b91505092915050565b60006020828403121561422a5761422961516a565b5b600061423884828501613f58565b91505092915050565b6000602082840312156142575761425661516a565b5b600061426584828501613f6d565b91505092915050565b6000602082840312156142845761428361516a565b5b600061429284828501613f82565b91505092915050565b6000602082840312156142b1576142b061516a565b5b600082013567ffffffffffffffff8111156142cf576142ce615165565b5b6142db84828501613fc5565b91505092915050565b6000602082840312156142fa576142f961516a565b5b600061430884828501613ff3565b91505092915050565b600080604083850312156143285761432761516a565b5b600061433685828601613ff3565b925050602061434785828601613f15565b9150509250929050565b600061435d838361484f565b60208301905092915050565b61437281614ed8565b82525050565b600061438382614d4c565b61438d8185614d7a565b935061439883614d27565b8060005b838110156143c95781516143b08882614351565b97506143bb83614d6d565b92505060018101905061439c565b5085935050505092915050565b6143df81614eea565b82525050565b60006143f082614d57565b6143fa8185614d8b565b935061440a818560208601614f5b565b6144138161516f565b840191505092915050565b600061442982614d62565b6144338185614da7565b9350614443818560208601614f5b565b61444c8161516f565b840191505092915050565b600061446282614d62565b61446c8185614db8565b935061447c818560208601614f5b565b80840191505092915050565b6000815461449581614f8e565b61449f8186614db8565b945060018216600081146144ba57600181146144cb576144fe565b60ff198316865281860193506144fe565b6144d485614d37565b60005b838110156144f6578154818901526001820191506020810190506144d7565b838801955050505b50505092915050565b6000614514601c83614da7565b915061451f82615180565b602082019050919050565b6000614537603283614da7565b9150614542826151a9565b604082019050919050565b600061455a602683614da7565b9150614565826151f8565b604082019050919050565b600061457d602583614da7565b915061458882615247565b604082019050919050565b60006145a0601c83614da7565b91506145ab82615296565b602082019050919050565b60006145c3601b83614da7565b91506145ce826152bf565b602082019050919050565b60006145e6602483614da7565b91506145f1826152e8565b604082019050919050565b6000614609601983614da7565b915061461482615337565b602082019050919050565b600061462c602c83614da7565b915061463782615360565b604082019050919050565b600061464f603883614da7565b915061465a826153af565b604082019050919050565b6000614672602a83614da7565b915061467d826153fe565b604082019050919050565b6000614695602983614da7565b91506146a08261544d565b604082019050919050565b60006146b8602083614da7565b91506146c38261549c565b602082019050919050565b60006146db602d83614da7565b91506146e6826154c5565b604082019050919050565b60006146fe602c83614da7565b915061470982615514565b604082019050919050565b6000614721601783614da7565b915061472c82615563565b602082019050919050565b6000614744602083614da7565b915061474f8261558c565b602082019050919050565b6000614767601883614da7565b9150614772826155b5565b602082019050919050565b600061478a602483614da7565b9150614795826155de565b604082019050919050565b60006147ad602183614da7565b91506147b88261562d565b604082019050919050565b60006147d0600083614d9c565b91506147db8261567c565b600082019050919050565b60006147f3603183614da7565b91506147fe8261567f565b604082019050919050565b6000614816603083614da7565b9150614821826156ce565b604082019050919050565b6000614839601883614da7565b91506148448261571d565b602082019050919050565b61485881614f42565b82525050565b61486781614f42565b82525050565b60006148798286614457565b91506148858285614457565b91506148918284614488565b9150819050949350505050565b60006148a9826147c3565b9150819050919050565b60006020820190506148c86000830184614369565b92915050565b60006080820190506148e36000830187614369565b6148f06020830186614369565b6148fd604083018561485e565b818103606083015261490f81846143e5565b905095945050505050565b600060208201905081810360008301526149348184614378565b905092915050565b600060208201905061495160008301846143d6565b92915050565b60006020820190508181036000830152614971818461441e565b905092915050565b6000602082019050818103600083015261499281614507565b9050919050565b600060208201905081810360008301526149b28161452a565b9050919050565b600060208201905081810360008301526149d28161454d565b9050919050565b600060208201905081810360008301526149f281614570565b9050919050565b60006020820190508181036000830152614a1281614593565b9050919050565b60006020820190508181036000830152614a32816145b6565b9050919050565b60006020820190508181036000830152614a52816145d9565b9050919050565b60006020820190508181036000830152614a72816145fc565b9050919050565b60006020820190508181036000830152614a928161461f565b9050919050565b60006020820190508181036000830152614ab281614642565b9050919050565b60006020820190508181036000830152614ad281614665565b9050919050565b60006020820190508181036000830152614af281614688565b9050919050565b60006020820190508181036000830152614b12816146ab565b9050919050565b60006020820190508181036000830152614b32816146ce565b9050919050565b60006020820190508181036000830152614b52816146f1565b9050919050565b60006020820190508181036000830152614b7281614714565b9050919050565b60006020820190508181036000830152614b9281614737565b9050919050565b60006020820190508181036000830152614bb28161475a565b9050919050565b60006020820190508181036000830152614bd28161477d565b9050919050565b60006020820190508181036000830152614bf2816147a0565b9050919050565b60006020820190508181036000830152614c12816147e6565b9050919050565b60006020820190508181036000830152614c3281614809565b9050919050565b60006020820190508181036000830152614c528161482c565b9050919050565b6000602082019050614c6e600083018461485e565b92915050565b6000614c7e614c8f565b9050614c8a8282614fc0565b919050565b6000604051905090565b600067ffffffffffffffff821115614cb457614cb3615127565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ce057614cdf615127565b5b614ce98261516f565b9050602081019050919050565b600067ffffffffffffffff821115614d1157614d10615127565b5b614d1a8261516f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614dce82614f42565b9150614dd983614f42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e0e57614e0d61506b565b5b828201905092915050565b6000614e2482614f42565b9150614e2f83614f42565b925082614e3f57614e3e61509a565b5b828204905092915050565b6000614e5582614f42565b9150614e6083614f42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e9957614e9861506b565b5b828202905092915050565b6000614eaf82614f42565b9150614eba83614f42565b925082821015614ecd57614ecc61506b565b5b828203905092915050565b6000614ee382614f22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f79578082015181840152602081019050614f5e565b83811115614f88576000848401525b50505050565b60006002820490506001821680614fa657607f821691505b60208210811415614fba57614fb96150c9565b5b50919050565b614fc98261516f565b810181811067ffffffffffffffff82111715614fe857614fe7615127565b5b80604052505050565b6000614ffc82614f42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561502f5761502e61506b565b5b600182019050919050565b600061504582614f42565b915061505083614f42565b9250826150605761505f61509a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d53473a2055736572206973206e6f742077686974656c697374656400000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d53473a2054686520636f6e7472616374206973207061757365640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f722070726573616c6500000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d53473a20496e73756666696369656e742066756e6473000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d53473a20496e76616c6964206d696e7420616d6f756e740000000000000000600082015250565b7f4d53473a2055524920717565727920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f72207075626c696373616c6500000000000000000000000000000000602082015250565b7f4d53473a204d617820737570706c792065786365656465640000000000000000600082015250565b61574f81614ed8565b811461575a57600080fd5b50565b61576681614eea565b811461577157600080fd5b50565b61577d81614ef6565b811461578857600080fd5b50565b61579481614f42565b811461579f57600080fd5b5056fea2646970667358221220c13ea399061ae3daf5665789c7e083bc503d26ec9b86f7a2e1f0960e2bf9076c64736f6c63430008070033
Deployed Bytecode Sourcemap
38758:8224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46709:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25574:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39828:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28078:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44822:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45133:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41015:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28828:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39100:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46238:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45470:145;;;:::i;:::-;;29238:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42621:687;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46379:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44968:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39605:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39002:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39498:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38931:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26213:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44201:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39329:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43811:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25943:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;44685:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44075:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39146:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39438:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46836:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39564:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41131:726;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28371:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39042:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44354:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29494:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39382:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46500:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45244:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43334:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39214:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42066:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45358:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43942:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44532:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28597:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39252:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42428:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41888:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39759:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39670:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39531:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46709:119;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46815:5:::1;46781:24;:31;46806:5;46781:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46709:119:::0;:::o;25574:305::-;25676:4;25728:25;25713:40;;;:11;:40;;;;:105;;;;25785:33;25770:48;;;:11;:48;;;;25713:105;:158;;;;25835:36;25859:11;25835:23;:36::i;:::-;25713:158;25693:178;;25574:305;;;:::o;26519:100::-;26573:13;26606:5;26599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:100;:::o;39828:65::-;;;;;;;;;;;;;;;;;:::o;28078:221::-;28154:7;28182:16;28190:7;28182;:16::i;:::-;28174:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28267:15;:24;28283:7;28267:24;;;;;;;;;;;;;;;;;;;;;28260:31;;28078:221;;;:::o;27601:411::-;27682:13;27698:23;27713:7;27698:14;:23::i;:::-;27682:39;;27746:5;27740:11;;:2;:11;;;;27732:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:5;27824:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27849:37;27866:5;27873:12;:10;:12::i;:::-;27849:16;:37::i;:::-;27824:62;27802:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:21;27992:2;27996:7;27983:8;:21::i;:::-;27671:341;27601:411;;:::o;44822:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44910:10:::1;44898:9;:22;;;;;;;;;;;;:::i;:::-;;44822:106:::0;:::o;45133:83::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45202:6:::1;45193;;:15;;;;;;;;;;;;;;;;;;45133:83:::0;:::o;41015:95::-;41059:7;41086:16;:6;:14;:16::i;:::-;41079:23;;41015:95;:::o;28828:339::-;29023:41;29042:12;:10;:12::i;:::-;29056:7;29023:18;:41::i;:::-;29015:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:28;29141:4;29147:2;29151:7;29131:9;:28::i;:::-;28828:339;;;:::o;39100:39::-;;;;:::o;46238:101::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46325:6:::1;46307:15;;:24;;;;;;;;;;;;;;;;;;46238:101:::0;:::o;45470:145::-;45517:7;45538;:5;:7::i;:::-;45530:21;;45559;45530:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45516:69;;;45604:2;45596:11;;;;;;45505:110;45470:145::o;29238:185::-;29376:39;29393:4;29399:2;29403:7;29376:39;;;;;;;;;;;;:16;:39::i;:::-;29238:185;;;:::o;42621:687::-;42681:16;42710:23;42736:17;42746:6;42736:9;:17::i;:::-;42710:43;;42764:30;42811:15;42797:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42764:63;;42840:22;42865:1;42840:26;;42877:23;42917:351;42942:15;42924;:33;:64;;;;;42979:9;;42961:14;:27;;42924:64;42917:351;;;43005:25;43033:23;43041:14;43033:7;:23::i;:::-;43005:51;;43098:6;43077:27;;:17;:27;;;43073:151;;;43158:14;43125:13;43139:15;43125:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;43191:17;;;;;:::i;:::-;;;;43073:151;43240:16;;;;;:::i;:::-;;;;42990:278;42917:351;;;43287:13;43280:20;;;;;;42621:687;;;:::o;46379:113::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46480:4:::1;46446:24;:31;46471:5;46446:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;46379:113:::0;:::o;44968:138::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45080:18:::1;45060:17;:38;;;;;;;;;;;;:::i;:::-;;44968:138:::0;:::o;39605:28::-;;;;;;;;;;;;;:::o;39002:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39498:26::-;;;;;;;;;;;;;:::o;38931:64::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26213:239::-;26285:7;26305:13;26321:7;:16;26329:7;26321:16;;;;;;;;;;;;;;;;;;;;;26305:32;;26373:1;26356:19;;:5;:19;;;;26348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26439:5;26432:12;;;26213:239;;;:::o;44201:100::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44288:5:::1;44271:14;:22;;;;44201:100:::0;:::o;39329:46::-;;;;:::o;43811:94::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43890:7:::1;43878:9;:19;;;;43811:94:::0;:::o;25943:208::-;26015:7;26060:1;26043:19;;:5;:19;;;;26035:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:9;:16;26137:5;26127:16;;;;;;;;;;;;;;;;26120:23;;25943:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;44685:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44773:10:::1;44761:9;:22;;;;;;;;;;;;:::i;:::-;;44685:106:::0;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;44075:94::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44156:5:::1;44142:11;:19;;;;44075:94:::0;:::o;39146:42::-;;;;:::o;39438:37::-;;;;:::o;26688:104::-;26744:13;26777:7;26770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26688:104;:::o;46836:143::-;46895:4;46919:24;:31;46944:5;46919:31;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46964:7;:5;:7::i;:::-;46955:16;;:5;:16;;;46919:52;46912:59;;46836:143;;;:::o;39564:34::-;;;;;;;;;;;;;:::o;41131:726::-;41196:11;40153:4;40142:15;;:7;;;;;;;;;;;:15;;;40139:630;;;40196:4;40177:23;;:15;;;;;;;;;;;:23;;;40174:129;;;40229:25;40243:10;40229:13;:25::i;:::-;40221:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40174:129;40319:24;40346:27;:39;40374:10;40346:39;;;;;;;;;;;;;;;;40319:66;;40442:25;;40427:11;40408:16;:30;;;;:::i;:::-;:59;;40400:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;40159:370;40139:630;;;40550:24;40577:30;:42;40608:10;40577:42;;;;;;;;;;;;;;;;40550:69;;40676:28;;40661:11;40642:16;:30;;;;:::i;:::-;:62;;40634:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;40535:234;40139:630;40803:1;40789:11;:15;:52;;;;;40823:18;;40808:11;:33;;40789:52;40781:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40923:14;;40908:11;40889:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:48;;40881:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41229:6:::1;;;;;;;;;;;41228:7;41220:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41302:4;41291:15;;:7;;;;;;;;;;;:15;;;41288:231;;;41358:11;41344;;:25;;;;:::i;:::-;41331:9;:38;;41323:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;41288:231;;;41468:11;41451:14;;:28;;;;:::i;:::-;41438:9;:41;;41430:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41288:231;41549:1;41534:11;:16;41531:296;;;41567:24;41577:10;41589:1;41567:9;:24::i;:::-;41531:296;;;41627:1;41612:11;:16;41609:218;;;41645:24;41655:10;41667:1;41645:9;:24::i;:::-;41609:218;;;41706:1;41691:11;:16;41688:139;;;41724:24;41734:10;41746:1;41724:9;:24::i;:::-;41688:139;;;41781:34;41791:10;41803:11;41781:9;:34::i;:::-;41688:139;41609:218;41531:296;41839:10;:8;:10::i;:::-;41131:726:::0;;:::o;28371:155::-;28466:52;28485:12;:10;:12::i;:::-;28499:8;28509;28466:18;:52::i;:::-;28371:155;;:::o;39042:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44354:128::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44469:5:::1;44438:28;:36;;;;44354:128:::0;:::o;29494:328::-;29669:41;29688:12;:10;:12::i;:::-;29702:7;29669:18;:41::i;:::-;29661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29775:39;29789:4;29795:2;29799:7;29808:5;29775:13;:39::i;:::-;29494:328;;;;:::o;39382:49::-;;;;:::o;46500:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46587:9:::1;46582:112;46604:6;:13;46601:1;:16;46582:112;;;46677:4;46639:24;:35;46664:6;46671:1;46664:9;;;;;;;;:::i;:::-;;;;;;;;46639:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;46619:3;;;;;:::i;:::-;;;;46582:112;;;;46500:201:::0;:::o;45244:85::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45315:6:::1;45305:7;;:16;;;;;;;;;;;;;;;;;;45244:85:::0;:::o;43334:446::-;43408:13;43442:17;43450:8;43442:7;:17::i;:::-;43434:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43529:5;43517:17;;:8;;;;;;;;;;;:17;;;43513:74;;;43558:17;43551:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43513:74;43599:28;43630:10;:8;:10::i;:::-;43599:41;;43691:1;43666:14;43660:28;:32;:112;;;;;;;;;;;;;;;;;43719:14;43735:19;:8;:17;:19::i;:::-;43756:9;43702:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43660:112;43653:119;;;43334:446;;;;:::o;39214:31::-;;;;:::o;42066:352::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42148:6:::1;;;;;;;;;;;42147:7;42139:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42199:31;42209:10;42221:8;42199:9;:31::i;:::-;42257:4;42246:15;;:7;;;;;;;;;;;:15;;;42243:168;;;42278:30;:42;42309:10;42278:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;42243:168;;;42355:30;:42;42386:10;42355:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;42243:168;42066:352:::0;:::o;45358:87::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45431:6:::1;45420:8;;:17;;;;;;;;;;;;;;;;;;45358:87:::0;:::o;43942:104::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44031:7:::1;44014:14;:24;;;;43942:104:::0;:::o;44532:122::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44641:5:::1;44613:25;:33;;;;44532:122:::0;:::o;28597:164::-;28694:4;28718:18;:25;28737:5;28718:25;;;;;;;;;;;;;;;:35;28744:8;28718:35;;;;;;;;;;;;;;;;;;;;;;;;;28711:42;;28597:164;;;;:::o;39252:36::-;;;;:::o;42428:161::-;42514:11;40153:4;40142:15;;:7;;;;;;;;;;;:15;;;40139:630;;;40196:4;40177:23;;:15;;;;;;;;;;;:23;;;40174:129;;;40229:25;40243:10;40229:13;:25::i;:::-;40221:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40174:129;40319:24;40346:27;:39;40374:10;40346:39;;;;;;;;;;;;;;;;40319:66;;40442:25;;40427:11;40408:16;:30;;;;:::i;:::-;:59;;40400:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;40159:370;40139:630;;;40550:24;40577:30;:42;40608:10;40577:42;;;;;;;;;;;;;;;;40550:69;;40676:28;;40661:11;40642:16;:30;;;;:::i;:::-;:62;;40634:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;40535:234;40139:630;40803:1;40789:11;:15;:52;;;;;40823:18;;40808:11;:33;;40789:52;40781:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40923:14;;40908:11;40889:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:48;;40881:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5775:12:::1;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42548:33:::2;42558:9;42569:11;42548:9;:33::i;:::-;42428:161:::0;;;:::o;41888:170::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41965:6:::1;;;;;;;;;;;41964:7;41956:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42016:34;42026:10;42038:11;42016:9;:34::i;:::-;41888:170:::0;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;39759:62::-;;;;;;;;;;;;;;;;;:::o;39670:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;39531:26::-;;;;;;;;;;;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;18328:157::-;18413:4;18452:25;18437:40;;;:11;:40;;;;18430:47;;18328:157;;;:::o;31332:127::-;31397:4;31449:1;31421:30;;:7;:16;31429:7;31421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31414:37;;31332:127;;;:::o;35478:174::-;35580:2;35553:15;:24;35569:7;35553:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35636:7;35632:2;35598:46;;35607:23;35622:7;35607:14;:23::i;:::-;35598:46;;;;;;;;;;;;35478:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;31626:348::-;31719:4;31744:16;31752:7;31744;:16::i;:::-;31736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31820:13;31836:23;31851:7;31836:14;:23::i;:::-;31820:39;;31889:5;31878:16;;:7;:16;;;:51;;;;31922:7;31898:31;;:20;31910:7;31898:11;:20::i;:::-;:31;;;31878:51;:87;;;;31933:32;31950:5;31957:7;31933:16;:32::i;:::-;31878:87;31870:96;;;31626:348;;;;:::o;34735:625::-;34894:4;34867:31;;:23;34882:7;34867:14;:23::i;:::-;:31;;;34859:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1;34959:16;;:2;:16;;;;34951:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:39;35050:4;35056:2;35060:7;35029:20;:39::i;:::-;35133:29;35150:1;35154:7;35133:8;:29::i;:::-;35194:1;35175:9;:15;35185:4;35175:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35223:1;35206:9;:13;35216:2;35206:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35254:2;35235:7;:16;35243:7;35235:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35293:7;35289:2;35274:27;;35283:4;35274:27;;;;;;;;;;;;35314:38;35334:4;35340:2;35344:7;35314:19;:38::i;:::-;34735:625;;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;45641:425::-;45725:9;45720:339;45744:11;45740:1;:15;45720:339;;;45777:18;:6;:16;:18::i;:::-;45812:38;45822:9;45833:16;:6;:14;:16::i;:::-;45812:9;:38::i;:::-;45881:4;45870:15;;:7;;;;;;;;;;;:15;;;45867:181;;;45906:27;:39;45934:10;45906:39;;;;;;;;;;;;;;;;:41;;;;;;;;;:::i;:::-;;;;;;45867:181;;;45988:30;:42;46019:10;45988:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;45867:181;45757:3;;;;;:::i;:::-;;;;45720:339;;;;45641:425;;:::o;35794:315::-;35949:8;35940:17;;:5;:17;;;;35932:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:8;35998:18;:25;36017:5;35998:25;;;;;;;;;;;;;;;:35;36024:8;35998:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36082:8;36060:41;;36075:5;36060:41;;;36092:8;36060:41;;;;;;:::i;:::-;;;;;;;;35794:315;;;:::o;30704:::-;30861:28;30871:4;30877:2;30881:7;30861:9;:28::i;:::-;30908:48;30931:4;30937:2;30941:7;30950:5;30908:22;:48::i;:::-;30900:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:315;;;;:::o;46091:110::-;46151:13;46184:9;46177:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46091:110;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;32316:110::-;32392:26;32402:2;32406:7;32392:26;;;;;;;;;;;;:9;:26::i;:::-;32316:110;;:::o;38045:126::-;;;;:::o;38556:125::-;;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;36674:799::-;36829:4;36850:15;:2;:13;;;:15::i;:::-;36846:620;;;36902:2;36886:36;;;36923:12;:10;:12::i;:::-;36937:4;36943:7;36952:5;36886:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36882:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37145:1;37128:6;:13;:18;37124:272;;;37171:60;;;;;;;;;;:::i;:::-;;;;;;;;37124:272;37346:6;37340:13;37331:6;37327:2;37323:15;37316:38;36882:529;37019:41;;;37009:51;;;:6;:51;;;;37002:58;;;;;36846:620;37450:4;37443:11;;36674:799;;;;;;;:::o;32653:321::-;32783:18;32789:2;32793:7;32783:5;:18::i;:::-;32834:54;32865:1;32869:2;32873:7;32882:5;32834:22;:54::i;:::-;32812:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32653:321;;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;33310:439::-;33404:1;33390:16;;:2;:16;;;;33382:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33463:16;33471:7;33463;:16::i;:::-;33462:17;33454:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33525:45;33554:1;33558:2;33562:7;33525:20;:45::i;:::-;33600:1;33583:9;:13;33593:2;33583:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33631:2;33612:7;:16;33620:7;33612:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33676:7;33672:2;33651:33;;33668:1;33651:33;;;;;;;;;;;;33697:44;33725:1;33729:2;33733:7;33697:19;:44::i;:::-;33310:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:474::-;9238:6;9246;9295:2;9283:9;9274:7;9270:23;9266:32;9263:119;;;9301:79;;:::i;:::-;9263:119;9421:1;9446:53;9491:7;9482:6;9471:9;9467:22;9446:53;:::i;:::-;9436:63;;9392:117;9548:2;9574:53;9619:7;9610:6;9599:9;9595:22;9574:53;:::i;:::-;9564:63;;9519:118;9170:474;;;;;:::o;9650:179::-;9719:10;9740:46;9782:3;9774:6;9740:46;:::i;:::-;9818:4;9813:3;9809:14;9795:28;;9650:179;;;;:::o;9835:118::-;9922:24;9940:5;9922:24;:::i;:::-;9917:3;9910:37;9835:118;;:::o;9989:732::-;10108:3;10137:54;10185:5;10137:54;:::i;:::-;10207:86;10286:6;10281:3;10207:86;:::i;:::-;10200:93;;10317:56;10367:5;10317:56;:::i;:::-;10396:7;10427:1;10412:284;10437:6;10434:1;10431:13;10412:284;;;10513:6;10507:13;10540:63;10599:3;10584:13;10540:63;:::i;:::-;10533:70;;10626:60;10679:6;10626:60;:::i;:::-;10616:70;;10472:224;10459:1;10456;10452:9;10447:14;;10412:284;;;10416:14;10712:3;10705:10;;10113:608;;;9989:732;;;;:::o;10727:109::-;10808:21;10823:5;10808:21;:::i;:::-;10803:3;10796:34;10727:109;;:::o;10842:360::-;10928:3;10956:38;10988:5;10956:38;:::i;:::-;11010:70;11073:6;11068:3;11010:70;:::i;:::-;11003:77;;11089:52;11134:6;11129:3;11122:4;11115:5;11111:16;11089:52;:::i;:::-;11166:29;11188:6;11166:29;:::i;:::-;11161:3;11157:39;11150:46;;10932:270;10842:360;;;;:::o;11208:364::-;11296:3;11324:39;11357:5;11324:39;:::i;:::-;11379:71;11443:6;11438:3;11379:71;:::i;:::-;11372:78;;11459:52;11504:6;11499:3;11492:4;11485:5;11481:16;11459:52;:::i;:::-;11536:29;11558:6;11536:29;:::i;:::-;11531:3;11527:39;11520:46;;11300:272;11208:364;;;;:::o;11578:377::-;11684:3;11712:39;11745:5;11712:39;:::i;:::-;11767:89;11849:6;11844:3;11767:89;:::i;:::-;11760:96;;11865:52;11910:6;11905:3;11898:4;11891:5;11887:16;11865:52;:::i;:::-;11942:6;11937:3;11933:16;11926:23;;11688:267;11578:377;;;;:::o;11985:845::-;12088:3;12125:5;12119:12;12154:36;12180:9;12154:36;:::i;:::-;12206:89;12288:6;12283:3;12206:89;:::i;:::-;12199:96;;12326:1;12315:9;12311:17;12342:1;12337:137;;;;12488:1;12483:341;;;;12304:520;;12337:137;12421:4;12417:9;12406;12402:25;12397:3;12390:38;12457:6;12452:3;12448:16;12441:23;;12337:137;;12483:341;12550:38;12582:5;12550:38;:::i;:::-;12610:1;12624:154;12638:6;12635:1;12632:13;12624:154;;;12712:7;12706:14;12702:1;12697:3;12693:11;12686:35;12762:1;12753:7;12749:15;12738:26;;12660:4;12657:1;12653:12;12648:17;;12624:154;;;12807:6;12802:3;12798:16;12791:23;;12490:334;;12304:520;;12092:738;;11985:845;;;;:::o;12836:366::-;12978:3;12999:67;13063:2;13058:3;12999:67;:::i;:::-;12992:74;;13075:93;13164:3;13075:93;:::i;:::-;13193:2;13188:3;13184:12;13177:19;;12836:366;;;:::o;13208:::-;13350:3;13371:67;13435:2;13430:3;13371:67;:::i;:::-;13364:74;;13447:93;13536:3;13447:93;:::i;:::-;13565:2;13560:3;13556:12;13549:19;;13208:366;;;:::o;13580:::-;13722:3;13743:67;13807:2;13802:3;13743:67;:::i;:::-;13736:74;;13819:93;13908:3;13819:93;:::i;:::-;13937:2;13932:3;13928:12;13921:19;;13580:366;;;:::o;13952:::-;14094:3;14115:67;14179:2;14174:3;14115:67;:::i;:::-;14108:74;;14191:93;14280:3;14191:93;:::i;:::-;14309:2;14304:3;14300:12;14293:19;;13952:366;;;:::o;14324:::-;14466:3;14487:67;14551:2;14546:3;14487:67;:::i;:::-;14480:74;;14563:93;14652:3;14563:93;:::i;:::-;14681:2;14676:3;14672:12;14665:19;;14324:366;;;:::o;14696:::-;14838:3;14859:67;14923:2;14918:3;14859:67;:::i;:::-;14852:74;;14935:93;15024:3;14935:93;:::i;:::-;15053:2;15048:3;15044:12;15037:19;;14696:366;;;:::o;15068:::-;15210:3;15231:67;15295:2;15290:3;15231:67;:::i;:::-;15224:74;;15307:93;15396:3;15307:93;:::i;:::-;15425:2;15420:3;15416:12;15409:19;;15068:366;;;:::o;15440:::-;15582:3;15603:67;15667:2;15662:3;15603:67;:::i;:::-;15596:74;;15679:93;15768:3;15679:93;:::i;:::-;15797:2;15792:3;15788:12;15781:19;;15440:366;;;:::o;15812:::-;15954:3;15975:67;16039:2;16034:3;15975:67;:::i;:::-;15968:74;;16051:93;16140:3;16051:93;:::i;:::-;16169:2;16164:3;16160:12;16153:19;;15812:366;;;:::o;16184:::-;16326:3;16347:67;16411:2;16406:3;16347:67;:::i;:::-;16340:74;;16423:93;16512:3;16423:93;:::i;:::-;16541:2;16536:3;16532:12;16525:19;;16184:366;;;:::o;16556:::-;16698:3;16719:67;16783:2;16778:3;16719:67;:::i;:::-;16712:74;;16795:93;16884:3;16795:93;:::i;:::-;16913:2;16908:3;16904:12;16897:19;;16556:366;;;:::o;16928:::-;17070:3;17091:67;17155:2;17150:3;17091:67;:::i;:::-;17084:74;;17167:93;17256:3;17167:93;:::i;:::-;17285:2;17280:3;17276:12;17269:19;;16928:366;;;:::o;17300:::-;17442:3;17463:67;17527:2;17522:3;17463:67;:::i;:::-;17456:74;;17539:93;17628:3;17539:93;:::i;:::-;17657:2;17652:3;17648:12;17641:19;;17300:366;;;:::o;17672:::-;17814:3;17835:67;17899:2;17894:3;17835:67;:::i;:::-;17828:74;;17911:93;18000:3;17911:93;:::i;:::-;18029:2;18024:3;18020:12;18013:19;;17672:366;;;:::o;18044:::-;18186:3;18207:67;18271:2;18266:3;18207:67;:::i;:::-;18200:74;;18283:93;18372:3;18283:93;:::i;:::-;18401:2;18396:3;18392:12;18385:19;;18044:366;;;:::o;18416:::-;18558:3;18579:67;18643:2;18638:3;18579:67;:::i;:::-;18572:74;;18655:93;18744:3;18655:93;:::i;:::-;18773:2;18768:3;18764:12;18757:19;;18416:366;;;:::o;18788:::-;18930:3;18951:67;19015:2;19010:3;18951:67;:::i;:::-;18944:74;;19027:93;19116:3;19027:93;:::i;:::-;19145:2;19140:3;19136:12;19129:19;;18788:366;;;:::o;19160:::-;19302:3;19323:67;19387:2;19382:3;19323:67;:::i;:::-;19316:74;;19399:93;19488:3;19399:93;:::i;:::-;19517:2;19512:3;19508:12;19501:19;;19160:366;;;:::o;19532:::-;19674:3;19695:67;19759:2;19754:3;19695:67;:::i;:::-;19688:74;;19771:93;19860:3;19771:93;:::i;:::-;19889:2;19884:3;19880:12;19873:19;;19532:366;;;:::o;19904:::-;20046:3;20067:67;20131:2;20126:3;20067:67;:::i;:::-;20060:74;;20143:93;20232:3;20143:93;:::i;:::-;20261:2;20256:3;20252:12;20245:19;;19904:366;;;:::o;20276:398::-;20435:3;20456:83;20537:1;20532:3;20456:83;:::i;:::-;20449:90;;20548:93;20637:3;20548:93;:::i;:::-;20666:1;20661:3;20657:11;20650:18;;20276:398;;;:::o;20680:366::-;20822:3;20843:67;20907:2;20902:3;20843:67;:::i;:::-;20836:74;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20680:366;;;:::o;21052:::-;21194:3;21215:67;21279:2;21274:3;21215:67;:::i;:::-;21208:74;;21291:93;21380:3;21291:93;:::i;:::-;21409:2;21404:3;21400:12;21393:19;;21052:366;;;:::o;21424:::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:108::-;21873:24;21891:5;21873:24;:::i;:::-;21868:3;21861:37;21796:108;;:::o;21910:118::-;21997:24;22015:5;21997:24;:::i;:::-;21992:3;21985:37;21910:118;;:::o;22034:589::-;22259:3;22281:95;22372:3;22363:6;22281:95;:::i;:::-;22274:102;;22393:95;22484:3;22475:6;22393:95;:::i;:::-;22386:102;;22505:92;22593:3;22584:6;22505:92;:::i;:::-;22498:99;;22614:3;22607:10;;22034:589;;;;;;:::o;22629:379::-;22813:3;22835:147;22978:3;22835:147;:::i;:::-;22828:154;;22999:3;22992:10;;22629:379;;;:::o;23014:222::-;23107:4;23145:2;23134:9;23130:18;23122:26;;23158:71;23226:1;23215:9;23211:17;23202:6;23158:71;:::i;:::-;23014:222;;;;:::o;23242:640::-;23437:4;23475:3;23464:9;23460:19;23452:27;;23489:71;23557:1;23546:9;23542:17;23533:6;23489:71;:::i;:::-;23570:72;23638:2;23627:9;23623:18;23614:6;23570:72;:::i;:::-;23652;23720:2;23709:9;23705:18;23696:6;23652:72;:::i;:::-;23771:9;23765:4;23761:20;23756:2;23745:9;23741:18;23734:48;23799:76;23870:4;23861:6;23799:76;:::i;:::-;23791:84;;23242:640;;;;;;;:::o;23888:373::-;24031:4;24069:2;24058:9;24054:18;24046:26;;24118:9;24112:4;24108:20;24104:1;24093:9;24089:17;24082:47;24146:108;24249:4;24240:6;24146:108;:::i;:::-;24138:116;;23888:373;;;;:::o;24267:210::-;24354:4;24392:2;24381:9;24377:18;24369:26;;24405:65;24467:1;24456:9;24452:17;24443:6;24405:65;:::i;:::-;24267:210;;;;:::o;24483:313::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24683:9;24677:4;24673:20;24669:1;24658:9;24654:17;24647:47;24711:78;24784:4;24775:6;24711:78;:::i;:::-;24703:86;;24483:313;;;;:::o;24802:419::-;24968:4;25006:2;24995:9;24991:18;24983:26;;25055:9;25049:4;25045:20;25041:1;25030:9;25026:17;25019:47;25083:131;25209:4;25083:131;:::i;:::-;25075:139;;24802:419;;;:::o;25227:::-;25393:4;25431:2;25420:9;25416:18;25408:26;;25480:9;25474:4;25470:20;25466:1;25455:9;25451:17;25444:47;25508:131;25634:4;25508:131;:::i;:::-;25500:139;;25227:419;;;:::o;25652:::-;25818:4;25856:2;25845:9;25841:18;25833:26;;25905:9;25899:4;25895:20;25891:1;25880:9;25876:17;25869:47;25933:131;26059:4;25933:131;:::i;:::-;25925:139;;25652:419;;;:::o;26077:::-;26243:4;26281:2;26270:9;26266:18;26258:26;;26330:9;26324:4;26320:20;26316:1;26305:9;26301:17;26294:47;26358:131;26484:4;26358:131;:::i;:::-;26350:139;;26077:419;;;:::o;26502:::-;26668:4;26706:2;26695:9;26691:18;26683:26;;26755:9;26749:4;26745:20;26741:1;26730:9;26726:17;26719:47;26783:131;26909:4;26783:131;:::i;:::-;26775:139;;26502:419;;;:::o;26927:::-;27093:4;27131:2;27120:9;27116:18;27108:26;;27180:9;27174:4;27170:20;27166:1;27155:9;27151:17;27144:47;27208:131;27334:4;27208:131;:::i;:::-;27200:139;;26927:419;;;:::o;27352:::-;27518:4;27556:2;27545:9;27541:18;27533:26;;27605:9;27599:4;27595:20;27591:1;27580:9;27576:17;27569:47;27633:131;27759:4;27633:131;:::i;:::-;27625:139;;27352:419;;;:::o;27777:::-;27943:4;27981:2;27970:9;27966:18;27958:26;;28030:9;28024:4;28020:20;28016:1;28005:9;28001:17;27994:47;28058:131;28184:4;28058:131;:::i;:::-;28050:139;;27777:419;;;:::o;28202:::-;28368:4;28406:2;28395:9;28391:18;28383:26;;28455:9;28449:4;28445:20;28441:1;28430:9;28426:17;28419:47;28483:131;28609:4;28483:131;:::i;:::-;28475:139;;28202:419;;;:::o;28627:::-;28793:4;28831:2;28820:9;28816:18;28808:26;;28880:9;28874:4;28870:20;28866:1;28855:9;28851:17;28844:47;28908:131;29034:4;28908:131;:::i;:::-;28900:139;;28627:419;;;:::o;29052:::-;29218:4;29256:2;29245:9;29241:18;29233:26;;29305:9;29299:4;29295:20;29291:1;29280:9;29276:17;29269:47;29333:131;29459:4;29333:131;:::i;:::-;29325:139;;29052:419;;;:::o;29477:::-;29643:4;29681:2;29670:9;29666:18;29658:26;;29730:9;29724:4;29720:20;29716:1;29705:9;29701:17;29694:47;29758:131;29884:4;29758:131;:::i;:::-;29750:139;;29477:419;;;:::o;29902:::-;30068:4;30106:2;30095:9;30091:18;30083:26;;30155:9;30149:4;30145:20;30141:1;30130:9;30126:17;30119:47;30183:131;30309:4;30183:131;:::i;:::-;30175:139;;29902:419;;;:::o;30327:::-;30493:4;30531:2;30520:9;30516:18;30508:26;;30580:9;30574:4;30570:20;30566:1;30555:9;30551:17;30544:47;30608:131;30734:4;30608:131;:::i;:::-;30600:139;;30327:419;;;:::o;30752:::-;30918:4;30956:2;30945:9;30941:18;30933:26;;31005:9;30999:4;30995:20;30991:1;30980:9;30976:17;30969:47;31033:131;31159:4;31033:131;:::i;:::-;31025:139;;30752:419;;;:::o;31177:::-;31343:4;31381:2;31370:9;31366:18;31358:26;;31430:9;31424:4;31420:20;31416:1;31405:9;31401:17;31394:47;31458:131;31584:4;31458:131;:::i;:::-;31450:139;;31177:419;;;:::o;31602:::-;31768:4;31806:2;31795:9;31791:18;31783:26;;31855:9;31849:4;31845:20;31841:1;31830:9;31826:17;31819:47;31883:131;32009:4;31883:131;:::i;:::-;31875:139;;31602:419;;;:::o;32027:::-;32193:4;32231:2;32220:9;32216:18;32208:26;;32280:9;32274:4;32270:20;32266:1;32255:9;32251:17;32244:47;32308:131;32434:4;32308:131;:::i;:::-;32300:139;;32027:419;;;:::o;32452:::-;32618:4;32656:2;32645:9;32641:18;32633:26;;32705:9;32699:4;32695:20;32691:1;32680:9;32676:17;32669:47;32733:131;32859:4;32733:131;:::i;:::-;32725:139;;32452:419;;;:::o;32877:::-;33043:4;33081:2;33070:9;33066:18;33058:26;;33130:9;33124:4;33120:20;33116:1;33105:9;33101:17;33094:47;33158:131;33284:4;33158:131;:::i;:::-;33150:139;;32877:419;;;:::o;33302:::-;33468:4;33506:2;33495:9;33491:18;33483:26;;33555:9;33549:4;33545:20;33541:1;33530:9;33526:17;33519:47;33583:131;33709:4;33583:131;:::i;:::-;33575:139;;33302:419;;;:::o;33727:::-;33893:4;33931:2;33920:9;33916:18;33908:26;;33980:9;33974:4;33970:20;33966:1;33955:9;33951:17;33944:47;34008:131;34134:4;34008:131;:::i;:::-;34000:139;;33727:419;;;:::o;34152:::-;34318:4;34356:2;34345:9;34341:18;34333:26;;34405:9;34399:4;34395:20;34391:1;34380:9;34376:17;34369:47;34433:131;34559:4;34433:131;:::i;:::-;34425:139;;34152:419;;;:::o;34577:222::-;34670:4;34708:2;34697:9;34693:18;34685:26;;34721:71;34789:1;34778:9;34774:17;34765:6;34721:71;:::i;:::-;34577:222;;;;:::o;34805:129::-;34839:6;34866:20;;:::i;:::-;34856:30;;34895:33;34923:4;34915:6;34895:33;:::i;:::-;34805:129;;;:::o;34940:75::-;34973:6;35006:2;35000:9;34990:19;;34940:75;:::o;35021:311::-;35098:4;35188:18;35180:6;35177:30;35174:56;;;35210:18;;:::i;:::-;35174:56;35260:4;35252:6;35248:17;35240:25;;35320:4;35314;35310:15;35302:23;;35021:311;;;:::o;35338:307::-;35399:4;35489:18;35481:6;35478:30;35475:56;;;35511:18;;:::i;:::-;35475:56;35549:29;35571:6;35549:29;:::i;:::-;35541:37;;35633:4;35627;35623:15;35615:23;;35338:307;;;:::o;35651:308::-;35713:4;35803:18;35795:6;35792:30;35789:56;;;35825:18;;:::i;:::-;35789:56;35863:29;35885:6;35863:29;:::i;:::-;35855:37;;35947:4;35941;35937:15;35929:23;;35651:308;;;:::o;35965:132::-;36032:4;36055:3;36047:11;;36085:4;36080:3;36076:14;36068:22;;35965:132;;;:::o;36103:141::-;36152:4;36175:3;36167:11;;36198:3;36195:1;36188:14;36232:4;36229:1;36219:18;36211:26;;36103:141;;;:::o;36250:114::-;36317:6;36351:5;36345:12;36335:22;;36250:114;;;:::o;36370:98::-;36421:6;36455:5;36449:12;36439:22;;36370:98;;;:::o;36474:99::-;36526:6;36560:5;36554:12;36544:22;;36474:99;;;:::o;36579:113::-;36649:4;36681;36676:3;36672:14;36664:22;;36579:113;;;:::o;36698:184::-;36797:11;36831:6;36826:3;36819:19;36871:4;36866:3;36862:14;36847:29;;36698:184;;;;:::o;36888:168::-;36971:11;37005:6;37000:3;36993:19;37045:4;37040:3;37036:14;37021:29;;36888:168;;;;:::o;37062:147::-;37163:11;37200:3;37185:18;;37062:147;;;;:::o;37215:169::-;37299:11;37333:6;37328:3;37321:19;37373:4;37368:3;37364:14;37349:29;;37215:169;;;;:::o;37390:148::-;37492:11;37529:3;37514:18;;37390:148;;;;:::o;37544:305::-;37584:3;37603:20;37621:1;37603:20;:::i;:::-;37598:25;;37637:20;37655:1;37637:20;:::i;:::-;37632:25;;37791:1;37723:66;37719:74;37716:1;37713:81;37710:107;;;37797:18;;:::i;:::-;37710:107;37841:1;37838;37834:9;37827:16;;37544:305;;;;:::o;37855:185::-;37895:1;37912:20;37930:1;37912:20;:::i;:::-;37907:25;;37946:20;37964:1;37946:20;:::i;:::-;37941:25;;37985:1;37975:35;;37990:18;;:::i;:::-;37975:35;38032:1;38029;38025:9;38020:14;;37855:185;;;;:::o;38046:348::-;38086:7;38109:20;38127:1;38109:20;:::i;:::-;38104:25;;38143:20;38161:1;38143:20;:::i;:::-;38138:25;;38331:1;38263:66;38259:74;38256:1;38253:81;38248:1;38241:9;38234:17;38230:105;38227:131;;;38338:18;;:::i;:::-;38227:131;38386:1;38383;38379:9;38368:20;;38046:348;;;;:::o;38400:191::-;38440:4;38460:20;38478:1;38460:20;:::i;:::-;38455:25;;38494:20;38512:1;38494:20;:::i;:::-;38489:25;;38533:1;38530;38527:8;38524:34;;;38538:18;;:::i;:::-;38524:34;38583:1;38580;38576:9;38568:17;;38400:191;;;;:::o;38597:96::-;38634:7;38663:24;38681:5;38663:24;:::i;:::-;38652:35;;38597:96;;;:::o;38699:90::-;38733:7;38776:5;38769:13;38762:21;38751:32;;38699:90;;;:::o;38795:149::-;38831:7;38871:66;38864:5;38860:78;38849:89;;38795:149;;;:::o;38950:126::-;38987:7;39027:42;39020:5;39016:54;39005:65;;38950:126;;;:::o;39082:77::-;39119:7;39148:5;39137:16;;39082:77;;;:::o;39165:154::-;39249:6;39244:3;39239;39226:30;39311:1;39302:6;39297:3;39293:16;39286:27;39165:154;;;:::o;39325:307::-;39393:1;39403:113;39417:6;39414:1;39411:13;39403:113;;;39502:1;39497:3;39493:11;39487:18;39483:1;39478:3;39474:11;39467:39;39439:2;39436:1;39432:10;39427:15;;39403:113;;;39534:6;39531:1;39528:13;39525:101;;;39614:1;39605:6;39600:3;39596:16;39589:27;39525:101;39374:258;39325:307;;;:::o;39638:320::-;39682:6;39719:1;39713:4;39709:12;39699:22;;39766:1;39760:4;39756:12;39787:18;39777:81;;39843:4;39835:6;39831:17;39821:27;;39777:81;39905:2;39897:6;39894:14;39874:18;39871:38;39868:84;;;39924:18;;:::i;:::-;39868:84;39689:269;39638:320;;;:::o;39964:281::-;40047:27;40069:4;40047:27;:::i;:::-;40039:6;40035:40;40177:6;40165:10;40162:22;40141:18;40129:10;40126:34;40123:62;40120:88;;;40188:18;;:::i;:::-;40120:88;40228:10;40224:2;40217:22;40007:238;39964:281;;:::o;40251:233::-;40290:3;40313:24;40331:5;40313:24;:::i;:::-;40304:33;;40359:66;40352:5;40349:77;40346:103;;;40429:18;;:::i;:::-;40346:103;40476:1;40469:5;40465:13;40458:20;;40251:233;;;:::o;40490:176::-;40522:1;40539:20;40557:1;40539:20;:::i;:::-;40534:25;;40573:20;40591:1;40573:20;:::i;:::-;40568:25;;40612:1;40602:35;;40617:18;;:::i;:::-;40602:35;40658:1;40655;40651:9;40646:14;;40490:176;;;;:::o;40672:180::-;40720:77;40717:1;40710:88;40817:4;40814:1;40807:15;40841:4;40838:1;40831:15;40858:180;40906:77;40903:1;40896:88;41003:4;41000:1;40993:15;41027:4;41024:1;41017:15;41044:180;41092:77;41089:1;41082:88;41189:4;41186:1;41179:15;41213:4;41210:1;41203:15;41230:180;41278:77;41275:1;41268:88;41375:4;41372:1;41365:15;41399:4;41396:1;41389:15;41416:180;41464:77;41461:1;41454:88;41561:4;41558:1;41551:15;41585:4;41582:1;41575:15;41602:117;41711:1;41708;41701:12;41725:117;41834:1;41831;41824:12;41848:117;41957:1;41954;41947:12;41971:117;42080:1;42077;42070:12;42094:117;42203:1;42200;42193:12;42217:102;42258:6;42309:2;42305:7;42300:2;42293:5;42289:14;42285:28;42275:38;;42217:102;;;:::o;42325:178::-;42465:30;42461:1;42453:6;42449:14;42442:54;42325:178;:::o;42509:237::-;42649:34;42645:1;42637:6;42633:14;42626:58;42718:20;42713:2;42705:6;42701:15;42694:45;42509:237;:::o;42752:225::-;42892:34;42888:1;42880:6;42876:14;42869:58;42961:8;42956:2;42948:6;42944:15;42937:33;42752:225;:::o;42983:224::-;43123:34;43119:1;43111:6;43107:14;43100:58;43192:7;43187:2;43179:6;43175:15;43168:32;42983:224;:::o;43213:178::-;43353:30;43349:1;43341:6;43337:14;43330:54;43213:178;:::o;43397:177::-;43537:29;43533:1;43525:6;43521:14;43514:53;43397:177;:::o;43580:223::-;43720:34;43716:1;43708:6;43704:14;43697:58;43789:6;43784:2;43776:6;43772:15;43765:31;43580:223;:::o;43809:175::-;43949:27;43945:1;43937:6;43933:14;43926:51;43809:175;:::o;43990:231::-;44130:34;44126:1;44118:6;44114:14;44107:58;44199:14;44194:2;44186:6;44182:15;44175:39;43990:231;:::o;44227:243::-;44367:34;44363:1;44355:6;44351:14;44344:58;44436:26;44431:2;44423:6;44419:15;44412:51;44227:243;:::o;44476:229::-;44616:34;44612:1;44604:6;44600:14;44593:58;44685:12;44680:2;44672:6;44668:15;44661:37;44476:229;:::o;44711:228::-;44851:34;44847:1;44839:6;44835:14;44828:58;44920:11;44915:2;44907:6;44903:15;44896:36;44711:228;:::o;44945:182::-;45085:34;45081:1;45073:6;45069:14;45062:58;44945:182;:::o;45133:232::-;45273:34;45269:1;45261:6;45257:14;45250:58;45342:15;45337:2;45329:6;45325:15;45318:40;45133:232;:::o;45371:231::-;45511:34;45507:1;45499:6;45495:14;45488:58;45580:14;45575:2;45567:6;45563:15;45556:39;45371:231;:::o;45608:173::-;45748:25;45744:1;45736:6;45732:14;45725:49;45608:173;:::o;45787:182::-;45927:34;45923:1;45915:6;45911:14;45904:58;45787:182;:::o;45975:174::-;46115:26;46111:1;46103:6;46099:14;46092:50;45975:174;:::o;46155:223::-;46295:34;46291:1;46283:6;46279:14;46272:58;46364:6;46359:2;46351:6;46347:15;46340:31;46155:223;:::o;46384:220::-;46524:34;46520:1;46512:6;46508:14;46501:58;46593:3;46588:2;46580:6;46576:15;46569:28;46384:220;:::o;46610:114::-;;:::o;46730:236::-;46870:34;46866:1;46858:6;46854:14;46847:58;46939:19;46934:2;46926:6;46922:15;46915:44;46730:236;:::o;46972:235::-;47112:34;47108:1;47100:6;47096:14;47089:58;47181:18;47176:2;47168:6;47164:15;47157:43;46972:235;:::o;47213:174::-;47353:26;47349:1;47341:6;47337:14;47330:50;47213:174;:::o;47393:122::-;47466:24;47484:5;47466:24;:::i;:::-;47459:5;47456:35;47446:63;;47505:1;47502;47495:12;47446:63;47393:122;:::o;47521:116::-;47591:21;47606:5;47591:21;:::i;:::-;47584:5;47581:32;47571:60;;47627:1;47624;47617:12;47571:60;47521:116;:::o;47643:120::-;47715:23;47732:5;47715:23;:::i;:::-;47708:5;47705:34;47695:62;;47753:1;47750;47743:12;47695:62;47643:120;:::o;47769:122::-;47842:24;47860:5;47842:24;:::i;:::-;47835:5;47832:35;47822:63;;47881:1;47878;47871:12;47822:63;47769:122;:::o
Swarm Source
ipfs://c13ea399061ae3daf5665789c7e083bc503d26ec9b86f7a2e1f0960e2bf9076c
Loading...
Loading
Loading...
Loading
[ 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.