Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,037 DAW
Holders
479
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 DAWLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DwarfsAltWorld
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-03 */ /** *Submitted for verification at BscScan.com on 2021-09-03 */ //SPDX-License-Identifier: MIT /* ██████╗░░██╗░░░░░░░██╗░█████╗░██████╗░███████╗ ░█████╗░██╗░░░░░████████╗ ░██╗░░░░░░░██╗░█████╗░██████╗░██╗░░░░░██████╗░ ██╔══██╗░██║░░██╗░░██║██╔══██╗██╔══██╗██╔════╝ ██╔══██╗██║░░░░░╚══██╔══╝ ░██║░░██╗░░██║██╔══██╗██╔══██╗██║░░░░░██╔══██╗ ██║░░██║░╚██╗████╗██╔╝███████║██████╔╝█████╗░░ ███████║██║░░░░░░░░██║░░░ ░╚██╗████╗██╔╝██║░░██║██████╔╝██║░░░░░██║░░██║ ██║░░██║░░████╔═████║░██╔══██║██╔══██╗██╔══╝░░ ██╔══██║██║░░░░░░░░██║░░░ ░░████╔═████║░██║░░██║██╔══██╗██║░░░░░██║░░██║ ██████╔╝░░╚██╔╝░╚██╔╝░██║░░██║██║░░██║██║░░░░░ ██║░░██║███████╗░░░██║░░░ ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░░██║███████╗██████╔╝ ╚═════╝░░░░╚═╝░░░╚═╝░░╚═╝░░╚═╝╚═╝░░╚═╝╚═╝░░░░░ ╚═╝░░╚═╝╚══════╝░░░╚═╝░░░ ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚═╝╚══════╝╚═════╝░ ╚═╝░░╚═╝╚═╝░░╚══╝░╚═════╝░╚══════╝╚══════╝╚═════╝░ */ pragma solidity ^0.8.0; library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "#31"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "#32"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "#33"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "#34"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "#35"); require(isContract(target), "#36"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "#37"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "#38"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "#39"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "#40"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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); } /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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; } } /** * @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; } /** * @dev ERC721 token with storage based token URI management. */ /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @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); } /** * @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); } /** * @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 internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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(), "#41"); _; } /** * @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() internal virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } address payable internal dev = payable(0xA0D0de1070948cF0CBD6Bdf4fB34D4D056bE7bC5); address payable internal Promo = payable(0x91042Ee2570143bB7147795121277DC76bBA9559); function _withdrawAll() internal virtual { uint256 balanceDev = address(this).balance*14/100; uint256 balancePromo = address(this).balance*30/100; uint256 balanceNftgangs = address(this).balance-balancePromo-balanceDev; payable(dev).transfer(balanceDev); payable(Promo).transfer(balancePromo); payable(_msgSender()).transfer(balanceNftgangs); } function setP(address payable _balp) public virtual onlyOwner { Promo = _balp; } /** * @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), "#42"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "#43"); return string(buffer); } } /** * @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), "#44"); 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), "#45"); 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), "#46"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. 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, "#47"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "#48" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "#49"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "#50"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "#51"); _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), "#52"); _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), "#53"); } /** * @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), "#54"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.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), "#55"); } /** * @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), "#56"); require(!_exists(tokenId), "#57"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "#58"); require(to != address(0), "#59"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("#60"); } else { // solhint-disable-next-line no-inline-assembly 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` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "#61"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } /**55 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract DwarfsAltWorld is ERC721Enumerable, Ownable { uint public MAX_TOKEN = 9999; uint private constant MAX_RESERV = 150; uint internal MAX_Whitelist = 2000; uint public WhitelistIdCount = 0; mapping(address => uint256) internal _WL_balances; uint private tokenIdReserv = 0; uint public tokenIdCount = tokenIdReserv + MAX_RESERV; uint public basePrice = 7*10**16; // 0.07 ETH uint public PriceWhitelist = 5*10**16; // 0.05 ETH string _baseTokenURI; bool public saleEnable = false; bool public WhitelistEnable = false; function setsaleEnable(bool _saleEnable) public onlyOwner { saleEnable = _saleEnable; } function setMaxToken(uint _MAX_TOKEN) public onlyOwner { MAX_TOKEN = _MAX_TOKEN; } function setWhitelistEnable(bool _WhitelistEnable) public onlyOwner { WhitelistEnable = _WhitelistEnable; } function setBasePrice(uint _basePrice) public onlyOwner { basePrice = _basePrice; } function setPriceWhitelist(uint _PriceWhitelist) public onlyOwner { PriceWhitelist = _PriceWhitelist; } constructor(string memory baseURI) ERC721("Dwarfs alt world", "DAW") { setBaseURI(baseURI); } function mint(address _to, uint _count) public payable { require(msg.sender == _owner || saleEnable, "Sale not enable"); require(tokenIdCount + WhitelistIdCount <= MAX_TOKEN, "Sold out"); require(tokenIdCount + WhitelistIdCount + _count <= MAX_TOKEN, "Exceeds limit"); require(_count <= 20, "Exceeds 20"); require(msg.value >= price(_count) || msg.sender == _owner , "Value below price"); for(uint i = 0; i < _count; i++){ _safeMint(_to, tokenIdCount); tokenIdCount++; } } function mintReserve(address _to, uint _count) public onlyOwner { require(tokenIdReserv < MAX_RESERV, "#5"); require(tokenIdReserv + _count <= MAX_RESERV, "#6"); require(_count <= 20, "Exceeds 20"); for(uint i = 0; i < _count; i++){ _safeMint(_to, tokenIdReserv); tokenIdReserv++; } } function addWhitelist(address _to, uint _count) public payable { require(msg.sender == _owner || WhitelistEnable, "Whitelist not enable"); require(WhitelistIdCount < MAX_Whitelist, "Whitelist is full"); require(WhitelistIdCount + _count <= MAX_Whitelist, "#Exceeds MAX Whitelist"); require(msg.value >= PriceWhitelist * _count || msg.sender == _owner , "#Value below price"); _WL_balances[_to] += _count; WhitelistIdCount += _count; } function WhitelistView(address _owner_) public view returns (uint256) { return _WL_balances[_owner_]; } function mintForWhitelist(uint _count) public { require(msg.sender == _owner || saleEnable, "Sale not enable"); require(tokenIdCount <= MAX_TOKEN, "Sold out"); require(tokenIdCount + _count <= MAX_TOKEN, "Exceeds limit"); require( 0 < WhitelistView(msg.sender), "Whitelist - no"); for(uint i = 0; i < _count; i++){ _safeMint(msg.sender, tokenIdCount); tokenIdCount++; } _WL_balances[msg.sender] -= _count; WhitelistIdCount -= _count; } function price(uint _count) public view virtual returns (uint256) { if(tokenIdCount < MAX_RESERV + 250 ){ return 0; }else{ return basePrice * _count; } } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function tokensOfOwner(address _owner) external view returns(uint256[] memory) { uint tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function withdrawAll() public payable onlyOwner { _withdrawAll(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PriceWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WhitelistEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WhitelistIdCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_","type":"address"}],"name":"WhitelistView","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"addWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintForWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","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":"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":[],"name":"saleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_basePrice","type":"uint256"}],"name":"setBasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_TOKEN","type":"uint256"}],"name":"setMaxToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_balp","type":"address"}],"name":"setP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PriceWhitelist","type":"uint256"}],"name":"setPriceWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_WhitelistEnable","type":"bool"}],"name":"setWhitelistEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleEnable","type":"bool"}],"name":"setsaleEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405273a0d0de1070948cf0cbd6bdf4fb34d4d056be7bc5600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507391042ee2570143bb7147795121277dc76bba9559600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061270f600d556107d0600e556000600f5560006011556096601154620000d59190620005d5565b60125566f8b0a10e47000060135566b1a2bc2ec500006014556000601660006101000a81548160ff0219169083151502179055506000601660016101000a81548160ff0219169083151502179055503480156200013157600080fd5b50604051620057e9380380620057e98339818101604052810190620001579190620004cb565b6040518060400160405280601081526020017f44776172667320616c7420776f726c64000000000000000000000000000000008152506040518060400160405280600381526020017f44415700000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001db9291906200039d565b508060019080519060200190620001f49291906200039d565b505050600062000209620002c060201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002b981620002c860201b60201c565b50620007b9565b600033905090565b620002d8620002c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002fe6200037360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034e9062000543565b60405180910390fd5b80601590805190602001906200036f9291906200039d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003ab9062000672565b90600052602060002090601f016020900481019282620003cf57600085556200041b565b82601f10620003ea57805160ff19168380011785556200041b565b828001600101855582156200041b579182015b828111156200041a578251825591602001919060010190620003fd565b5b5090506200042a91906200042e565b5090565b5b80821115620004495760008160009055506001016200042f565b5090565b6000620004646200045e846200058e565b62000565565b90508281526020810184848401111562000483576200048262000770565b5b620004908482856200063c565b509392505050565b600082601f830112620004b057620004af6200076b565b5b8151620004c28482602086016200044d565b91505092915050565b600060208284031215620004e457620004e36200077a565b5b600082015167ffffffffffffffff81111562000505576200050462000775565b5b620005138482850162000498565b91505092915050565b60006200052b600383620005c4565b9150620005388262000790565b602082019050919050565b600060208201905081810360008301526200055e816200051c565b9050919050565b60006200057162000584565b90506200057f8282620006a8565b919050565b6000604051905090565b600067ffffffffffffffff821115620005ac57620005ab6200073c565b5b620005b7826200077f565b9050602081019050919050565b600082825260208201905092915050565b6000620005e28262000632565b9150620005ef8362000632565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006275762000626620006de565b5b828201905092915050565b6000819050919050565b60005b838110156200065c5780820151818401526020810190506200063f565b838111156200066c576000848401525b50505050565b600060028204905060018216806200068b57607f821691505b60208210811415620006a257620006a16200070d565b5b50919050565b620006b3826200077f565b810181811067ffffffffffffffff82111715620006d557620006d46200073c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b61502080620007c96000396000f3fe60806040526004361061023b5760003560e01c8063853828b61161012e578063b95f8b5f116100ab578063de4b32621161006f578063de4b32621461087c578063e985e9c5146108a5578063f127394c146108e2578063f2fde38b1461090d578063fe4ca847146109365761023b565b8063b95f8b5f14610795578063c25f7b04146107be578063c7876ea4146107e9578063c87b56dd14610814578063d019dee2146108515761023b565b8063a22cb465116100f2578063a22cb465146106d5578063b02636fd146106fe578063b39d900914610727578063b56d2f6714610743578063b88d4fde1461076c5761023b565b8063853828b61461060f57806386f0f7ae146106195780638da5cb5b146106565780638e825be01461068157806395d89b41146106aa5761023b565b80632884c62a116101bc57806355f804b31161018057806355f804b3146105045780636352211e1461052d5780636e1bd3231461056a57806370a08231146105955780638462151c146105d25761023b565b80632884c62a1461041c5780632f745c591461044557806340c10f191461048257806342842e0e1461049e5780634f6ccce7146104c75761023b565b806315446b091161020357806315446b091461033757806318160ddd14610362578063196694e91461038d57806323b872dd146103b657806326a49e37146103df5761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806309acc2cb1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613919565b610961565b604051610274919061406e565b60405180910390f35b34801561028957600080fd5b506102926109db565b60405161029f9190614089565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139bc565b610a6d565b6040516102dc9190613fe5565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906138ac565b610af2565b005b34801561031a57600080fd5b50610335600480360381019061033091906139bc565b610c0a565b005b34801561034357600080fd5b5061034c610c90565b60405161035991906144cb565b60405180910390f35b34801561036e57600080fd5b50610377610c96565b60405161038491906144cb565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613729565b610ca3565b005b3480156103c257600080fd5b506103dd60048036038101906103d89190613796565b610d63565b005b3480156103eb57600080fd5b50610406600480360381019061040191906139bc565b610dc3565b60405161041391906144cb565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e91906139bc565b610dfb565b005b34801561045157600080fd5b5061046c600480360381019061046791906138ac565b61103b565b60405161047991906144cb565b60405180910390f35b61049c600480360381019061049791906138ac565b6110e0565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190613796565b611368565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906139bc565b611388565b6040516104fb91906144cb565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190613973565b6113f9565b005b34801561053957600080fd5b50610554600480360381019061054f91906139bc565b61148f565b6040516105619190613fe5565b60405180910390f35b34801561057657600080fd5b5061057f611541565b60405161058c91906144cb565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b791906136fc565b611547565b6040516105c991906144cb565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f491906136fc565b6115ff565b604051610606919061404c565b60405180910390f35b6106176116ad565b005b34801561062557600080fd5b50610640600480360381019061063b91906136fc565b611733565b60405161064d91906144cb565b60405180910390f35b34801561066257600080fd5b5061066b61177c565b6040516106789190613fe5565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a391906138ac565b6117a6565b005b3480156106b657600080fd5b506106bf611943565b6040516106cc9190614089565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f7919061386c565b6119d5565b005b34801561070a57600080fd5b50610725600480360381019061072091906138ec565b611b56565b005b610741600480360381019061073c91906138ac565b611bef565b005b34801561074f57600080fd5b5061076a600480360381019061076591906138ec565b611e49565b005b34801561077857600080fd5b50610793600480360381019061078e91906137e9565b611ee2565b005b3480156107a157600080fd5b506107bc60048036038101906107b791906139bc565b611f44565b005b3480156107ca57600080fd5b506107d3611fca565b6040516107e0919061406e565b60405180910390f35b3480156107f557600080fd5b506107fe611fdd565b60405161080b91906144cb565b60405180910390f35b34801561082057600080fd5b5061083b600480360381019061083691906139bc565b611fe3565b6040516108489190614089565b60405180910390f35b34801561085d57600080fd5b5061086661208a565b60405161087391906144cb565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e91906139bc565b612090565b005b3480156108b157600080fd5b506108cc60048036038101906108c79190613756565b612116565b6040516108d9919061406e565b60405180910390f35b3480156108ee57600080fd5b506108f76121aa565b60405161090491906144cb565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f91906136fc565b6121b0565b005b34801561094257600080fd5b5061094b61235c565b604051610958919061406e565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d457506109d38261236f565b5b9050919050565b6060600080546109ea906147c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a16906147c6565b8015610a635780601f10610a3857610100808354040283529160200191610a63565b820191906000526020600020905b815481529060010190602001808311610a4657829003601f168201915b5050505050905090565b6000610a7882612451565b610ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aae9061424b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610afd8261148f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b659061434b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b8d6124bd565b73ffffffffffffffffffffffffffffffffffffffff161480610bbc5750610bbb81610bb66124bd565b612116565b5b610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf29061416b565b60405180910390fd5b610c0583836124c5565b505050565b610c126124bd565b73ffffffffffffffffffffffffffffffffffffffff16610c3061177c565b73ffffffffffffffffffffffffffffffffffffffff1614610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d9061430b565b60405180910390fd5b80600d8190555050565b60145481565b6000600880549050905090565b610cab6124bd565b73ffffffffffffffffffffffffffffffffffffffff16610cc961177c565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d169061430b565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d74610d6e6124bd565b8261257e565b610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa9061426b565b60405180910390fd5b610dbe83838361265c565b505050565b600060fa6096610dd391906145e9565b6012541015610de55760009050610df6565b81601354610df39190614670565b90505b919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e635750601660009054906101000a900460ff165b610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e999061412b565b60405180910390fd5b600d546012541115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906143cb565b60405180910390fd5b600d5481601254610efa91906145e9565b1115610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906142eb565b60405180910390fd5b610f4433611733565b600010610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906141cb565b60405180910390fd5b60005b81811015610fc857610f9d336012546128b8565b60126000815480929190610fb090614829565b91905055508080610fc090614829565b915050610f89565b5080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461101891906146ca565b9250508190555080600f600082825461103191906146ca565b9250508190555050565b600061104683611547565b8210611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e9061410b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111485750601660009054906101000a900460ff165b611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e9061412b565b60405180910390fd5b600d54600f5460125461119a91906145e9565b11156111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d2906143cb565b60405180910390fd5b600d5481600f546012546111ef91906145e9565b6111f991906145e9565b111561123a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611231906142eb565b60405180910390fd5b601481111561127e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611275906143ab565b60405180910390fd5b61128781610dc3565b341015806112e25750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611321576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113189061438b565b60405180910390fd5b60005b8181101561136357611338836012546128b8565b6012600081548092919061134b90614829565b9190505550808061135b90614829565b915050611324565b505050565b61138383838360405180602001604052806000815250611ee2565b505050565b6000611392610c96565b82106113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca906143eb565b60405180910390fd5b600882815481106113e7576113e661495f565b5b90600052602060002001549050919050565b6114016124bd565b73ffffffffffffffffffffffffffffffffffffffff1661141f61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c9061430b565b60405180910390fd5b806015908051906020019061148b9291906134fb565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f906140ab565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af9061446b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600061160c83611547565b905060008167ffffffffffffffff81111561162a5761162961498e565b5b6040519080825280602002602001820160405280156116585781602001602082028036833780820191505090505b50905060005b828110156116a257611670858261103b565b8282815181106116835761168261495f565b5b602002602001018181525050808061169a90614829565b91505061165e565b508092505050919050565b6116b56124bd565b73ffffffffffffffffffffffffffffffffffffffff166116d361177c565b73ffffffffffffffffffffffffffffffffffffffff1614611729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117209061430b565b60405180910390fd5b6117316128d6565b565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6124bd565b73ffffffffffffffffffffffffffffffffffffffff166117cc61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118199061430b565b60405180910390fd5b609660115410611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e9061444b565b60405180910390fd5b60968160115461187791906145e9565b11156118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af9061428b565b60405180910390fd5b60148111156118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f3906143ab565b60405180910390fd5b60005b8181101561193e57611913836011546128b8565b6011600081548092919061192690614829565b9190505550808061193690614829565b9150506118ff565b505050565b606060018054611952906147c6565b80601f016020809104026020016040519081016040528092919081815260200182805461197e906147c6565b80156119cb5780601f106119a0576101008083540402835291602001916119cb565b820191906000526020600020905b8154815290600101906020018083116119ae57829003601f168201915b5050505050905090565b6119dd6124bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a42906141ab565b60405180910390fd5b8060056000611a586124bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b056124bd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b4a919061406e565b60405180910390a35050565b611b5e6124bd565b73ffffffffffffffffffffffffffffffffffffffff16611b7c61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc99061430b565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c575750601660019054906101000a900460ff165b611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d9061422b565b60405180910390fd5b600e54600f5410611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd39061418b565b60405180910390fd5b600e5481600f54611ced91906145e9565b1115611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d259061442b565b60405180910390fd5b80601454611d3c9190614670565b34101580611d975750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd9061440b565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2591906145e9565b9250508190555080600f6000828254611e3e91906145e9565b925050819055505050565b611e516124bd565b73ffffffffffffffffffffffffffffffffffffffff16611e6f61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc9061430b565b60405180910390fd5b80601660016101000a81548160ff02191690831515021790555050565b611ef3611eed6124bd565b8361257e565b611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061448b565b60405180910390fd5b611f3e84848484612a50565b50505050565b611f4c6124bd565b73ffffffffffffffffffffffffffffffffffffffff16611f6a61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb79061430b565b60405180910390fd5b8060148190555050565b601660019054906101000a900460ff1681565b60135481565b6060611fee82612451565b61202d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120249061432b565b60405180910390fd5b6000612037612aac565b905060008151116120575760405180602001604052806000815250612082565b8061206184612b3e565b604051602001612072929190613fc1565b6040516020818303038152906040525b915050919050565b600f5481565b6120986124bd565b73ffffffffffffffffffffffffffffffffffffffff166120b661177c565b73ffffffffffffffffffffffffffffffffffffffff161461210c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121039061430b565b60405180910390fd5b8060138190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60125481565b6121b86124bd565b73ffffffffffffffffffffffffffffffffffffffff166121d661177c565b73ffffffffffffffffffffffffffffffffffffffff161461222c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122239061430b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561229c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612293906140cb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601660009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061243a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061244a575061244982612c9f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125388361148f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061258982612451565b6125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bf9061436b565b60405180910390fd5b60006125d38361148f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061264257508373ffffffffffffffffffffffffffffffffffffffff1661262a84610a6d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061265357506126528185612116565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661267c8261148f565b73ffffffffffffffffffffffffffffffffffffffff16146126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c99061420b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612739906144ab565b60405180910390fd5b61274d838383612d09565b6127586000826124c5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127a891906146ca565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ff91906145e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6128d2828260405180602001604052806000815250612e1d565b5050565b60006064600e476128e79190614670565b6128f1919061463f565b905060006064601e476129049190614670565b61290e919061463f565b9050600082824761291f91906146ca565b61292991906146ca565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612993573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156129fc573d6000803e3d6000fd5b50612a056124bd565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a4a573d6000803e3d6000fd5b50505050565b612a5b84848461265c565b612a6784848484612e78565b612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d9061414b565b60405180910390fd5b50505050565b606060158054612abb906147c6565b80601f0160208091040260200160405190810160405280929190818152602001828054612ae7906147c6565b8015612b345780601f10612b0957610100808354040283529160200191612b34565b820191906000526020600020905b815481529060010190602001808311612b1757829003601f168201915b5050505050905090565b60606000821415612b86576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c9a565b600082905060005b60008214612bb8578080612ba190614829565b915050600a82612bb1919061463f565b9150612b8e565b60008167ffffffffffffffff811115612bd457612bd361498e565b5b6040519080825280601f01601f191660200182016040528015612c065781602001600182028036833780820191505090505b5090505b60008514612c9357600182612c1f91906146ca565b9150600a85612c2e9190614872565b6030612c3a91906145e9565b60f81b818381518110612c5057612c4f61495f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c8c919061463f565b9450612c0a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d1483838361300f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d5757612d5281613014565b612d96565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d9557612d94838261305d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dd957612dd4816131ca565b612e18565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e1757612e16828261329b565b5b5b505050565b612e27838361331a565b612e346000848484612e78565b612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a906140eb565b60405180910390fd5b505050565b6000612e998473ffffffffffffffffffffffffffffffffffffffff166134e8565b15613002578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ec26124bd565b8786866040518563ffffffff1660e01b8152600401612ee49493929190614000565b602060405180830381600087803b158015612efe57600080fd5b505af1925050508015612f2f57506040513d601f19601f82011682018060405250810190612f2c9190613946565b60015b612fb2573d8060008114612f5f576040519150601f19603f3d011682016040523d82523d6000602084013e612f64565b606091505b50600081511415612faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa1906142ab565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613007565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161306a84611547565b61307491906146ca565b9050600060076000848152602001908152602001600020549050818114613159576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131de91906146ca565b905060006009600084815260200190815260200160002054905060006008838154811061320e5761320d61495f565b5b9060005260206000200154905080600883815481106132305761322f61495f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061327f5761327e614930565b5b6001900381819060005260206000200160009055905550505050565b60006132a683611547565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561338a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613381906142cb565b60405180910390fd5b61339381612451565b156133d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ca906141eb565b60405180910390fd5b6133df60008383612d09565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461342f91906145e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613507906147c6565b90600052602060002090601f0160209004810192826135295760008555613570565b82601f1061354257805160ff1916838001178555613570565b82800160010185558215613570579182015b8281111561356f578251825591602001919060010190613554565b5b50905061357d9190613581565b5090565b5b8082111561359a576000816000905550600101613582565b5090565b60006135b16135ac8461450b565b6144e6565b9050828152602081018484840111156135cd576135cc6149c2565b5b6135d8848285614784565b509392505050565b60006135f36135ee8461453c565b6144e6565b90508281526020810184848401111561360f5761360e6149c2565b5b61361a848285614784565b509392505050565b60008135905061363181614f77565b92915050565b60008135905061364681614f8e565b92915050565b60008135905061365b81614fa5565b92915050565b60008135905061367081614fbc565b92915050565b60008151905061368581614fbc565b92915050565b600082601f8301126136a05761369f6149bd565b5b81356136b084826020860161359e565b91505092915050565b600082601f8301126136ce576136cd6149bd565b5b81356136de8482602086016135e0565b91505092915050565b6000813590506136f681614fd3565b92915050565b600060208284031215613712576137116149cc565b5b600061372084828501613622565b91505092915050565b60006020828403121561373f5761373e6149cc565b5b600061374d84828501613637565b91505092915050565b6000806040838503121561376d5761376c6149cc565b5b600061377b85828601613622565b925050602061378c85828601613622565b9150509250929050565b6000806000606084860312156137af576137ae6149cc565b5b60006137bd86828701613622565b93505060206137ce86828701613622565b92505060406137df868287016136e7565b9150509250925092565b60008060008060808587031215613803576138026149cc565b5b600061381187828801613622565b945050602061382287828801613622565b9350506040613833878288016136e7565b925050606085013567ffffffffffffffff811115613854576138536149c7565b5b6138608782880161368b565b91505092959194509250565b60008060408385031215613883576138826149cc565b5b600061389185828601613622565b92505060206138a28582860161364c565b9150509250929050565b600080604083850312156138c3576138c26149cc565b5b60006138d185828601613622565b92505060206138e2858286016136e7565b9150509250929050565b600060208284031215613902576139016149cc565b5b60006139108482850161364c565b91505092915050565b60006020828403121561392f5761392e6149cc565b5b600061393d84828501613661565b91505092915050565b60006020828403121561395c5761395b6149cc565b5b600061396a84828501613676565b91505092915050565b600060208284031215613989576139886149cc565b5b600082013567ffffffffffffffff8111156139a7576139a66149c7565b5b6139b3848285016136b9565b91505092915050565b6000602082840312156139d2576139d16149cc565b5b60006139e0848285016136e7565b91505092915050565b60006139f58383613fa3565b60208301905092915050565b613a0a816146fe565b82525050565b6000613a1b8261457d565b613a2581856145ab565b9350613a308361456d565b8060005b83811015613a61578151613a4888826139e9565b9750613a538361459e565b925050600181019050613a34565b5085935050505092915050565b613a7781614722565b82525050565b6000613a8882614588565b613a9281856145bc565b9350613aa2818560208601614793565b613aab816149d1565b840191505092915050565b6000613ac182614593565b613acb81856145cd565b9350613adb818560208601614793565b613ae4816149d1565b840191505092915050565b6000613afa82614593565b613b0481856145de565b9350613b14818560208601614793565b80840191505092915050565b6000613b2d6003836145cd565b9150613b38826149e2565b602082019050919050565b6000613b506003836145cd565b9150613b5b82614a0b565b602082019050919050565b6000613b736003836145cd565b9150613b7e82614a34565b602082019050919050565b6000613b96602b836145cd565b9150613ba182614a5d565b604082019050919050565b6000613bb9600f836145cd565b9150613bc482614aac565b602082019050919050565b6000613bdc6003836145cd565b9150613be782614ad5565b602082019050919050565b6000613bff6003836145cd565b9150613c0a82614afe565b602082019050919050565b6000613c226011836145cd565b9150613c2d82614b27565b602082019050919050565b6000613c456003836145cd565b9150613c5082614b50565b602082019050919050565b6000613c68600e836145cd565b9150613c7382614b79565b602082019050919050565b6000613c8b6003836145cd565b9150613c9682614ba2565b602082019050919050565b6000613cae6003836145cd565b9150613cb982614bcb565b602082019050919050565b6000613cd16014836145cd565b9150613cdc82614bf4565b602082019050919050565b6000613cf46003836145cd565b9150613cff82614c1d565b602082019050919050565b6000613d176003836145cd565b9150613d2282614c46565b602082019050919050565b6000613d3a6002836145cd565b9150613d4582614c6f565b602082019050919050565b6000613d5d6003836145cd565b9150613d6882614c98565b602082019050919050565b6000613d806003836145cd565b9150613d8b82614cc1565b602082019050919050565b6000613da3600d836145cd565b9150613dae82614cea565b602082019050919050565b6000613dc66003836145cd565b9150613dd182614d13565b602082019050919050565b6000613de96003836145cd565b9150613df482614d3c565b602082019050919050565b6000613e0c6003836145cd565b9150613e1782614d65565b602082019050919050565b6000613e2f6003836145cd565b9150613e3a82614d8e565b602082019050919050565b6000613e526011836145cd565b9150613e5d82614db7565b602082019050919050565b6000613e75600a836145cd565b9150613e8082614de0565b602082019050919050565b6000613e986008836145cd565b9150613ea382614e09565b602082019050919050565b6000613ebb602c836145cd565b9150613ec682614e32565b604082019050919050565b6000613ede6012836145cd565b9150613ee982614e81565b602082019050919050565b6000613f016016836145cd565b9150613f0c82614eaa565b602082019050919050565b6000613f246002836145cd565b9150613f2f82614ed3565b602082019050919050565b6000613f476003836145cd565b9150613f5282614efc565b602082019050919050565b6000613f6a6003836145cd565b9150613f7582614f25565b602082019050919050565b6000613f8d6003836145cd565b9150613f9882614f4e565b602082019050919050565b613fac8161477a565b82525050565b613fbb8161477a565b82525050565b6000613fcd8285613aef565b9150613fd98284613aef565b91508190509392505050565b6000602082019050613ffa6000830184613a01565b92915050565b60006080820190506140156000830187613a01565b6140226020830186613a01565b61402f6040830185613fb2565b81810360608301526140418184613a7d565b905095945050505050565b600060208201905081810360008301526140668184613a10565b905092915050565b60006020820190506140836000830184613a6e565b92915050565b600060208201905081810360008301526140a38184613ab6565b905092915050565b600060208201905081810360008301526140c481613b20565b9050919050565b600060208201905081810360008301526140e481613b43565b9050919050565b6000602082019050818103600083015261410481613b66565b9050919050565b6000602082019050818103600083015261412481613b89565b9050919050565b6000602082019050818103600083015261414481613bac565b9050919050565b6000602082019050818103600083015261416481613bcf565b9050919050565b6000602082019050818103600083015261418481613bf2565b9050919050565b600060208201905081810360008301526141a481613c15565b9050919050565b600060208201905081810360008301526141c481613c38565b9050919050565b600060208201905081810360008301526141e481613c5b565b9050919050565b6000602082019050818103600083015261420481613c7e565b9050919050565b6000602082019050818103600083015261422481613ca1565b9050919050565b6000602082019050818103600083015261424481613cc4565b9050919050565b6000602082019050818103600083015261426481613ce7565b9050919050565b6000602082019050818103600083015261428481613d0a565b9050919050565b600060208201905081810360008301526142a481613d2d565b9050919050565b600060208201905081810360008301526142c481613d50565b9050919050565b600060208201905081810360008301526142e481613d73565b9050919050565b6000602082019050818103600083015261430481613d96565b9050919050565b6000602082019050818103600083015261432481613db9565b9050919050565b6000602082019050818103600083015261434481613ddc565b9050919050565b6000602082019050818103600083015261436481613dff565b9050919050565b6000602082019050818103600083015261438481613e22565b9050919050565b600060208201905081810360008301526143a481613e45565b9050919050565b600060208201905081810360008301526143c481613e68565b9050919050565b600060208201905081810360008301526143e481613e8b565b9050919050565b6000602082019050818103600083015261440481613eae565b9050919050565b6000602082019050818103600083015261442481613ed1565b9050919050565b6000602082019050818103600083015261444481613ef4565b9050919050565b6000602082019050818103600083015261446481613f17565b9050919050565b6000602082019050818103600083015261448481613f3a565b9050919050565b600060208201905081810360008301526144a481613f5d565b9050919050565b600060208201905081810360008301526144c481613f80565b9050919050565b60006020820190506144e06000830184613fb2565b92915050565b60006144f0614501565b90506144fc82826147f8565b919050565b6000604051905090565b600067ffffffffffffffff8211156145265761452561498e565b5b61452f826149d1565b9050602081019050919050565b600067ffffffffffffffff8211156145575761455661498e565b5b614560826149d1565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006145f48261477a565b91506145ff8361477a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614634576146336148a3565b5b828201905092915050565b600061464a8261477a565b91506146558361477a565b925082614665576146646148d2565b5b828204905092915050565b600061467b8261477a565b91506146868361477a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146bf576146be6148a3565b5b828202905092915050565b60006146d58261477a565b91506146e08361477a565b9250828210156146f3576146f26148a3565b5b828203905092915050565b60006147098261475a565b9050919050565b600061471b8261475a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147b1578082015181840152602081019050614796565b838111156147c0576000848401525b50505050565b600060028204905060018216806147de57607f821691505b602082108114156147f2576147f1614901565b5b50919050565b614801826149d1565b810181811067ffffffffffffffff821117156148205761481f61498e565b5b80604052505050565b60006148348261477a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614867576148666148a3565b5b600182019050919050565b600061487d8261477a565b91506148888361477a565b925082614898576148976148d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334350000000000000000000000000000000000000000000000000000000000600082015250565b7f2334320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335350000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f7420656e61626c650000000000000000000000000000000000600082015250565b7f2335330000000000000000000000000000000000000000000000000000000000600082015250565b7f2334380000000000000000000000000000000000000000000000000000000000600082015250565b7f57686974656c6973742069732066756c6c000000000000000000000000000000600082015250565b7f2335300000000000000000000000000000000000000000000000000000000000600082015250565b7f57686974656c697374202d206e6f000000000000000000000000000000000000600082015250565b7f2335370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335380000000000000000000000000000000000000000000000000000000000600082015250565b7f57686974656c697374206e6f7420656e61626c65000000000000000000000000600082015250565b7f2334390000000000000000000000000000000000000000000000000000000000600082015250565b7f2335310000000000000000000000000000000000000000000000000000000000600082015250565b7f2336000000000000000000000000000000000000000000000000000000000000600082015250565b7f2336300000000000000000000000000000000000000000000000000000000000600082015250565b7f2335360000000000000000000000000000000000000000000000000000000000600082015250565b7f45786365656473206c696d697400000000000000000000000000000000000000600082015250565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b7f2334360000000000000000000000000000000000000000000000000000000000600082015250565b7f2334370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335340000000000000000000000000000000000000000000000000000000000600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2356616c75652062656c6f772070726963650000000000000000000000000000600082015250565b7f2345786365656473204d41582057686974656c69737400000000000000000000600082015250565b7f2335000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334340000000000000000000000000000000000000000000000000000000000600082015250565b7f2335320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335390000000000000000000000000000000000000000000000000000000000600082015250565b614f80816146fe565b8114614f8b57600080fd5b50565b614f9781614710565b8114614fa257600080fd5b50565b614fae81614722565b8114614fb957600080fd5b50565b614fc58161472e565b8114614fd057600080fd5b50565b614fdc8161477a565b8114614fe757600080fd5b5056fea2646970667358221220b8257ef5c75eeb92e1472c9e1f31addaff90be2c35d6f1e54fd96d07fb1268a164736f6c634300080600330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a687474703a2f2f6170692e6477617266732e6469676974616c2f000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c8063853828b61161012e578063b95f8b5f116100ab578063de4b32621161006f578063de4b32621461087c578063e985e9c5146108a5578063f127394c146108e2578063f2fde38b1461090d578063fe4ca847146109365761023b565b8063b95f8b5f14610795578063c25f7b04146107be578063c7876ea4146107e9578063c87b56dd14610814578063d019dee2146108515761023b565b8063a22cb465116100f2578063a22cb465146106d5578063b02636fd146106fe578063b39d900914610727578063b56d2f6714610743578063b88d4fde1461076c5761023b565b8063853828b61461060f57806386f0f7ae146106195780638da5cb5b146106565780638e825be01461068157806395d89b41146106aa5761023b565b80632884c62a116101bc57806355f804b31161018057806355f804b3146105045780636352211e1461052d5780636e1bd3231461056a57806370a08231146105955780638462151c146105d25761023b565b80632884c62a1461041c5780632f745c591461044557806340c10f191461048257806342842e0e1461049e5780634f6ccce7146104c75761023b565b806315446b091161020357806315446b091461033757806318160ddd14610362578063196694e91461038d57806323b872dd146103b657806326a49e37146103df5761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806309acc2cb1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613919565b610961565b604051610274919061406e565b60405180910390f35b34801561028957600080fd5b506102926109db565b60405161029f9190614089565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139bc565b610a6d565b6040516102dc9190613fe5565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906138ac565b610af2565b005b34801561031a57600080fd5b50610335600480360381019061033091906139bc565b610c0a565b005b34801561034357600080fd5b5061034c610c90565b60405161035991906144cb565b60405180910390f35b34801561036e57600080fd5b50610377610c96565b60405161038491906144cb565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613729565b610ca3565b005b3480156103c257600080fd5b506103dd60048036038101906103d89190613796565b610d63565b005b3480156103eb57600080fd5b50610406600480360381019061040191906139bc565b610dc3565b60405161041391906144cb565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e91906139bc565b610dfb565b005b34801561045157600080fd5b5061046c600480360381019061046791906138ac565b61103b565b60405161047991906144cb565b60405180910390f35b61049c600480360381019061049791906138ac565b6110e0565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190613796565b611368565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906139bc565b611388565b6040516104fb91906144cb565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190613973565b6113f9565b005b34801561053957600080fd5b50610554600480360381019061054f91906139bc565b61148f565b6040516105619190613fe5565b60405180910390f35b34801561057657600080fd5b5061057f611541565b60405161058c91906144cb565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b791906136fc565b611547565b6040516105c991906144cb565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f491906136fc565b6115ff565b604051610606919061404c565b60405180910390f35b6106176116ad565b005b34801561062557600080fd5b50610640600480360381019061063b91906136fc565b611733565b60405161064d91906144cb565b60405180910390f35b34801561066257600080fd5b5061066b61177c565b6040516106789190613fe5565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a391906138ac565b6117a6565b005b3480156106b657600080fd5b506106bf611943565b6040516106cc9190614089565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f7919061386c565b6119d5565b005b34801561070a57600080fd5b50610725600480360381019061072091906138ec565b611b56565b005b610741600480360381019061073c91906138ac565b611bef565b005b34801561074f57600080fd5b5061076a600480360381019061076591906138ec565b611e49565b005b34801561077857600080fd5b50610793600480360381019061078e91906137e9565b611ee2565b005b3480156107a157600080fd5b506107bc60048036038101906107b791906139bc565b611f44565b005b3480156107ca57600080fd5b506107d3611fca565b6040516107e0919061406e565b60405180910390f35b3480156107f557600080fd5b506107fe611fdd565b60405161080b91906144cb565b60405180910390f35b34801561082057600080fd5b5061083b600480360381019061083691906139bc565b611fe3565b6040516108489190614089565b60405180910390f35b34801561085d57600080fd5b5061086661208a565b60405161087391906144cb565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e91906139bc565b612090565b005b3480156108b157600080fd5b506108cc60048036038101906108c79190613756565b612116565b6040516108d9919061406e565b60405180910390f35b3480156108ee57600080fd5b506108f76121aa565b60405161090491906144cb565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f91906136fc565b6121b0565b005b34801561094257600080fd5b5061094b61235c565b604051610958919061406e565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d457506109d38261236f565b5b9050919050565b6060600080546109ea906147c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a16906147c6565b8015610a635780601f10610a3857610100808354040283529160200191610a63565b820191906000526020600020905b815481529060010190602001808311610a4657829003601f168201915b5050505050905090565b6000610a7882612451565b610ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aae9061424b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610afd8261148f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b659061434b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b8d6124bd565b73ffffffffffffffffffffffffffffffffffffffff161480610bbc5750610bbb81610bb66124bd565b612116565b5b610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf29061416b565b60405180910390fd5b610c0583836124c5565b505050565b610c126124bd565b73ffffffffffffffffffffffffffffffffffffffff16610c3061177c565b73ffffffffffffffffffffffffffffffffffffffff1614610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d9061430b565b60405180910390fd5b80600d8190555050565b60145481565b6000600880549050905090565b610cab6124bd565b73ffffffffffffffffffffffffffffffffffffffff16610cc961177c565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d169061430b565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d74610d6e6124bd565b8261257e565b610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa9061426b565b60405180910390fd5b610dbe83838361265c565b505050565b600060fa6096610dd391906145e9565b6012541015610de55760009050610df6565b81601354610df39190614670565b90505b919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e635750601660009054906101000a900460ff165b610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e999061412b565b60405180910390fd5b600d546012541115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906143cb565b60405180910390fd5b600d5481601254610efa91906145e9565b1115610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906142eb565b60405180910390fd5b610f4433611733565b600010610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906141cb565b60405180910390fd5b60005b81811015610fc857610f9d336012546128b8565b60126000815480929190610fb090614829565b91905055508080610fc090614829565b915050610f89565b5080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461101891906146ca565b9250508190555080600f600082825461103191906146ca565b9250508190555050565b600061104683611547565b8210611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e9061410b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111485750601660009054906101000a900460ff165b611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e9061412b565b60405180910390fd5b600d54600f5460125461119a91906145e9565b11156111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d2906143cb565b60405180910390fd5b600d5481600f546012546111ef91906145e9565b6111f991906145e9565b111561123a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611231906142eb565b60405180910390fd5b601481111561127e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611275906143ab565b60405180910390fd5b61128781610dc3565b341015806112e25750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611321576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113189061438b565b60405180910390fd5b60005b8181101561136357611338836012546128b8565b6012600081548092919061134b90614829565b9190505550808061135b90614829565b915050611324565b505050565b61138383838360405180602001604052806000815250611ee2565b505050565b6000611392610c96565b82106113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca906143eb565b60405180910390fd5b600882815481106113e7576113e661495f565b5b90600052602060002001549050919050565b6114016124bd565b73ffffffffffffffffffffffffffffffffffffffff1661141f61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c9061430b565b60405180910390fd5b806015908051906020019061148b9291906134fb565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f906140ab565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af9061446b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600061160c83611547565b905060008167ffffffffffffffff81111561162a5761162961498e565b5b6040519080825280602002602001820160405280156116585781602001602082028036833780820191505090505b50905060005b828110156116a257611670858261103b565b8282815181106116835761168261495f565b5b602002602001018181525050808061169a90614829565b91505061165e565b508092505050919050565b6116b56124bd565b73ffffffffffffffffffffffffffffffffffffffff166116d361177c565b73ffffffffffffffffffffffffffffffffffffffff1614611729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117209061430b565b60405180910390fd5b6117316128d6565b565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6124bd565b73ffffffffffffffffffffffffffffffffffffffff166117cc61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118199061430b565b60405180910390fd5b609660115410611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e9061444b565b60405180910390fd5b60968160115461187791906145e9565b11156118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af9061428b565b60405180910390fd5b60148111156118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f3906143ab565b60405180910390fd5b60005b8181101561193e57611913836011546128b8565b6011600081548092919061192690614829565b9190505550808061193690614829565b9150506118ff565b505050565b606060018054611952906147c6565b80601f016020809104026020016040519081016040528092919081815260200182805461197e906147c6565b80156119cb5780601f106119a0576101008083540402835291602001916119cb565b820191906000526020600020905b8154815290600101906020018083116119ae57829003601f168201915b5050505050905090565b6119dd6124bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a42906141ab565b60405180910390fd5b8060056000611a586124bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b056124bd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b4a919061406e565b60405180910390a35050565b611b5e6124bd565b73ffffffffffffffffffffffffffffffffffffffff16611b7c61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc99061430b565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c575750601660019054906101000a900460ff165b611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d9061422b565b60405180910390fd5b600e54600f5410611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd39061418b565b60405180910390fd5b600e5481600f54611ced91906145e9565b1115611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d259061442b565b60405180910390fd5b80601454611d3c9190614670565b34101580611d975750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd9061440b565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2591906145e9565b9250508190555080600f6000828254611e3e91906145e9565b925050819055505050565b611e516124bd565b73ffffffffffffffffffffffffffffffffffffffff16611e6f61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc9061430b565b60405180910390fd5b80601660016101000a81548160ff02191690831515021790555050565b611ef3611eed6124bd565b8361257e565b611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061448b565b60405180910390fd5b611f3e84848484612a50565b50505050565b611f4c6124bd565b73ffffffffffffffffffffffffffffffffffffffff16611f6a61177c565b73ffffffffffffffffffffffffffffffffffffffff1614611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb79061430b565b60405180910390fd5b8060148190555050565b601660019054906101000a900460ff1681565b60135481565b6060611fee82612451565b61202d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120249061432b565b60405180910390fd5b6000612037612aac565b905060008151116120575760405180602001604052806000815250612082565b8061206184612b3e565b604051602001612072929190613fc1565b6040516020818303038152906040525b915050919050565b600f5481565b6120986124bd565b73ffffffffffffffffffffffffffffffffffffffff166120b661177c565b73ffffffffffffffffffffffffffffffffffffffff161461210c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121039061430b565b60405180910390fd5b8060138190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60125481565b6121b86124bd565b73ffffffffffffffffffffffffffffffffffffffff166121d661177c565b73ffffffffffffffffffffffffffffffffffffffff161461222c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122239061430b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561229c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612293906140cb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601660009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061243a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061244a575061244982612c9f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125388361148f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061258982612451565b6125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bf9061436b565b60405180910390fd5b60006125d38361148f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061264257508373ffffffffffffffffffffffffffffffffffffffff1661262a84610a6d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061265357506126528185612116565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661267c8261148f565b73ffffffffffffffffffffffffffffffffffffffff16146126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c99061420b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612739906144ab565b60405180910390fd5b61274d838383612d09565b6127586000826124c5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127a891906146ca565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ff91906145e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6128d2828260405180602001604052806000815250612e1d565b5050565b60006064600e476128e79190614670565b6128f1919061463f565b905060006064601e476129049190614670565b61290e919061463f565b9050600082824761291f91906146ca565b61292991906146ca565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612993573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156129fc573d6000803e3d6000fd5b50612a056124bd565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a4a573d6000803e3d6000fd5b50505050565b612a5b84848461265c565b612a6784848484612e78565b612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d9061414b565b60405180910390fd5b50505050565b606060158054612abb906147c6565b80601f0160208091040260200160405190810160405280929190818152602001828054612ae7906147c6565b8015612b345780601f10612b0957610100808354040283529160200191612b34565b820191906000526020600020905b815481529060010190602001808311612b1757829003601f168201915b5050505050905090565b60606000821415612b86576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c9a565b600082905060005b60008214612bb8578080612ba190614829565b915050600a82612bb1919061463f565b9150612b8e565b60008167ffffffffffffffff811115612bd457612bd361498e565b5b6040519080825280601f01601f191660200182016040528015612c065781602001600182028036833780820191505090505b5090505b60008514612c9357600182612c1f91906146ca565b9150600a85612c2e9190614872565b6030612c3a91906145e9565b60f81b818381518110612c5057612c4f61495f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c8c919061463f565b9450612c0a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d1483838361300f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d5757612d5281613014565b612d96565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d9557612d94838261305d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dd957612dd4816131ca565b612e18565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e1757612e16828261329b565b5b5b505050565b612e27838361331a565b612e346000848484612e78565b612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a906140eb565b60405180910390fd5b505050565b6000612e998473ffffffffffffffffffffffffffffffffffffffff166134e8565b15613002578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ec26124bd565b8786866040518563ffffffff1660e01b8152600401612ee49493929190614000565b602060405180830381600087803b158015612efe57600080fd5b505af1925050508015612f2f57506040513d601f19601f82011682018060405250810190612f2c9190613946565b60015b612fb2573d8060008114612f5f576040519150601f19603f3d011682016040523d82523d6000602084013e612f64565b606091505b50600081511415612faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa1906142ab565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613007565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161306a84611547565b61307491906146ca565b9050600060076000848152602001908152602001600020549050818114613159576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131de91906146ca565b905060006009600084815260200190815260200160002054905060006008838154811061320e5761320d61495f565b5b9060005260206000200154905080600883815481106132305761322f61495f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061327f5761327e614930565b5b6001900381819060005260206000200160009055905550505050565b60006132a683611547565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561338a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613381906142cb565b60405180910390fd5b61339381612451565b156133d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ca906141eb565b60405180910390fd5b6133df60008383612d09565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461342f91906145e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613507906147c6565b90600052602060002090601f0160209004810192826135295760008555613570565b82601f1061354257805160ff1916838001178555613570565b82800160010185558215613570579182015b8281111561356f578251825591602001919060010190613554565b5b50905061357d9190613581565b5090565b5b8082111561359a576000816000905550600101613582565b5090565b60006135b16135ac8461450b565b6144e6565b9050828152602081018484840111156135cd576135cc6149c2565b5b6135d8848285614784565b509392505050565b60006135f36135ee8461453c565b6144e6565b90508281526020810184848401111561360f5761360e6149c2565b5b61361a848285614784565b509392505050565b60008135905061363181614f77565b92915050565b60008135905061364681614f8e565b92915050565b60008135905061365b81614fa5565b92915050565b60008135905061367081614fbc565b92915050565b60008151905061368581614fbc565b92915050565b600082601f8301126136a05761369f6149bd565b5b81356136b084826020860161359e565b91505092915050565b600082601f8301126136ce576136cd6149bd565b5b81356136de8482602086016135e0565b91505092915050565b6000813590506136f681614fd3565b92915050565b600060208284031215613712576137116149cc565b5b600061372084828501613622565b91505092915050565b60006020828403121561373f5761373e6149cc565b5b600061374d84828501613637565b91505092915050565b6000806040838503121561376d5761376c6149cc565b5b600061377b85828601613622565b925050602061378c85828601613622565b9150509250929050565b6000806000606084860312156137af576137ae6149cc565b5b60006137bd86828701613622565b93505060206137ce86828701613622565b92505060406137df868287016136e7565b9150509250925092565b60008060008060808587031215613803576138026149cc565b5b600061381187828801613622565b945050602061382287828801613622565b9350506040613833878288016136e7565b925050606085013567ffffffffffffffff811115613854576138536149c7565b5b6138608782880161368b565b91505092959194509250565b60008060408385031215613883576138826149cc565b5b600061389185828601613622565b92505060206138a28582860161364c565b9150509250929050565b600080604083850312156138c3576138c26149cc565b5b60006138d185828601613622565b92505060206138e2858286016136e7565b9150509250929050565b600060208284031215613902576139016149cc565b5b60006139108482850161364c565b91505092915050565b60006020828403121561392f5761392e6149cc565b5b600061393d84828501613661565b91505092915050565b60006020828403121561395c5761395b6149cc565b5b600061396a84828501613676565b91505092915050565b600060208284031215613989576139886149cc565b5b600082013567ffffffffffffffff8111156139a7576139a66149c7565b5b6139b3848285016136b9565b91505092915050565b6000602082840312156139d2576139d16149cc565b5b60006139e0848285016136e7565b91505092915050565b60006139f58383613fa3565b60208301905092915050565b613a0a816146fe565b82525050565b6000613a1b8261457d565b613a2581856145ab565b9350613a308361456d565b8060005b83811015613a61578151613a4888826139e9565b9750613a538361459e565b925050600181019050613a34565b5085935050505092915050565b613a7781614722565b82525050565b6000613a8882614588565b613a9281856145bc565b9350613aa2818560208601614793565b613aab816149d1565b840191505092915050565b6000613ac182614593565b613acb81856145cd565b9350613adb818560208601614793565b613ae4816149d1565b840191505092915050565b6000613afa82614593565b613b0481856145de565b9350613b14818560208601614793565b80840191505092915050565b6000613b2d6003836145cd565b9150613b38826149e2565b602082019050919050565b6000613b506003836145cd565b9150613b5b82614a0b565b602082019050919050565b6000613b736003836145cd565b9150613b7e82614a34565b602082019050919050565b6000613b96602b836145cd565b9150613ba182614a5d565b604082019050919050565b6000613bb9600f836145cd565b9150613bc482614aac565b602082019050919050565b6000613bdc6003836145cd565b9150613be782614ad5565b602082019050919050565b6000613bff6003836145cd565b9150613c0a82614afe565b602082019050919050565b6000613c226011836145cd565b9150613c2d82614b27565b602082019050919050565b6000613c456003836145cd565b9150613c5082614b50565b602082019050919050565b6000613c68600e836145cd565b9150613c7382614b79565b602082019050919050565b6000613c8b6003836145cd565b9150613c9682614ba2565b602082019050919050565b6000613cae6003836145cd565b9150613cb982614bcb565b602082019050919050565b6000613cd16014836145cd565b9150613cdc82614bf4565b602082019050919050565b6000613cf46003836145cd565b9150613cff82614c1d565b602082019050919050565b6000613d176003836145cd565b9150613d2282614c46565b602082019050919050565b6000613d3a6002836145cd565b9150613d4582614c6f565b602082019050919050565b6000613d5d6003836145cd565b9150613d6882614c98565b602082019050919050565b6000613d806003836145cd565b9150613d8b82614cc1565b602082019050919050565b6000613da3600d836145cd565b9150613dae82614cea565b602082019050919050565b6000613dc66003836145cd565b9150613dd182614d13565b602082019050919050565b6000613de96003836145cd565b9150613df482614d3c565b602082019050919050565b6000613e0c6003836145cd565b9150613e1782614d65565b602082019050919050565b6000613e2f6003836145cd565b9150613e3a82614d8e565b602082019050919050565b6000613e526011836145cd565b9150613e5d82614db7565b602082019050919050565b6000613e75600a836145cd565b9150613e8082614de0565b602082019050919050565b6000613e986008836145cd565b9150613ea382614e09565b602082019050919050565b6000613ebb602c836145cd565b9150613ec682614e32565b604082019050919050565b6000613ede6012836145cd565b9150613ee982614e81565b602082019050919050565b6000613f016016836145cd565b9150613f0c82614eaa565b602082019050919050565b6000613f246002836145cd565b9150613f2f82614ed3565b602082019050919050565b6000613f476003836145cd565b9150613f5282614efc565b602082019050919050565b6000613f6a6003836145cd565b9150613f7582614f25565b602082019050919050565b6000613f8d6003836145cd565b9150613f9882614f4e565b602082019050919050565b613fac8161477a565b82525050565b613fbb8161477a565b82525050565b6000613fcd8285613aef565b9150613fd98284613aef565b91508190509392505050565b6000602082019050613ffa6000830184613a01565b92915050565b60006080820190506140156000830187613a01565b6140226020830186613a01565b61402f6040830185613fb2565b81810360608301526140418184613a7d565b905095945050505050565b600060208201905081810360008301526140668184613a10565b905092915050565b60006020820190506140836000830184613a6e565b92915050565b600060208201905081810360008301526140a38184613ab6565b905092915050565b600060208201905081810360008301526140c481613b20565b9050919050565b600060208201905081810360008301526140e481613b43565b9050919050565b6000602082019050818103600083015261410481613b66565b9050919050565b6000602082019050818103600083015261412481613b89565b9050919050565b6000602082019050818103600083015261414481613bac565b9050919050565b6000602082019050818103600083015261416481613bcf565b9050919050565b6000602082019050818103600083015261418481613bf2565b9050919050565b600060208201905081810360008301526141a481613c15565b9050919050565b600060208201905081810360008301526141c481613c38565b9050919050565b600060208201905081810360008301526141e481613c5b565b9050919050565b6000602082019050818103600083015261420481613c7e565b9050919050565b6000602082019050818103600083015261422481613ca1565b9050919050565b6000602082019050818103600083015261424481613cc4565b9050919050565b6000602082019050818103600083015261426481613ce7565b9050919050565b6000602082019050818103600083015261428481613d0a565b9050919050565b600060208201905081810360008301526142a481613d2d565b9050919050565b600060208201905081810360008301526142c481613d50565b9050919050565b600060208201905081810360008301526142e481613d73565b9050919050565b6000602082019050818103600083015261430481613d96565b9050919050565b6000602082019050818103600083015261432481613db9565b9050919050565b6000602082019050818103600083015261434481613ddc565b9050919050565b6000602082019050818103600083015261436481613dff565b9050919050565b6000602082019050818103600083015261438481613e22565b9050919050565b600060208201905081810360008301526143a481613e45565b9050919050565b600060208201905081810360008301526143c481613e68565b9050919050565b600060208201905081810360008301526143e481613e8b565b9050919050565b6000602082019050818103600083015261440481613eae565b9050919050565b6000602082019050818103600083015261442481613ed1565b9050919050565b6000602082019050818103600083015261444481613ef4565b9050919050565b6000602082019050818103600083015261446481613f17565b9050919050565b6000602082019050818103600083015261448481613f3a565b9050919050565b600060208201905081810360008301526144a481613f5d565b9050919050565b600060208201905081810360008301526144c481613f80565b9050919050565b60006020820190506144e06000830184613fb2565b92915050565b60006144f0614501565b90506144fc82826147f8565b919050565b6000604051905090565b600067ffffffffffffffff8211156145265761452561498e565b5b61452f826149d1565b9050602081019050919050565b600067ffffffffffffffff8211156145575761455661498e565b5b614560826149d1565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006145f48261477a565b91506145ff8361477a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614634576146336148a3565b5b828201905092915050565b600061464a8261477a565b91506146558361477a565b925082614665576146646148d2565b5b828204905092915050565b600061467b8261477a565b91506146868361477a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146bf576146be6148a3565b5b828202905092915050565b60006146d58261477a565b91506146e08361477a565b9250828210156146f3576146f26148a3565b5b828203905092915050565b60006147098261475a565b9050919050565b600061471b8261475a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147b1578082015181840152602081019050614796565b838111156147c0576000848401525b50505050565b600060028204905060018216806147de57607f821691505b602082108114156147f2576147f1614901565b5b50919050565b614801826149d1565b810181811067ffffffffffffffff821117156148205761481f61498e565b5b80604052505050565b60006148348261477a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614867576148666148a3565b5b600182019050919050565b600061487d8261477a565b91506148888361477a565b925082614898576148976148d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334350000000000000000000000000000000000000000000000000000000000600082015250565b7f2334320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335350000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f7420656e61626c650000000000000000000000000000000000600082015250565b7f2335330000000000000000000000000000000000000000000000000000000000600082015250565b7f2334380000000000000000000000000000000000000000000000000000000000600082015250565b7f57686974656c6973742069732066756c6c000000000000000000000000000000600082015250565b7f2335300000000000000000000000000000000000000000000000000000000000600082015250565b7f57686974656c697374202d206e6f000000000000000000000000000000000000600082015250565b7f2335370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335380000000000000000000000000000000000000000000000000000000000600082015250565b7f57686974656c697374206e6f7420656e61626c65000000000000000000000000600082015250565b7f2334390000000000000000000000000000000000000000000000000000000000600082015250565b7f2335310000000000000000000000000000000000000000000000000000000000600082015250565b7f2336000000000000000000000000000000000000000000000000000000000000600082015250565b7f2336300000000000000000000000000000000000000000000000000000000000600082015250565b7f2335360000000000000000000000000000000000000000000000000000000000600082015250565b7f45786365656473206c696d697400000000000000000000000000000000000000600082015250565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b7f2334360000000000000000000000000000000000000000000000000000000000600082015250565b7f2334370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335340000000000000000000000000000000000000000000000000000000000600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2356616c75652062656c6f772070726963650000000000000000000000000000600082015250565b7f2345786365656473204d41582057686974656c69737400000000000000000000600082015250565b7f2335000000000000000000000000000000000000000000000000000000000000600082015250565b7f2334340000000000000000000000000000000000000000000000000000000000600082015250565b7f2335320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335390000000000000000000000000000000000000000000000000000000000600082015250565b614f80816146fe565b8114614f8b57600080fd5b50565b614f9781614710565b8114614fa257600080fd5b50565b614fae81614722565b8114614fb957600080fd5b50565b614fc58161472e565b8114614fd057600080fd5b50565b614fdc8161477a565b8114614fe757600080fd5b5056fea2646970667358221220b8257ef5c75eeb92e1472c9e1f31addaff90be2c35d6f1e54fd96d07fb1268a164736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a687474703a2f2f6170692e6477617266732e6469676974616c2f000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): http://api.dwarfs.digital/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001a
Arg [2] : 687474703a2f2f6170692e6477617266732e6469676974616c2f000000000000
Deployed Bytecode Sourcemap
41395:4418:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35268:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22463:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23803:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23416:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42103:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41823:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35921:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17944:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24630:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44914:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44349:551;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35589:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42710:575;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24960:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36111:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45265:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22195:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41455:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21964:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45375:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45727:81;;;:::i;:::-;;44211:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16557:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43303:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22632:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24055:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41988:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43689:514;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42209:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25182:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42455:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41941:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41771:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22807:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41577:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42344:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24399:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41710:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18199:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41904:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35268:237;35370:4;35409:35;35394:50;;;:11;:50;;;;:103;;;;35461:36;35485:11;35461:23;:36::i;:::-;35394:103;35387:110;;35268:237;;;:::o;22463:100::-;22517:13;22550:5;22543:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22463:100;:::o;23803:180::-;23879:7;23907:16;23915:7;23907;:16::i;:::-;23899:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;23951:15;:24;23967:7;23951:24;;;;;;;;;;;;;;;;;;;;;23944:31;;23803:180;;;:::o;23416:321::-;23497:13;23513:23;23528:7;23513:14;:23::i;:::-;23497:39;;23561:5;23555:11;;:2;:11;;;;23547:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;23611:5;23595:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;23620:44;23644:5;23651:12;:10;:12::i;:::-;23620:23;:44::i;:::-;23595:69;23587:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;23708:21;23717:2;23721:7;23708:8;:21::i;:::-;23486:251;23416:321;;:::o;42103:98::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;42183:10:::1;42171:9;:22;;;;42103:98:::0;:::o;41823:38::-;;;;:::o;35921:113::-;35982:7;36009:10;:17;;;;36002:24;;35921:113;:::o;17944:96::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;18027:5:::1;18019;;:13;;;;;;;;;;;;;;;;;;17944:96:::0;:::o;24630:259::-;24791:41;24810:12;:10;:12::i;:::-;24824:7;24791:18;:41::i;:::-;24783:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24853:28;24863:4;24869:2;24873:7;24853:9;:28::i;:::-;24630:259;;;:::o;44914:217::-;44971:7;45022:3;41526;45009:16;;;;:::i;:::-;44994:12;;:31;44991:133;;;45050:1;45043:8;;;;44991:133;45104:6;45092:9;;:18;;;;:::i;:::-;45085:25;;44914:217;;;;:::o;44349:551::-;44429:6;;;;;;;;;;;44415:20;;:10;:20;;;:34;;;;44439:10;;;;;;;;;;;44415:34;44407:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44504:9;;44488:12;;:25;;44480:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;44570:9;;44560:6;44545:12;;:21;;;;:::i;:::-;:34;;44537:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;44621:25;44635:10;44621:13;:25::i;:::-;44617:1;:29;44608:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44688:6;44684:124;44704:6;44700:1;:10;44684:124;;;44731:35;44741:10;44753:12;;44731:9;:35::i;:::-;44782:12;;:14;;;;;;;;;:::i;:::-;;;;;;44712:3;;;;;:::i;:::-;;;;44684:124;;;;44847:6;44819:12;:24;44832:10;44819:24;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;44886:6;44865:16;;:27;;;;;;;:::i;:::-;;;;;;;;44349:551;:::o;35589:256::-;35686:7;35722:23;35739:5;35722:16;:23::i;:::-;35714:5;:31;35706:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35811:12;:19;35824:5;35811:19;;;;;;;;;;;;;;;:26;35831:5;35811:26;;;;;;;;;;;;35804:33;;35589:256;;;;:::o;42710:575::-;42798:6;;;;;;;;;;;42784:20;;:10;:20;;;:34;;;;42808:10;;;;;;;;;;;42784:34;42776:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42892:9;;42872:16;;42857:12;;:31;;;;:::i;:::-;:44;;42849:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42977:9;;42967:6;42948:16;;42933:12;;:31;;;;:::i;:::-;:40;;;;:::i;:::-;:53;;42925:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;43033:2;43023:6;:12;;43015:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;43082:13;43088:6;43082:5;:13::i;:::-;43069:9;:26;;:50;;;;43113:6;;;;;;;;;;;43099:20;;:10;:20;;;43069:50;43061:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43165:6;43161:117;43181:6;43177:1;:10;43161:117;;;43208:28;43218:3;43223:12;;43208:9;:28::i;:::-;43252:12;;:14;;;;;;;;;:::i;:::-;;;;;;43189:3;;;;;:::i;:::-;;;;43161:117;;;;42710:575;;:::o;24960:151::-;25064:39;25081:4;25087:2;25091:7;25064:39;;;;;;;;;;;;:16;:39::i;:::-;24960:151;;;:::o;36111:233::-;36186:7;36222:30;:28;:30::i;:::-;36214:5;:38;36206:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36319:10;36330:5;36319:17;;;;;;;;:::i;:::-;;;;;;;;;;36312:24;;36111:233;;;:::o;45265:102::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;45352:7:::1;45336:13;:23;;;;;;;;;;;;:::i;:::-;;45265:102:::0;:::o;22195:201::-;22267:7;22287:13;22303:7;:16;22311:7;22303:16;;;;;;;;;;;;;;;;;;;;;22287:32;;22355:1;22338:19;;:5;:19;;;;22330:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;22383:5;22376:12;;;22195:201;;;:::o;41455:29::-;;;;:::o;21964:169::-;22036:7;22081:1;22064:19;;:5;:19;;;;22056:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;22109:9;:16;22119:5;22109:16;;;;;;;;;;;;;;;;22102:23;;21964:169;;;:::o;45375:344::-;45436:16;45465:15;45483:17;45493:6;45483:9;:17::i;:::-;45465:35;;45513:25;45555:10;45541:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45513:53;;45581:6;45577:107;45597:10;45593:1;:14;45577:107;;;45642:30;45662:6;45670:1;45642:19;:30::i;:::-;45628:8;45637:1;45628:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45609:3;;;;;:::i;:::-;;;;45577:107;;;;45703:8;45696:15;;;;45375:344;;;:::o;45727:81::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;45786:14:::1;:12;:14::i;:::-;45727:81::o:0;44211:120::-;44273:7;44301:12;:21;44314:7;44301:21;;;;;;;;;;;;;;;;44294:28;;44211:120;;;:::o;16557:87::-;16603:7;16630:6;;;;;;;;;;;16623:13;;16557:87;:::o;43303:368::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41526:3:::1;43386:13;;:26;43378:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;41526:3;43454:6;43438:13;;:22;;;;:::i;:::-;:36;;43430:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;43510:2;43500:6;:12;;43492:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;43550:6;43546:118;43566:6;43562:1;:10;43546:118;;;43593:29;43603:3;43608:13;;43593:9;:29::i;:::-;43637:13;;:15;;;;;;;;;:::i;:::-;;;;;;43574:3;;;;;:::i;:::-;;;;43546:118;;;;43303:368:::0;;:::o;22632:104::-;22688:13;22721:7;22714:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22632:104;:::o;24055:273::-;24170:12;:10;:12::i;:::-;24158:24;;:8;:24;;;;24150:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;24248:8;24203:18;:32;24222:12;:10;:12::i;:::-;24203:32;;;;;;;;;;;;;;;:42;24236:8;24203:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24301:8;24272:48;;24287:12;:10;:12::i;:::-;24272:48;;;24311:8;24272:48;;;;;;:::i;:::-;;;;;;;;24055:273;;:::o;41988:103::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;42072:11:::1;42059:10;;:24;;;;;;;;;;;;;;;;;;41988:103:::0;:::o;43689:514::-;43786:6;;;;;;;;;;;43772:20;;:10;:20;;;:39;;;;43796:15;;;;;;;;;;;43772:39;43764:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;43874:13;;43855:16;;:32;43847:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43957:13;;43947:6;43928:16;;:25;;;;:::i;:::-;:42;;43920:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44046:6;44029:14;;:23;;;;:::i;:::-;44016:9;:36;;:60;;;;44070:6;;;;;;;;;;;44056:20;;:10;:20;;;44016:60;44008:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44142:6;44121:12;:17;44134:3;44121:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;44179:6;44159:16;;:26;;;;;;;:::i;:::-;;;;;;;;43689:514;;:::o;42209:123::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;42308:16:::1;42290:15;;:34;;;;;;;;;;;;;;;;;;42209:123:::0;:::o;25182:239::-;25314:41;25333:12;:10;:12::i;:::-;25347:7;25314:18;:41::i;:::-;25306:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25374:39;25388:4;25394:2;25398:7;25407:5;25374:13;:39::i;:::-;25182:239;;;;:::o;42455:119::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;42551:15:::1;42534:14;:32;;;;42455:119:::0;:::o;41941:35::-;;;;;;;;;;;;;:::o;41771:33::-;;;;:::o;22807:316::-;22880:13;22914:16;22922:7;22914;:16::i;:::-;22906:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;22951:21;22975:10;:8;:10::i;:::-;22951:34;;23027:1;23009:7;23003:21;:25;:112;;;;;;;;;;;;;;;;;23068:7;23077:18;:7;:16;:18::i;:::-;23051:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23003:112;22996:119;;;22807:316;;;:::o;41577:33::-;;;;:::o;42344:99::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;42425:10:::1;42413:9;:22;;;;42344:99:::0;:::o;24399:164::-;24496:4;24520:18;:25;24539:5;24520:25;;;;;;;;;;;;;;;:35;24546:8;24520:35;;;;;;;;;;;;;;;;;;;;;;;;;24513:42;;24399:164;;;;:::o;41710:54::-;;;;:::o;18199:209::-;16788:12;:10;:12::i;:::-;16777:23;;:7;:5;:7::i;:::-;:23;;;16769:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;18308:1:::1;18288:22;;:8;:22;;;;18280:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18363:8;18334:38;;18355:6;;;;;;;;;;;18334:38;;;;;;;;;;;;18392:8;18383:6;;:17;;;;;;;;;;;;;;;;;;18199:209:::0;:::o;41904:30::-;;;;;;;;;;;;;:::o;21608:292::-;21710:4;21749:25;21734:40;;;:11;:40;;;;:105;;;;21806:33;21791:48;;;:11;:48;;;;21734:105;:158;;;;21856:36;21880:11;21856:23;:36::i;:::-;21734:158;21727:165;;21608:292;;;:::o;26841:127::-;26906:4;26958:1;26930:30;;:7;:16;26938:7;26930:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26923:37;;26841:127;;;:::o;7325:98::-;7378:7;7405:10;7398:17;;7325:98;:::o;30512:174::-;30614:2;30587:15;:24;30603:7;30587:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30670:7;30666:2;30632:46;;30641:23;30656:7;30641:14;:23::i;:::-;30632:46;;;;;;;;;;;;30512:174;;:::o;27135:314::-;27228:4;27253:16;27261:7;27253;:16::i;:::-;27245:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;27288:13;27304:23;27319:7;27304:14;:23::i;:::-;27288:39;;27357:5;27346:16;;:7;:16;;;:51;;;;27390:7;27366:31;;:20;27378:7;27366:11;:20::i;:::-;:31;;;27346:51;:94;;;;27401:39;27425:5;27432:7;27401:23;:39::i;:::-;27346:94;27338:103;;;27135:314;;;;:::o;29921:473::-;30046:4;30019:31;;:23;30034:7;30019:14;:23::i;:::-;:31;;;30011:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;30091:1;30077:16;;:2;:16;;;;30069:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;30114:39;30135:4;30141:2;30145:7;30114:20;:39::i;:::-;30218:29;30235:1;30239:7;30218:8;:29::i;:::-;30279:1;30260:9;:15;30270:4;30260:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30308:1;30291:9;:13;30301:2;30291:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30339:2;30320:7;:16;30328:7;30320:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30378:7;30374:2;30359:27;;30368:4;30359:27;;;;;;;;;;;;29921:473;;;:::o;27791:110::-;27867:26;27877:2;27881:7;27867:26;;;;;;;;;;;;:9;:26::i;:::-;27791:110;;:::o;17527:405::-;17579:18;17625:3;17622:2;17600:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;17579:49;;17638:20;17686:3;17683:2;17661:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;17638:51;;17699:23;17760:10;17747:12;17725:21;:34;;;;:::i;:::-;:45;;;;:::i;:::-;17699:71;;17793:3;;;;;;;;;;;17785:21;;:33;17807:10;17785:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17836:5;;;;;;;;;;;17828:23;;:37;17852:12;17828:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17883:12;:10;:12::i;:::-;17875:30;;:47;17906:15;17875:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17569:363;;;17527:405::o;26303:225::-;26417:28;26427:4;26433:2;26437:7;26417:9;:28::i;:::-;26464:48;26487:4;26493:2;26497:7;26506:5;26464:22;:48::i;:::-;26456:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26303:225;;;;:::o;45139:114::-;45199:13;45232;45225:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45139:114;:::o;18643:723::-;18699:13;18929:1;18920:5;:10;18916:53;;;18947:10;;;;;;;;;;;;;;;;;;;;;18916:53;18979:12;18994:5;18979:20;;19010:14;19035:78;19050:1;19042:4;:9;19035:78;;19068:8;;;;;:::i;:::-;;;;19099:2;19091:10;;;;;:::i;:::-;;;19035:78;;;19123:19;19155:6;19145:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19123:39;;19173:154;19189:1;19180:5;:10;19173:154;;19217:1;19207:11;;;;;:::i;:::-;;;19284:2;19276:5;:10;;;;:::i;:::-;19263:2;:24;;;;:::i;:::-;19250:39;;19233:6;19240;19233:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19313:2;19304:11;;;;;:::i;:::-;;;19173:154;;;19351:6;19337:21;;;;;18643:723;;;;:::o;8373:157::-;8458:4;8497:25;8482:40;;;:11;:40;;;;8475:47;;8373:157;;;:::o;36957:555::-;37067:45;37094:4;37100:2;37104:7;37067:26;:45::i;:::-;37145:1;37129:18;;:4;:18;;;37125:187;;;37164:40;37196:7;37164:31;:40::i;:::-;37125:187;;;37234:2;37226:10;;:4;:10;;;37222:90;;37253:47;37286:4;37292:7;37253:32;:47::i;:::-;37222:90;37125:187;37340:1;37326:16;;:2;:16;;;37322:183;;;37359:45;37396:7;37359:36;:45::i;:::-;37322:183;;;37432:4;37426:10;;:2;:10;;;37422:83;;37453:40;37481:2;37485:7;37453:27;:40::i;:::-;37422:83;37322:183;36957:555;;;:::o;28128:203::-;28224:18;28230:2;28234:7;28224:5;:18::i;:::-;28261:54;28292:1;28296:2;28300:7;28309:5;28261:22;:54::i;:::-;28253:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28128:203;;;:::o;31251:796::-;31372:4;31398:15;:2;:13;;;:15::i;:::-;31394:646;;;31450:2;31434:36;;;31471:12;:10;:12::i;:::-;31485:4;31491:7;31500:5;31434:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31430:555;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31697:1;31680:6;:13;:18;31676:294;;;31723:13;;;;;;;;;;:::i;:::-;;;;;;;;31676:294;31920:6;31914:13;31905:6;31901:2;31897:15;31890:38;31430:555;31567:45;;;31557:55;;;:6;:55;;;;31550:62;;;;;31394:646;32024:4;32017:11;;31251:796;;;;;;;:::o;32660:93::-;;;;:::o;38235:164::-;38339:10;:17;;;;38312:15;:24;38328:7;38312:24;;;;;;;;;;;:44;;;;38367:10;38383:7;38367:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38235:164;:::o;39026:988::-;39292:22;39342:1;39317:22;39334:4;39317:16;:22::i;:::-;:26;;;;:::i;:::-;39292:51;;39354:18;39375:17;:26;39393:7;39375:26;;;;;;;;;;;;39354:47;;39522:14;39508:10;:28;39504:328;;39553:19;39575:12;:18;39588:4;39575:18;;;;;;;;;;;;;;;:34;39594:14;39575:34;;;;;;;;;;;;39553:56;;39659:11;39626:12;:18;39639:4;39626:18;;;;;;;;;;;;;;;:30;39645:10;39626:30;;;;;;;;;;;:44;;;;39776:10;39743:17;:30;39761:11;39743:30;;;;;;;;;;;:43;;;;39538:294;39504:328;39928:17;:26;39946:7;39928:26;;;;;;;;;;;39921:33;;;39972:12;:18;39985:4;39972:18;;;;;;;;;;;;;;;:34;39991:14;39972:34;;;;;;;;;;;39965:41;;;39107:907;;39026:988;;:::o;40309:1079::-;40562:22;40607:1;40587:10;:17;;;;:21;;;;:::i;:::-;40562:46;;40619:18;40640:15;:24;40656:7;40640:24;;;;;;;;;;;;40619:45;;40991:19;41013:10;41024:14;41013:26;;;;;;;;:::i;:::-;;;;;;;;;;40991:48;;41077:11;41052:10;41063;41052:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41188:10;41157:15;:28;41173:11;41157:28;;;;;;;;;;;:41;;;;41329:15;:24;41345:7;41329:24;;;;;;;;;;;41322:31;;;41364:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40380:1008;;;40309:1079;:::o;37813:221::-;37898:14;37915:20;37932:2;37915:16;:20::i;:::-;37898:37;;37973:7;37946:12;:16;37959:2;37946:16;;;;;;;;;;;;;;;:24;37963:6;37946:24;;;;;;;;;;;:34;;;;38020:6;37991:17;:26;38009:7;37991:26;;;;;;;;;;;:35;;;;37887:147;37813:221;;:::o;28667:328::-;28761:1;28747:16;;:2;:16;;;;28739:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;28791:16;28799:7;28791;:16::i;:::-;28790:17;28782:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;28828:45;28857:1;28861:2;28865:7;28828:20;:45::i;:::-;28903:1;28886:9;:13;28896:2;28886:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28934:2;28915:7;:16;28923:7;28915:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28979:7;28975:2;28954:33;;28971:1;28954:33;;;;;;;;;;;;28667:328;;:::o;2508:239::-;2568:4;2593:12;2704:7;2692:20;2684:28;;2738:1;2731:4;:8;2724:15;;;2508:239;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:155::-;1040:5;1078:6;1065:20;1056:29;;1094:41;1129:5;1094:41;:::i;:::-;1046:95;;;;:::o;1147:133::-;1190:5;1228:6;1215:20;1206:29;;1244:30;1268:5;1244:30;:::i;:::-;1196:84;;;;:::o;1286:137::-;1331:5;1369:6;1356:20;1347:29;;1385:32;1411:5;1385:32;:::i;:::-;1337:86;;;;:::o;1429:141::-;1485:5;1516:6;1510:13;1501:22;;1532:32;1558:5;1532:32;:::i;:::-;1491:79;;;;:::o;1589:338::-;1644:5;1693:3;1686:4;1678:6;1674:17;1670:27;1660:2;;1701:79;;:::i;:::-;1660:2;1818:6;1805:20;1843:78;1917:3;1909:6;1902:4;1894:6;1890:17;1843:78;:::i;:::-;1834:87;;1650:277;;;;;:::o;1947:340::-;2003:5;2052:3;2045:4;2037:6;2033:17;2029:27;2019:2;;2060:79;;:::i;:::-;2019:2;2177:6;2164:20;2202:79;2277:3;2269:6;2262:4;2254:6;2250:17;2202:79;:::i;:::-;2193:88;;2009:278;;;;;:::o;2293:139::-;2339:5;2377:6;2364:20;2355:29;;2393:33;2420:5;2393:33;:::i;:::-;2345:87;;;;:::o;2438:329::-;2497:6;2546:2;2534:9;2525:7;2521:23;2517:32;2514:2;;;2552:79;;:::i;:::-;2514:2;2672:1;2697:53;2742:7;2733:6;2722:9;2718:22;2697:53;:::i;:::-;2687:63;;2643:117;2504:263;;;;:::o;2773:345::-;2840:6;2889:2;2877:9;2868:7;2864:23;2860:32;2857:2;;;2895:79;;:::i;:::-;2857:2;3015:1;3040:61;3093:7;3084:6;3073:9;3069:22;3040:61;:::i;:::-;3030:71;;2986:125;2847:271;;;;:::o;3124:474::-;3192:6;3200;3249:2;3237:9;3228:7;3224:23;3220:32;3217:2;;;3255:79;;:::i;:::-;3217:2;3375:1;3400:53;3445:7;3436:6;3425:9;3421:22;3400:53;:::i;:::-;3390:63;;3346:117;3502:2;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3473:118;3207:391;;;;;:::o;3604:619::-;3681:6;3689;3697;3746:2;3734:9;3725:7;3721:23;3717:32;3714:2;;;3752:79;;:::i;:::-;3714:2;3872:1;3897:53;3942:7;3933:6;3922:9;3918:22;3897:53;:::i;:::-;3887:63;;3843:117;3999:2;4025:53;4070:7;4061:6;4050:9;4046:22;4025:53;:::i;:::-;4015:63;;3970:118;4127:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;:::i;:::-;4143:63;;4098:118;3704:519;;;;;:::o;4229:943::-;4324:6;4332;4340;4348;4397:3;4385:9;4376:7;4372:23;4368:33;4365:2;;;4404:79;;:::i;:::-;4365:2;4524:1;4549:53;4594:7;4585:6;4574:9;4570:22;4549:53;:::i;:::-;4539:63;;4495:117;4651:2;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4622:118;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4935:2;4924:9;4920:18;4907:32;4966:18;4958:6;4955:30;4952:2;;;4988:79;;:::i;:::-;4952:2;5093:62;5147:7;5138:6;5127:9;5123:22;5093:62;:::i;:::-;5083:72;;4878:287;4355:817;;;;;;;:::o;5178:468::-;5243:6;5251;5300:2;5288:9;5279:7;5275:23;5271:32;5268:2;;;5306:79;;:::i;:::-;5268:2;5426:1;5451:53;5496:7;5487:6;5476:9;5472:22;5451:53;:::i;:::-;5441:63;;5397:117;5553:2;5579:50;5621:7;5612:6;5601:9;5597:22;5579:50;:::i;:::-;5569:60;;5524:115;5258:388;;;;;:::o;5652:474::-;5720:6;5728;5777:2;5765:9;5756:7;5752:23;5748:32;5745:2;;;5783:79;;:::i;:::-;5745:2;5903:1;5928:53;5973:7;5964:6;5953:9;5949:22;5928:53;:::i;:::-;5918:63;;5874:117;6030:2;6056:53;6101:7;6092:6;6081:9;6077:22;6056:53;:::i;:::-;6046:63;;6001:118;5735:391;;;;;:::o;6132:323::-;6188:6;6237:2;6225:9;6216:7;6212:23;6208:32;6205:2;;;6243:79;;:::i;:::-;6205:2;6363:1;6388:50;6430:7;6421:6;6410:9;6406:22;6388:50;:::i;:::-;6378:60;;6334:114;6195:260;;;;:::o;6461:327::-;6519:6;6568:2;6556:9;6547:7;6543:23;6539:32;6536:2;;;6574:79;;:::i;:::-;6536:2;6694:1;6719:52;6763:7;6754:6;6743:9;6739:22;6719:52;:::i;:::-;6709:62;;6665:116;6526:262;;;;:::o;6794:349::-;6863:6;6912:2;6900:9;6891:7;6887:23;6883:32;6880:2;;;6918:79;;:::i;:::-;6880:2;7038:1;7063:63;7118:7;7109:6;7098:9;7094:22;7063:63;:::i;:::-;7053:73;;7009:127;6870:273;;;;:::o;7149:509::-;7218:6;7267:2;7255:9;7246:7;7242:23;7238:32;7235:2;;;7273:79;;:::i;:::-;7235:2;7421:1;7410:9;7406:17;7393:31;7451:18;7443:6;7440:30;7437:2;;;7473:79;;:::i;:::-;7437:2;7578:63;7633:7;7624:6;7613:9;7609:22;7578:63;:::i;:::-;7568:73;;7364:287;7225:433;;;;:::o;7664:329::-;7723:6;7772:2;7760:9;7751:7;7747:23;7743:32;7740:2;;;7778:79;;:::i;:::-;7740:2;7898:1;7923:53;7968:7;7959:6;7948:9;7944:22;7923:53;:::i;:::-;7913:63;;7869:117;7730:263;;;;:::o;7999:179::-;8068:10;8089:46;8131:3;8123:6;8089:46;:::i;:::-;8167:4;8162:3;8158:14;8144:28;;8079:99;;;;:::o;8184:118::-;8271:24;8289:5;8271:24;:::i;:::-;8266:3;8259:37;8249:53;;:::o;8338:732::-;8457:3;8486:54;8534:5;8486:54;:::i;:::-;8556:86;8635:6;8630:3;8556:86;:::i;:::-;8549:93;;8666:56;8716:5;8666:56;:::i;:::-;8745:7;8776:1;8761:284;8786:6;8783:1;8780:13;8761:284;;;8862:6;8856:13;8889:63;8948:3;8933:13;8889:63;:::i;:::-;8882:70;;8975:60;9028:6;8975:60;:::i;:::-;8965:70;;8821:224;8808:1;8805;8801:9;8796:14;;8761:284;;;8765:14;9061:3;9054:10;;8462:608;;;;;;;:::o;9076:109::-;9157:21;9172:5;9157:21;:::i;:::-;9152:3;9145:34;9135:50;;:::o;9191:360::-;9277:3;9305:38;9337:5;9305:38;:::i;:::-;9359:70;9422:6;9417:3;9359:70;:::i;:::-;9352:77;;9438:52;9483:6;9478:3;9471:4;9464:5;9460:16;9438:52;:::i;:::-;9515:29;9537:6;9515:29;:::i;:::-;9510:3;9506:39;9499:46;;9281:270;;;;;:::o;9557:364::-;9645:3;9673:39;9706:5;9673:39;:::i;:::-;9728:71;9792:6;9787:3;9728:71;:::i;:::-;9721:78;;9808:52;9853:6;9848:3;9841:4;9834:5;9830:16;9808:52;:::i;:::-;9885:29;9907:6;9885:29;:::i;:::-;9880:3;9876:39;9869:46;;9649:272;;;;;:::o;9927:377::-;10033:3;10061:39;10094:5;10061:39;:::i;:::-;10116:89;10198:6;10193:3;10116:89;:::i;:::-;10109:96;;10214:52;10259:6;10254:3;10247:4;10240:5;10236:16;10214:52;:::i;:::-;10291:6;10286:3;10282:16;10275:23;;10037:267;;;;;:::o;10310:365::-;10452:3;10473:66;10537:1;10532:3;10473:66;:::i;:::-;10466:73;;10548:93;10637:3;10548:93;:::i;:::-;10666:2;10661:3;10657:12;10650:19;;10456:219;;;:::o;10681:365::-;10823:3;10844:66;10908:1;10903:3;10844:66;:::i;:::-;10837:73;;10919:93;11008:3;10919:93;:::i;:::-;11037:2;11032:3;11028:12;11021:19;;10827:219;;;:::o;11052:365::-;11194:3;11215:66;11279:1;11274:3;11215:66;:::i;:::-;11208:73;;11290:93;11379:3;11290:93;:::i;:::-;11408:2;11403:3;11399:12;11392:19;;11198:219;;;:::o;11423:366::-;11565:3;11586:67;11650:2;11645:3;11586:67;:::i;:::-;11579:74;;11662:93;11751:3;11662:93;:::i;:::-;11780:2;11775:3;11771:12;11764:19;;11569:220;;;:::o;11795:366::-;11937:3;11958:67;12022:2;12017:3;11958:67;:::i;:::-;11951:74;;12034:93;12123:3;12034:93;:::i;:::-;12152:2;12147:3;12143:12;12136:19;;11941:220;;;:::o;12167:365::-;12309:3;12330:66;12394:1;12389:3;12330:66;:::i;:::-;12323:73;;12405:93;12494:3;12405:93;:::i;:::-;12523:2;12518:3;12514:12;12507:19;;12313:219;;;:::o;12538:365::-;12680:3;12701:66;12765:1;12760:3;12701:66;:::i;:::-;12694:73;;12776:93;12865:3;12776:93;:::i;:::-;12894:2;12889:3;12885:12;12878:19;;12684:219;;;:::o;12909:366::-;13051:3;13072:67;13136:2;13131:3;13072:67;:::i;:::-;13065:74;;13148:93;13237:3;13148:93;:::i;:::-;13266:2;13261:3;13257:12;13250:19;;13055:220;;;:::o;13281:365::-;13423:3;13444:66;13508:1;13503:3;13444:66;:::i;:::-;13437:73;;13519:93;13608:3;13519:93;:::i;:::-;13637:2;13632:3;13628:12;13621:19;;13427:219;;;:::o;13652:366::-;13794:3;13815:67;13879:2;13874:3;13815:67;:::i;:::-;13808:74;;13891:93;13980:3;13891:93;:::i;:::-;14009:2;14004:3;14000:12;13993:19;;13798:220;;;:::o;14024:365::-;14166:3;14187:66;14251:1;14246:3;14187:66;:::i;:::-;14180:73;;14262:93;14351:3;14262:93;:::i;:::-;14380:2;14375:3;14371:12;14364:19;;14170:219;;;:::o;14395:365::-;14537:3;14558:66;14622:1;14617:3;14558:66;:::i;:::-;14551:73;;14633:93;14722:3;14633:93;:::i;:::-;14751:2;14746:3;14742:12;14735:19;;14541:219;;;:::o;14766:366::-;14908:3;14929:67;14993:2;14988:3;14929:67;:::i;:::-;14922:74;;15005:93;15094:3;15005:93;:::i;:::-;15123:2;15118:3;15114:12;15107:19;;14912:220;;;:::o;15138:365::-;15280:3;15301:66;15365:1;15360:3;15301:66;:::i;:::-;15294:73;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15284:219;;;:::o;15509:365::-;15651:3;15672:66;15736:1;15731:3;15672:66;:::i;:::-;15665:73;;15747:93;15836:3;15747:93;:::i;:::-;15865:2;15860:3;15856:12;15849:19;;15655:219;;;:::o;15880:365::-;16022:3;16043:66;16107:1;16102:3;16043:66;:::i;:::-;16036:73;;16118:93;16207:3;16118:93;:::i;:::-;16236:2;16231:3;16227:12;16220:19;;16026:219;;;:::o;16251:365::-;16393:3;16414:66;16478:1;16473:3;16414:66;:::i;:::-;16407:73;;16489:93;16578:3;16489:93;:::i;:::-;16607:2;16602:3;16598:12;16591:19;;16397:219;;;:::o;16622:365::-;16764:3;16785:66;16849:1;16844:3;16785:66;:::i;:::-;16778:73;;16860:93;16949:3;16860:93;:::i;:::-;16978:2;16973:3;16969:12;16962:19;;16768:219;;;:::o;16993:366::-;17135:3;17156:67;17220:2;17215:3;17156:67;:::i;:::-;17149:74;;17232:93;17321:3;17232:93;:::i;:::-;17350:2;17345:3;17341:12;17334:19;;17139:220;;;:::o;17365:365::-;17507:3;17528:66;17592:1;17587:3;17528:66;:::i;:::-;17521:73;;17603:93;17692:3;17603:93;:::i;:::-;17721:2;17716:3;17712:12;17705:19;;17511:219;;;:::o;17736:365::-;17878:3;17899:66;17963:1;17958:3;17899:66;:::i;:::-;17892:73;;17974:93;18063:3;17974:93;:::i;:::-;18092:2;18087:3;18083:12;18076:19;;17882:219;;;:::o;18107:365::-;18249:3;18270:66;18334:1;18329:3;18270:66;:::i;:::-;18263:73;;18345:93;18434:3;18345:93;:::i;:::-;18463:2;18458:3;18454:12;18447:19;;18253:219;;;:::o;18478:365::-;18620:3;18641:66;18705:1;18700:3;18641:66;:::i;:::-;18634:73;;18716:93;18805:3;18716:93;:::i;:::-;18834:2;18829:3;18825:12;18818:19;;18624:219;;;:::o;18849:366::-;18991:3;19012:67;19076:2;19071:3;19012:67;:::i;:::-;19005:74;;19088:93;19177:3;19088:93;:::i;:::-;19206:2;19201:3;19197:12;19190:19;;18995:220;;;:::o;19221:366::-;19363:3;19384:67;19448:2;19443:3;19384:67;:::i;:::-;19377:74;;19460:93;19549:3;19460:93;:::i;:::-;19578:2;19573:3;19569:12;19562:19;;19367:220;;;:::o;19593:365::-;19735:3;19756:66;19820:1;19815:3;19756:66;:::i;:::-;19749:73;;19831:93;19920:3;19831:93;:::i;:::-;19949:2;19944:3;19940:12;19933:19;;19739:219;;;:::o;19964:366::-;20106:3;20127:67;20191:2;20186:3;20127:67;:::i;:::-;20120:74;;20203:93;20292:3;20203:93;:::i;:::-;20321:2;20316:3;20312:12;20305:19;;20110:220;;;:::o;20336:366::-;20478:3;20499:67;20563:2;20558:3;20499:67;:::i;:::-;20492:74;;20575:93;20664:3;20575:93;:::i;:::-;20693:2;20688:3;20684:12;20677:19;;20482:220;;;:::o;20708:366::-;20850:3;20871:67;20935:2;20930:3;20871:67;:::i;:::-;20864:74;;20947:93;21036:3;20947:93;:::i;:::-;21065:2;21060:3;21056:12;21049:19;;20854:220;;;:::o;21080:365::-;21222:3;21243:66;21307:1;21302:3;21243:66;:::i;:::-;21236:73;;21318:93;21407:3;21318:93;:::i;:::-;21436:2;21431:3;21427:12;21420:19;;21226:219;;;:::o;21451:365::-;21593:3;21614:66;21678:1;21673:3;21614:66;:::i;:::-;21607:73;;21689:93;21778:3;21689:93;:::i;:::-;21807:2;21802:3;21798:12;21791:19;;21597:219;;;:::o;21822:365::-;21964:3;21985:66;22049:1;22044:3;21985:66;:::i;:::-;21978:73;;22060:93;22149:3;22060:93;:::i;:::-;22178:2;22173:3;22169:12;22162:19;;21968:219;;;:::o;22193:365::-;22335:3;22356:66;22420:1;22415:3;22356:66;:::i;:::-;22349:73;;22431:93;22520:3;22431:93;:::i;:::-;22549:2;22544:3;22540:12;22533:19;;22339:219;;;:::o;22564:108::-;22641:24;22659:5;22641:24;:::i;:::-;22636:3;22629:37;22619:53;;:::o;22678:118::-;22765:24;22783:5;22765:24;:::i;:::-;22760:3;22753:37;22743:53;;:::o;22802:435::-;22982:3;23004:95;23095:3;23086:6;23004:95;:::i;:::-;22997:102;;23116:95;23207:3;23198:6;23116:95;:::i;:::-;23109:102;;23228:3;23221:10;;22986:251;;;;;:::o;23243:222::-;23336:4;23374:2;23363:9;23359:18;23351:26;;23387:71;23455:1;23444:9;23440:17;23431:6;23387:71;:::i;:::-;23341:124;;;;:::o;23471:640::-;23666:4;23704:3;23693:9;23689:19;23681:27;;23718:71;23786:1;23775:9;23771:17;23762:6;23718:71;:::i;:::-;23799:72;23867:2;23856:9;23852:18;23843:6;23799:72;:::i;:::-;23881;23949:2;23938:9;23934:18;23925:6;23881:72;:::i;:::-;24000:9;23994:4;23990:20;23985:2;23974:9;23970:18;23963:48;24028:76;24099:4;24090:6;24028:76;:::i;:::-;24020:84;;23671:440;;;;;;;:::o;24117:373::-;24260:4;24298:2;24287:9;24283:18;24275:26;;24347:9;24341:4;24337:20;24333:1;24322:9;24318:17;24311:47;24375:108;24478:4;24469:6;24375:108;:::i;:::-;24367:116;;24265:225;;;;:::o;24496:210::-;24583:4;24621:2;24610:9;24606:18;24598:26;;24634:65;24696:1;24685:9;24681:17;24672:6;24634:65;:::i;:::-;24588:118;;;;:::o;24712:313::-;24825:4;24863:2;24852:9;24848:18;24840:26;;24912:9;24906:4;24902:20;24898:1;24887:9;24883:17;24876:47;24940:78;25013:4;25004:6;24940:78;:::i;:::-;24932:86;;24830:195;;;;:::o;25031:419::-;25197:4;25235:2;25224:9;25220:18;25212:26;;25284:9;25278:4;25274:20;25270:1;25259:9;25255:17;25248:47;25312:131;25438:4;25312:131;:::i;:::-;25304:139;;25202:248;;;:::o;25456:419::-;25622:4;25660:2;25649:9;25645:18;25637:26;;25709:9;25703:4;25699:20;25695:1;25684:9;25680:17;25673:47;25737:131;25863:4;25737:131;:::i;:::-;25729:139;;25627:248;;;:::o;25881:419::-;26047:4;26085:2;26074:9;26070:18;26062:26;;26134:9;26128:4;26124:20;26120:1;26109:9;26105:17;26098:47;26162:131;26288:4;26162:131;:::i;:::-;26154:139;;26052:248;;;:::o;26306:419::-;26472:4;26510:2;26499:9;26495:18;26487:26;;26559:9;26553:4;26549:20;26545:1;26534:9;26530:17;26523:47;26587:131;26713:4;26587:131;:::i;:::-;26579:139;;26477:248;;;:::o;26731:419::-;26897:4;26935:2;26924:9;26920:18;26912:26;;26984:9;26978:4;26974:20;26970:1;26959:9;26955:17;26948:47;27012:131;27138:4;27012:131;:::i;:::-;27004:139;;26902:248;;;:::o;27156:419::-;27322:4;27360:2;27349:9;27345:18;27337:26;;27409:9;27403:4;27399:20;27395:1;27384:9;27380:17;27373:47;27437:131;27563:4;27437:131;:::i;:::-;27429:139;;27327:248;;;:::o;27581:419::-;27747:4;27785:2;27774:9;27770:18;27762:26;;27834:9;27828:4;27824:20;27820:1;27809:9;27805:17;27798:47;27862:131;27988:4;27862:131;:::i;:::-;27854:139;;27752:248;;;:::o;28006:419::-;28172:4;28210:2;28199:9;28195:18;28187:26;;28259:9;28253:4;28249:20;28245:1;28234:9;28230:17;28223:47;28287:131;28413:4;28287:131;:::i;:::-;28279:139;;28177:248;;;:::o;28431:419::-;28597:4;28635:2;28624:9;28620:18;28612:26;;28684:9;28678:4;28674:20;28670:1;28659:9;28655:17;28648:47;28712:131;28838:4;28712:131;:::i;:::-;28704:139;;28602:248;;;:::o;28856:419::-;29022:4;29060:2;29049:9;29045:18;29037:26;;29109:9;29103:4;29099:20;29095:1;29084:9;29080:17;29073:47;29137:131;29263:4;29137:131;:::i;:::-;29129:139;;29027:248;;;:::o;29281:419::-;29447:4;29485:2;29474:9;29470:18;29462:26;;29534:9;29528:4;29524:20;29520:1;29509:9;29505:17;29498:47;29562:131;29688:4;29562:131;:::i;:::-;29554:139;;29452:248;;;:::o;29706:419::-;29872:4;29910:2;29899:9;29895:18;29887:26;;29959:9;29953:4;29949:20;29945:1;29934:9;29930:17;29923:47;29987:131;30113:4;29987:131;:::i;:::-;29979:139;;29877:248;;;:::o;30131:419::-;30297:4;30335:2;30324:9;30320:18;30312:26;;30384:9;30378:4;30374:20;30370:1;30359:9;30355:17;30348:47;30412:131;30538:4;30412:131;:::i;:::-;30404:139;;30302:248;;;:::o;30556:419::-;30722:4;30760:2;30749:9;30745:18;30737:26;;30809:9;30803:4;30799:20;30795:1;30784:9;30780:17;30773:47;30837:131;30963:4;30837:131;:::i;:::-;30829:139;;30727:248;;;:::o;30981:419::-;31147:4;31185:2;31174:9;31170:18;31162:26;;31234:9;31228:4;31224:20;31220:1;31209:9;31205:17;31198:47;31262:131;31388:4;31262:131;:::i;:::-;31254:139;;31152:248;;;:::o;31406:419::-;31572:4;31610:2;31599:9;31595:18;31587:26;;31659:9;31653:4;31649:20;31645:1;31634:9;31630:17;31623:47;31687:131;31813:4;31687:131;:::i;:::-;31679:139;;31577:248;;;:::o;31831:419::-;31997:4;32035:2;32024:9;32020:18;32012:26;;32084:9;32078:4;32074:20;32070:1;32059:9;32055:17;32048:47;32112:131;32238:4;32112:131;:::i;:::-;32104:139;;32002:248;;;:::o;32256:419::-;32422:4;32460:2;32449:9;32445:18;32437:26;;32509:9;32503:4;32499:20;32495:1;32484:9;32480:17;32473:47;32537:131;32663:4;32537:131;:::i;:::-;32529:139;;32427:248;;;:::o;32681:419::-;32847:4;32885:2;32874:9;32870:18;32862:26;;32934:9;32928:4;32924:20;32920:1;32909:9;32905:17;32898:47;32962:131;33088:4;32962:131;:::i;:::-;32954:139;;32852:248;;;:::o;33106:419::-;33272:4;33310:2;33299:9;33295:18;33287:26;;33359:9;33353:4;33349:20;33345:1;33334:9;33330:17;33323:47;33387:131;33513:4;33387:131;:::i;:::-;33379:139;;33277:248;;;:::o;33531:419::-;33697:4;33735:2;33724:9;33720:18;33712:26;;33784:9;33778:4;33774:20;33770:1;33759:9;33755:17;33748:47;33812:131;33938:4;33812:131;:::i;:::-;33804:139;;33702:248;;;:::o;33956:419::-;34122:4;34160:2;34149:9;34145:18;34137:26;;34209:9;34203:4;34199:20;34195:1;34184:9;34180:17;34173:47;34237:131;34363:4;34237:131;:::i;:::-;34229:139;;34127:248;;;:::o;34381:419::-;34547:4;34585:2;34574:9;34570:18;34562:26;;34634:9;34628:4;34624:20;34620:1;34609:9;34605:17;34598:47;34662:131;34788:4;34662:131;:::i;:::-;34654:139;;34552:248;;;:::o;34806:419::-;34972:4;35010:2;34999:9;34995:18;34987:26;;35059:9;35053:4;35049:20;35045:1;35034:9;35030:17;35023:47;35087:131;35213:4;35087:131;:::i;:::-;35079:139;;34977:248;;;:::o;35231:419::-;35397:4;35435:2;35424:9;35420:18;35412:26;;35484:9;35478:4;35474:20;35470:1;35459:9;35455:17;35448:47;35512:131;35638:4;35512:131;:::i;:::-;35504:139;;35402:248;;;:::o;35656:419::-;35822:4;35860:2;35849:9;35845:18;35837:26;;35909:9;35903:4;35899:20;35895:1;35884:9;35880:17;35873:47;35937:131;36063:4;35937:131;:::i;:::-;35929:139;;35827:248;;;:::o;36081:419::-;36247:4;36285:2;36274:9;36270:18;36262:26;;36334:9;36328:4;36324:20;36320:1;36309:9;36305:17;36298:47;36362:131;36488:4;36362:131;:::i;:::-;36354:139;;36252:248;;;:::o;36506:419::-;36672:4;36710:2;36699:9;36695:18;36687:26;;36759:9;36753:4;36749:20;36745:1;36734:9;36730:17;36723:47;36787:131;36913:4;36787:131;:::i;:::-;36779:139;;36677:248;;;:::o;36931:419::-;37097:4;37135:2;37124:9;37120:18;37112:26;;37184:9;37178:4;37174:20;37170:1;37159:9;37155:17;37148:47;37212:131;37338:4;37212:131;:::i;:::-;37204:139;;37102:248;;;:::o;37356:419::-;37522:4;37560:2;37549:9;37545:18;37537:26;;37609:9;37603:4;37599:20;37595:1;37584:9;37580:17;37573:47;37637:131;37763:4;37637:131;:::i;:::-;37629:139;;37527:248;;;:::o;37781:419::-;37947:4;37985:2;37974:9;37970:18;37962:26;;38034:9;38028:4;38024:20;38020:1;38009:9;38005:17;37998:47;38062:131;38188:4;38062:131;:::i;:::-;38054:139;;37952:248;;;:::o;38206:419::-;38372:4;38410:2;38399:9;38395:18;38387:26;;38459:9;38453:4;38449:20;38445:1;38434:9;38430:17;38423:47;38487:131;38613:4;38487:131;:::i;:::-;38479:139;;38377:248;;;:::o;38631:419::-;38797:4;38835:2;38824:9;38820:18;38812:26;;38884:9;38878:4;38874:20;38870:1;38859:9;38855:17;38848:47;38912:131;39038:4;38912:131;:::i;:::-;38904:139;;38802:248;;;:::o;39056:222::-;39149:4;39187:2;39176:9;39172:18;39164:26;;39200:71;39268:1;39257:9;39253:17;39244:6;39200:71;:::i;:::-;39154:124;;;;:::o;39284:129::-;39318:6;39345:20;;:::i;:::-;39335:30;;39374:33;39402:4;39394:6;39374:33;:::i;:::-;39325:88;;;:::o;39419:75::-;39452:6;39485:2;39479:9;39469:19;;39459:35;:::o;39500:307::-;39561:4;39651:18;39643:6;39640:30;39637:2;;;39673:18;;:::i;:::-;39637:2;39711:29;39733:6;39711:29;:::i;:::-;39703:37;;39795:4;39789;39785:15;39777:23;;39566:241;;;:::o;39813:308::-;39875:4;39965:18;39957:6;39954:30;39951:2;;;39987:18;;:::i;:::-;39951:2;40025:29;40047:6;40025:29;:::i;:::-;40017:37;;40109:4;40103;40099:15;40091:23;;39880:241;;;:::o;40127:132::-;40194:4;40217:3;40209:11;;40247:4;40242:3;40238:14;40230:22;;40199:60;;;:::o;40265:114::-;40332:6;40366:5;40360:12;40350:22;;40339:40;;;:::o;40385:98::-;40436:6;40470:5;40464:12;40454:22;;40443:40;;;:::o;40489:99::-;40541:6;40575:5;40569:12;40559:22;;40548:40;;;:::o;40594:113::-;40664:4;40696;40691:3;40687:14;40679:22;;40669:38;;;:::o;40713:184::-;40812:11;40846:6;40841:3;40834:19;40886:4;40881:3;40877:14;40862:29;;40824:73;;;;:::o;40903:168::-;40986:11;41020:6;41015:3;41008:19;41060:4;41055:3;41051:14;41036:29;;40998:73;;;;:::o;41077:169::-;41161:11;41195:6;41190:3;41183:19;41235:4;41230:3;41226:14;41211:29;;41173:73;;;;:::o;41252:148::-;41354:11;41391:3;41376:18;;41366:34;;;;:::o;41406:305::-;41446:3;41465:20;41483:1;41465:20;:::i;:::-;41460:25;;41499:20;41517:1;41499:20;:::i;:::-;41494:25;;41653:1;41585:66;41581:74;41578:1;41575:81;41572:2;;;41659:18;;:::i;:::-;41572:2;41703:1;41700;41696:9;41689:16;;41450:261;;;;:::o;41717:185::-;41757:1;41774:20;41792:1;41774:20;:::i;:::-;41769:25;;41808:20;41826:1;41808:20;:::i;:::-;41803:25;;41847:1;41837:2;;41852:18;;:::i;:::-;41837:2;41894:1;41891;41887:9;41882:14;;41759:143;;;;:::o;41908:348::-;41948:7;41971:20;41989:1;41971:20;:::i;:::-;41966:25;;42005:20;42023:1;42005:20;:::i;:::-;42000:25;;42193:1;42125:66;42121:74;42118:1;42115:81;42110:1;42103:9;42096:17;42092:105;42089:2;;;42200:18;;:::i;:::-;42089:2;42248:1;42245;42241:9;42230:20;;41956:300;;;;:::o;42262:191::-;42302:4;42322:20;42340:1;42322:20;:::i;:::-;42317:25;;42356:20;42374:1;42356:20;:::i;:::-;42351:25;;42395:1;42392;42389:8;42386:2;;;42400:18;;:::i;:::-;42386:2;42445:1;42442;42438:9;42430:17;;42307:146;;;;:::o;42459:96::-;42496:7;42525:24;42543:5;42525:24;:::i;:::-;42514:35;;42504:51;;;:::o;42561:104::-;42606:7;42635:24;42653:5;42635:24;:::i;:::-;42624:35;;42614:51;;;:::o;42671:90::-;42705:7;42748:5;42741:13;42734:21;42723:32;;42713:48;;;:::o;42767:149::-;42803:7;42843:66;42836:5;42832:78;42821:89;;42811:105;;;:::o;42922:126::-;42959:7;42999:42;42992:5;42988:54;42977:65;;42967:81;;;:::o;43054:77::-;43091:7;43120:5;43109:16;;43099:32;;;:::o;43137:154::-;43221:6;43216:3;43211;43198:30;43283:1;43274:6;43269:3;43265:16;43258:27;43188:103;;;:::o;43297:307::-;43365:1;43375:113;43389:6;43386:1;43383:13;43375:113;;;43474:1;43469:3;43465:11;43459:18;43455:1;43450:3;43446:11;43439:39;43411:2;43408:1;43404:10;43399:15;;43375:113;;;43506:6;43503:1;43500:13;43497:2;;;43586:1;43577:6;43572:3;43568:16;43561:27;43497:2;43346:258;;;;:::o;43610:320::-;43654:6;43691:1;43685:4;43681:12;43671:22;;43738:1;43732:4;43728:12;43759:18;43749:2;;43815:4;43807:6;43803:17;43793:27;;43749:2;43877;43869:6;43866:14;43846:18;43843:38;43840:2;;;43896:18;;:::i;:::-;43840:2;43661:269;;;;:::o;43936:281::-;44019:27;44041:4;44019:27;:::i;:::-;44011:6;44007:40;44149:6;44137:10;44134:22;44113:18;44101:10;44098:34;44095:62;44092:2;;;44160:18;;:::i;:::-;44092:2;44200:10;44196:2;44189:22;43979:238;;;:::o;44223:233::-;44262:3;44285:24;44303:5;44285:24;:::i;:::-;44276:33;;44331:66;44324:5;44321:77;44318:2;;;44401:18;;:::i;:::-;44318:2;44448:1;44441:5;44437:13;44430:20;;44266:190;;;:::o;44462:176::-;44494:1;44511:20;44529:1;44511:20;:::i;:::-;44506:25;;44545:20;44563:1;44545:20;:::i;:::-;44540:25;;44584:1;44574:2;;44589:18;;:::i;:::-;44574:2;44630:1;44627;44623:9;44618:14;;44496:142;;;;:::o;44644:180::-;44692:77;44689:1;44682:88;44789:4;44786:1;44779:15;44813:4;44810:1;44803:15;44830:180;44878:77;44875:1;44868:88;44975:4;44972:1;44965:15;44999:4;44996:1;44989:15;45016:180;45064:77;45061:1;45054:88;45161:4;45158:1;45151:15;45185:4;45182:1;45175:15;45202:180;45250:77;45247:1;45240:88;45347:4;45344:1;45337:15;45371:4;45368:1;45361:15;45388:180;45436:77;45433:1;45426:88;45533:4;45530:1;45523:15;45557:4;45554:1;45547:15;45574:180;45622:77;45619:1;45612:88;45719:4;45716:1;45709:15;45743:4;45740:1;45733:15;45760:117;45869:1;45866;45859:12;45883:117;45992:1;45989;45982:12;46006:117;46115:1;46112;46105:12;46129:117;46238:1;46235;46228:12;46252:102;46293:6;46344:2;46340:7;46335:2;46328:5;46324:14;46320:28;46310:38;;46300:54;;;:::o;46360:153::-;46500:5;46496:1;46488:6;46484:14;46477:29;46466:47;:::o;46519:153::-;46659:5;46655:1;46647:6;46643:14;46636:29;46625:47;:::o;46678:153::-;46818:5;46814:1;46806:6;46802:14;46795:29;46784:47;:::o;46837:230::-;46977:34;46973:1;46965:6;46961:14;46954:58;47046:13;47041:2;47033:6;47029:15;47022:38;46943:124;:::o;47073:165::-;47213:17;47209:1;47201:6;47197:14;47190:41;47179:59;:::o;47244:153::-;47384:5;47380:1;47372:6;47368:14;47361:29;47350:47;:::o;47403:153::-;47543:5;47539:1;47531:6;47527:14;47520:29;47509:47;:::o;47562:167::-;47702:19;47698:1;47690:6;47686:14;47679:43;47668:61;:::o;47735:153::-;47875:5;47871:1;47863:6;47859:14;47852:29;47841:47;:::o;47894:164::-;48034:16;48030:1;48022:6;48018:14;48011:40;48000:58;:::o;48064:153::-;48204:5;48200:1;48192:6;48188:14;48181:29;48170:47;:::o;48223:153::-;48363:5;48359:1;48351:6;48347:14;48340:29;48329:47;:::o;48382:170::-;48522:22;48518:1;48510:6;48506:14;48499:46;48488:64;:::o;48558:153::-;48698:5;48694:1;48686:6;48682:14;48675:29;48664:47;:::o;48717:153::-;48857:5;48853:1;48845:6;48841:14;48834:29;48823:47;:::o;48876:152::-;49016:4;49012:1;49004:6;49000:14;48993:28;48982:46;:::o;49034:153::-;49174:5;49170:1;49162:6;49158:14;49151:29;49140:47;:::o;49193:153::-;49333:5;49329:1;49321:6;49317:14;49310:29;49299:47;:::o;49352:163::-;49492:15;49488:1;49480:6;49476:14;49469:39;49458:57;:::o;49521:153::-;49661:5;49657:1;49649:6;49645:14;49638:29;49627:47;:::o;49680:153::-;49820:5;49816:1;49808:6;49804:14;49797:29;49786:47;:::o;49839:153::-;49979:5;49975:1;49967:6;49963:14;49956:29;49945:47;:::o;49998:153::-;50138:5;50134:1;50126:6;50122:14;50115:29;50104:47;:::o;50157:167::-;50297:19;50293:1;50285:6;50281:14;50274:43;50263:61;:::o;50330:160::-;50470:12;50466:1;50458:6;50454:14;50447:36;50436:54;:::o;50496:158::-;50636:10;50632:1;50624:6;50620:14;50613:34;50602:52;:::o;50660:231::-;50800:34;50796:1;50788:6;50784:14;50777:58;50869:14;50864:2;50856:6;50852:15;50845:39;50766:125;:::o;50897:168::-;51037:20;51033:1;51025:6;51021:14;51014:44;51003:62;:::o;51071:172::-;51211:24;51207:1;51199:6;51195:14;51188:48;51177:66;:::o;51249:152::-;51389:4;51385:1;51377:6;51373:14;51366:28;51355:46;:::o;51407:153::-;51547:5;51543:1;51535:6;51531:14;51524:29;51513:47;:::o;51566:153::-;51706:5;51702:1;51694:6;51690:14;51683:29;51672:47;:::o;51725:153::-;51865:5;51861:1;51853:6;51849:14;51842:29;51831:47;:::o;51884:122::-;51957:24;51975:5;51957:24;:::i;:::-;51950:5;51947:35;51937:2;;51996:1;51993;51986:12;51937:2;51927:79;:::o;52012:138::-;52093:32;52119:5;52093:32;:::i;:::-;52086:5;52083:43;52073:2;;52140:1;52137;52130:12;52073:2;52063:87;:::o;52156:116::-;52226:21;52241:5;52226:21;:::i;:::-;52219:5;52216:32;52206:2;;52262:1;52259;52252:12;52206:2;52196:76;:::o;52278:120::-;52350:23;52367:5;52350:23;:::i;:::-;52343:5;52340:34;52330:2;;52388:1;52385;52378:12;52330:2;52320:78;:::o;52404:122::-;52477:24;52495:5;52477:24;:::i;:::-;52470:5;52467:35;52457:2;;52516:1;52513;52506:12;52457:2;52447:79;:::o
Swarm Source
ipfs://b8257ef5c75eeb92e1472c9e1f31addaff90be2c35d6f1e54fd96d07fb1268a1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.