ERC-721
Overview
Max Total Supply
4,444 DPZ
Holders
1,254
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DPZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DerpyPunkz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-29 */ // SPDX-License-Identifier: MIT // Dev : A Square pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { 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); } 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); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } 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, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 1; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract DerpyPunkz is Ownable, ERC721A, ReentrancyGuard { using Strings for uint256; uint256 public MAX_PER_Transaction = 4; // maximam amount that user can mint/Transaction uint256 public MAX_PER_WALLET = 4; // maximam amount that user can mint/Wallet uint256 public FREE_HOLDERS_ALLOWED = 1; // maximam amount that user can mint in Free holder uint256 public TOKEN_NUMBER = 4444; uint256 public FirstPhaseCollectionSize_ = 4444; // total number of nfts in Phase 1 mapping(address => uint256) public publicClaimedBy; mapping(address => uint256) public holdersMintClaimedBy; uint256 private constant TotalCollectionSize_ = 8888; // total number of nfts uint256 private constant MaxMintPerBatch_ = 20; //max mint per transaction uint256 public PRICE = 0.06 ether; string private _baseTokenURI; string private second_baseTokenURI; uint public status = 0; //0-pause 1-Free-WL 2-Whitelist 3-Public 4-HoldersMint constructor() ERC721A("Derpy Punkz","DPZ") { } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function mint(uint256 quantity) external payable callerIsUser { require(status == 3 , "Sale is not Active"); require(totalSupply() + quantity <= TotalCollectionSize_, "reached max supply"); require(totalSupply() + quantity <= FirstPhaseCollectionSize_, "reached phase max supply"); require(quantity <= MAX_PER_Transaction,"can not mint this many"); require(msg.value >= PRICE * quantity, "Need to send more ETH."); publicClaimedBy[msg.sender] += quantity; require(publicClaimedBy[msg.sender] <= MAX_PER_WALLET, "Purchase exceeds max allowed"); _safeMint(msg.sender, quantity); } function mintForHolders() external payable callerIsUser { require(status == 4 , "Sale is not Active"); require(totalSupply() + 1 <= TotalCollectionSize_, "reached max supply"); require(balanceOf(msg.sender) >= 1, "You are not a Holder"); holdersMintClaimedBy[msg.sender] += 1; require(holdersMintClaimedBy[msg.sender] <= FREE_HOLDERS_ALLOWED, "Purchase exceeds max allowed"); _safeMint(msg.sender, 1); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token"); if(tokenId <= TOKEN_NUMBER) { string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, "/", tokenId.toString(), ".json")) : ""; } else { return bytes(second_baseTokenURI).length > 0 ? string(abi.encodePacked(second_baseTokenURI, "/", tokenId.toString(), ".json")) : ""; } } function setBaseURI(string memory baseURI) external onlyOwner { _baseTokenURI = baseURI; } function setSecondBaseURI(string memory baseURI) external onlyOwner { second_baseTokenURI = baseURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return _ownershipOf(tokenId); } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function changeMintPrice(uint256 _newPrice) external onlyOwner { PRICE = _newPrice; } function changeMAX_PER_WALLET(uint256 q) external onlyOwner { MAX_PER_WALLET = q; } function changeMAX_PER_Transaction(uint256 q) external onlyOwner { MAX_PER_Transaction = q; } function changeFREE_HOLDERS_ALLOWED(uint256 q) external onlyOwner { FREE_HOLDERS_ALLOWED = q; } function changeTOKEN_NUMBER(uint256 q) external onlyOwner { TOKEN_NUMBER = q; } function changeFirstPhaseCollectionSize_(uint256 size) external onlyOwner { FirstPhaseCollectionSize_ = size; } function setStatus(uint256 s)external onlyOwner{ status = s; } function getStatus()public view returns(uint){ return status; } function getPrice(uint256 _quantity) public view returns (uint256) { return _quantity*PRICE; } function airdrop(address sendTo, uint quantity)public onlyOwner{ require(totalSupply() + quantity <= TotalCollectionSize_, "reached max supply"); _safeMint(sendTo, quantity); } // WhiteList CODE STARTS // uint256 public whiteListMaxMint = 4; bytes32 public whitelistMerkleRoot; uint256 public itemPriceWhiteList = 0.04 ether; mapping(address => uint256) public whiteListClaimedBy; uint256 public TotalWLavailable = 4444; // total number of nfts function setWhitelistMerkleRoot(bytes32 _whitelistMerkleRoot) external onlyOwner { whitelistMerkleRoot = _whitelistMerkleRoot; } function getWhitelistPrice(uint256 _quantity) public view returns (uint256) { return _quantity*itemPriceWhiteList; } function inWhitelist(bytes32[] memory _proof, address _owner) public view returns (bool) { return MerkleProof.verify(_proof, whitelistMerkleRoot, keccak256(abi.encodePacked(_owner))); } function purchaseWhiteListTokens(uint256 _howMany, bytes32[] calldata _proof) external payable { require(status == 2 , "Sale is not active "); require(totalSupply()+_howMany<=TotalWLavailable,"Quantity must be lesser then MaxSupply"); require(inWhitelist(_proof, msg.sender), "You are not in presale"); require(msg.value >= _howMany * itemPriceWhiteList, "Try to send more ETH"); whiteListClaimedBy[msg.sender] += _howMany; require(whiteListClaimedBy[msg.sender] <= whiteListMaxMint, "Purchase exceeds max allowed"); _safeMint(msg.sender, _howMany); } function setWhiteListMaxMint(uint256 _whiteListMaxMint) external onlyOwner { whiteListMaxMint = _whiteListMaxMint; } function setWLavailable(uint256 _whiteListCollection) external onlyOwner { TotalWLavailable = _whiteListCollection; } function setPriceWhiteList(uint256 _itemPriceWhiteList) external onlyOwner { itemPriceWhiteList = _itemPriceWhiteList; } // Free WhiteList CODE STARTS // uint256 public freeWhiteListMaxMint = 1; bytes32 public freeWhitelistMerkleRoot; mapping(address => uint256) public freewhiteListClaimedBy; function setFreeWhitelistMerkleRoot(bytes32 _whitelistMerkleRoot) external onlyOwner { freeWhitelistMerkleRoot = _whitelistMerkleRoot; } function inFreeWhitelist(bytes32[] memory _proof, address _owner) public view returns (bool) { return MerkleProof.verify(_proof, freeWhitelistMerkleRoot, keccak256(abi.encodePacked(_owner))); } function FREEpurchaseWhiteListTokens(uint256 _howMany, bytes32[] calldata _proof) external payable { require(status == 1 , "Sale is not active "); require(totalSupply()+_howMany<=TotalWLavailable,"Quantity must be lesser then MaxSupply"); require(inFreeWhitelist(_proof, msg.sender), "You are not in presale"); freewhiteListClaimedBy[msg.sender] += _howMany; require(freewhiteListClaimedBy[msg.sender] <= freeWhiteListMaxMint, "Purchase exceeds max allowed"); _safeMint(msg.sender, _howMany); } function setFreeWhiteListMaxMint(uint256 _whiteListMaxMint) external onlyOwner { freeWhiteListMaxMint = _whiteListMaxMint; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FREE_HOLDERS_ALLOWED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_howMany","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"FREEpurchaseWhiteListTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"FirstPhaseCollectionSize_","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_NUMBER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalWLavailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sendTo","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeFREE_HOLDERS_ALLOWED","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"size","type":"uint256"}],"name":"changeFirstPhaseCollectionSize_","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeTOKEN_NUMBER","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeWhiteListMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeWhitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freewhiteListClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getWhitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holdersMintClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"address","name":"_owner","type":"address"}],"name":"inFreeWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"address","name":"_owner","type":"address"}],"name":"inWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"itemPriceWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintForHolders","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_howMany","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"purchaseWhiteListTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListMaxMint","type":"uint256"}],"name":"setFreeWhiteListMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setFreeWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemPriceWhiteList","type":"uint256"}],"name":"setPriceWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setSecondBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListCollection","type":"uint256"}],"name":"setWLavailable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListMaxMint","type":"uint256"}],"name":"setWhiteListMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526004600a556004600b556001600c5561115c600d5561115c600e5566d529ae9e86000060115560006014556004601555668e1bc9bf04000060175561115c6019556001601a553480156200005757600080fd5b506040518060400160405280600b81526020017f44657270792050756e6b7a0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f44505a0000000000000000000000000000000000000000000000000000000000815250620000e4620000d86200013c60201b60201c565b6200014460201b60201c565b8160039080519060200190620000fc92919062000211565b5080600490805190602001906200011592919062000211565b50620001266200020860201b60201c565b6001819055505050600160098190555062000326565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b8280546200021f90620002c1565b90600052602060002090601f0160209004810192826200024357600085556200028f565b82601f106200025e57805160ff19168380011785556200028f565b828001600101855582156200028f579182015b828111156200028e57825182559160200191906001019062000271565b5b5090506200029e9190620002a2565b5090565b5b80821115620002bd576000816000905550600101620002a3565b5090565b60006002820490506001821680620002da57607f821691505b60208210811415620002f157620002f0620002f7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61586380620003366000396000f3fe6080604052600436106103ad5760003560e01c80637ab0f550116101e7578063aa98e0c61161010d578063cece3fea116100a0578063e75722301161006f578063e757223014610dce578063e8006bb014610e0b578063e985e9c514610e34578063f2fde38b14610e71576103ad565b8063cece3fea14610d00578063dc33e68114610d2b578063e4f9a94914610d68578063e5ec56a014610d91576103ad565b8063b569c7b4116100dc578063b569c7b414610c46578063b88d4fde14610c71578063bd32fb6614610c9a578063c87b56dd14610cc3576103ad565b8063aa98e0c614610b8a578063aaff45c514610bb5578063ac44600214610bf2578063aebceff414610c09576103ad565b8063915a647f11610185578063a0712d6811610154578063a0712d6814610adf578063a22cb46514610afb578063a40ece7a14610b24578063aa91a97014610b4d576103ad565b8063915a647f14610a235780639231ab2a14610a4e578063930fa27b14610a8b57806395d89b4114610ab4576103ad565b80638825b014116101c15780638825b0141461097b5780638ba4cc3c146109a45780638d859f3e146109cd5780638da5cb5b146109f8576103ad565b80637ab0f5501461091d5780637cdd702e1461094657806382449f3314610971576103ad565b806334f90318116102d7578063598a32f91161026a5780636c32f9f7116102395780636c32f9f71461086157806370a082311461088c578063715018a6146108c957806375236143146108e0576103ad565b8063598a32f9146107a55780636352211e146107d057806364662f681461080d57806369ba1a7514610838576103ad565b80634e69d560116102a65780634e69d5601461070a5780635151c0511461073557806351d7ff931461075157806355f804b31461077c576103ad565b806334f90318146106525780633fd173661461068f57806342842e0e146106b857806345ab07ee146106e1576103ad565b806318160ddd1161034f5780632632d5f81161031e5780632632d5f8146105ac5780632ba2865b146105d75780632ea7c5d9146106005780632f9c7f0114610629576103ad565b806318160ddd146104f05780631984b2861461051b578063200d2ed21461055857806323b872dd14610583576103ad565b8063081812fc1161038b578063081812fc14610443578063095ea7b3146104805780630f2cdd6c146104a957806310157fc3146104d4576103ad565b806301ffc9a7146103b2578063031eba26146103ef57806306fdde0314610418575b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d4919061458a565b610e9a565b6040516103e69190614c65565b60405180910390f35b3480156103fb57600080fd5b506104166004803603810190610411919061455d565b610f7c565b005b34801561042457600080fd5b5061042d611002565b60405161043a9190614c9b565b60405180910390f35b34801561044f57600080fd5b5061046a6004803603810190610465919061462d565b611094565b6040516104779190614bfe565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a291906144c1565b611110565b005b3480156104b557600080fd5b506104be61121b565b6040516104cb9190614ef8565b60405180910390f35b6104ee60048036038101906104e9919061465a565b611221565b005b3480156104fc57600080fd5b50610505611480565b6040516105129190614ef8565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d919061433e565b611497565b60405161054f9190614ef8565b60405180910390f35b34801561056457600080fd5b5061056d6114af565b60405161057a9190614ef8565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906143ab565b6114b5565b005b3480156105b857600080fd5b506105c16114c5565b6040516105ce9190614ef8565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f9919061462d565b6114cb565b005b34801561060c57600080fd5b506106276004803603810190610622919061462d565b611551565b005b34801561063557600080fd5b50610650600480360381019061064b919061462d565b6115d7565b005b34801561065e57600080fd5b506106796004803603810190610674919061433e565b61165d565b6040516106869190614ef8565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b1919061462d565b611675565b005b3480156106c457600080fd5b506106df60048036038101906106da91906143ab565b6116fb565b005b3480156106ed57600080fd5b506107086004803603810190610703919061462d565b61171b565b005b34801561071657600080fd5b5061071f6117a1565b60405161072c9190614ef8565b60405180910390f35b61074f600480360381019061074a919061465a565b6117ab565b005b34801561075d57600080fd5b506107666119ba565b6040516107739190614ef8565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e91906145e4565b6119c0565b005b3480156107b157600080fd5b506107ba611a56565b6040516107c79190614ef8565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f2919061462d565b611a5c565b6040516108049190614bfe565b60405180910390f35b34801561081957600080fd5b50610822611a72565b60405161082f9190614ef8565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a919061462d565b611a78565b005b34801561086d57600080fd5b50610876611afe565b6040516108839190614ef8565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae919061433e565b611b04565b6040516108c09190614ef8565b60405180910390f35b3480156108d557600080fd5b506108de611bd4565b005b3480156108ec57600080fd5b506109076004803603810190610902919061433e565b611c5c565b6040516109149190614ef8565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f919061462d565b611c74565b005b34801561095257600080fd5b5061095b611cfa565b6040516109689190614ef8565b60405180910390f35b610979611d00565b005b34801561098757600080fd5b506109a2600480360381019061099d919061462d565b611f3f565b005b3480156109b057600080fd5b506109cb60048036038101906109c691906144c1565b611fc5565b005b3480156109d957600080fd5b506109e26120a6565b6040516109ef9190614ef8565b60405180910390f35b348015610a0457600080fd5b50610a0d6120ac565b604051610a1a9190614bfe565b60405180910390f35b348015610a2f57600080fd5b50610a386120d5565b604051610a459190614ef8565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a70919061462d565b6120db565b604051610a829190614edd565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad91906145e4565b6120f3565b005b348015610ac057600080fd5b50610ac9612189565b604051610ad69190614c9b565b60405180910390f35b610af96004803603810190610af4919061462d565b61221b565b005b348015610b0757600080fd5b50610b226004803603810190610b1d9190614481565b6124f8565b005b348015610b3057600080fd5b50610b4b6004803603810190610b46919061462d565b612670565b005b348015610b5957600080fd5b50610b746004803603810190610b6f9190614501565b6126f6565b604051610b819190614c65565b60405180910390f35b348015610b9657600080fd5b50610b9f612733565b604051610bac9190614c80565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd7919061433e565b612739565b604051610be99190614ef8565b60405180910390f35b348015610bfe57600080fd5b50610c07612751565b005b348015610c1557600080fd5b50610c306004803603810190610c2b919061462d565b6128d2565b604051610c3d9190614ef8565b60405180910390f35b348015610c5257600080fd5b50610c5b6128e9565b604051610c689190614c80565b60405180910390f35b348015610c7d57600080fd5b50610c986004803603810190610c9391906143fe565b6128ef565b005b348015610ca657600080fd5b50610cc16004803603810190610cbc919061455d565b61296b565b005b348015610ccf57600080fd5b50610cea6004803603810190610ce5919061462d565b6129f1565b604051610cf79190614c9b565b60405180910390f35b348015610d0c57600080fd5b50610d15612b00565b604051610d229190614ef8565b60405180910390f35b348015610d3757600080fd5b50610d526004803603810190610d4d919061433e565b612b06565b604051610d5f9190614ef8565b60405180910390f35b348015610d7457600080fd5b50610d8f6004803603810190610d8a919061462d565b612b18565b005b348015610d9d57600080fd5b50610db86004803603810190610db39190614501565b612b9e565b604051610dc59190614c65565b60405180910390f35b348015610dda57600080fd5b50610df56004803603810190610df0919061462d565b612bdb565b604051610e029190614ef8565b60405180910390f35b348015610e1757600080fd5b50610e326004803603810190610e2d919061462d565b612bf2565b005b348015610e4057600080fd5b50610e5b6004803603810190610e56919061436b565b612c78565b604051610e689190614c65565b60405180910390f35b348015610e7d57600080fd5b50610e986004803603810190610e93919061433e565b612d0c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f755750610f7482612e04565b5b9050919050565b610f84612e6e565b73ffffffffffffffffffffffffffffffffffffffff16610fa26120ac565b73ffffffffffffffffffffffffffffffffffffffff1614610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90614ddd565b60405180910390fd5b80601b8190555050565b60606003805461101190615212565b80601f016020809104026020016040519081016040528092919081815260200182805461103d90615212565b801561108a5780601f1061105f5761010080835404028352916020019161108a565b820191906000526020600020905b81548152906001019060200180831161106d57829003601f168201915b5050505050905090565b600061109f82612e76565b6110d5576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061111b82611a5c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611183576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111a2612e6e565b73ffffffffffffffffffffffffffffffffffffffff16141580156111d457506111d2816111cd612e6e565b612c78565b155b1561120b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611216838383612ec4565b505050565b600b5481565b600260145414611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90614cfd565b60405180910390fd5b60195483611272611480565b61127c9190615029565b11156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614dfd565b60405180910390fd5b611308828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033612b9e565b611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90614dbd565b60405180910390fd5b6017548361135591906150b0565b341015611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e90614cdd565b60405180910390fd5b82601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e69190615029565b92505081905550601554601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890614e9d565b60405180910390fd5b61147b3384612f76565b505050565b600061148a612f94565b6002546001540303905090565b60186020528060005260406000206000915090505481565b60145481565b6114c0838383612f9d565b505050565b60175481565b6114d3612e6e565b73ffffffffffffffffffffffffffffffffffffffff166114f16120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90614ddd565b60405180910390fd5b80600b8190555050565b611559612e6e565b73ffffffffffffffffffffffffffffffffffffffff166115776120ac565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614ddd565b60405180910390fd5b8060158190555050565b6115df612e6e565b73ffffffffffffffffffffffffffffffffffffffff166115fd6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90614ddd565b60405180910390fd5b80601a8190555050565b60106020528060005260406000206000915090505481565b61167d612e6e565b73ffffffffffffffffffffffffffffffffffffffff1661169b6120ac565b73ffffffffffffffffffffffffffffffffffffffff16146116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890614ddd565b60405180910390fd5b8060118190555050565b611716838383604051806020016040528060008152506128ef565b505050565b611723612e6e565b73ffffffffffffffffffffffffffffffffffffffff166117416120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614ddd565b60405180910390fd5b80600d8190555050565b6000601454905090565b6001601454146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790614cfd565b60405180910390fd5b601954836117fc611480565b6118069190615029565b1115611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90614dfd565b60405180910390fd5b611892828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050336126f6565b6118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c890614dbd565b60405180910390fd5b82601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119209190615029565b92505081905550601a54601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290614e9d565b60405180910390fd5b6119b53384612f76565b505050565b600a5481565b6119c8612e6e565b73ffffffffffffffffffffffffffffffffffffffff166119e66120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390614ddd565b60405180910390fd5b8060129080519060200190611a52929190614006565b5050565b601a5481565b6000611a6782613453565b600001519050919050565b600d5481565b611a80612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611a9e6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614ddd565b60405180910390fd5b8060148190555050565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611bdc612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611bfa6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4790614ddd565b60405180910390fd5b611c5a60006136e2565b565b600f6020528060005260406000206000915090505481565b611c7c612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611c9a6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790614ddd565b60405180910390fd5b80600c8190555050565b60155481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590614d5d565b60405180910390fd5b600460145414611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90614d3d565b60405180910390fd5b6122b86001611dc0611480565b611dca9190615029565b1115611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290614d9d565b60405180910390fd5b6001611e1633611b04565b1015611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90614d7d565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ea79190615029565b92505081905550600c54601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2990614e9d565b60405180910390fd5b611f3d336001612f76565b565b611f47612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611f656120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614ddd565b60405180910390fd5b8060178190555050565b611fcd612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611feb6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614ddd565b60405180910390fd5b6122b88161204d611480565b6120579190615029565b1115612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90614d9d565b60405180910390fd5b6120a28282612f76565b5050565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b6120e361408c565b6120ec82613453565b9050919050565b6120fb612e6e565b73ffffffffffffffffffffffffffffffffffffffff166121196120ac565b73ffffffffffffffffffffffffffffffffffffffff161461216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216690614ddd565b60405180910390fd5b8060139080519060200190612185929190614006565b5050565b60606004805461219890615212565b80601f01602080910402602001604051908101604052809291908181526020018280546121c490615212565b80156122115780601f106121e657610100808354040283529160200191612211565b820191906000526020600020905b8154815290600101906020018083116121f457829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090614d5d565b60405180910390fd5b6003601454146122ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c590614d3d565b60405180910390fd5b6122b8816122da611480565b6122e49190615029565b1115612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90614d9d565b60405180910390fd5b600e5481612331611480565b61233b9190615029565b111561237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390614d1d565b60405180910390fd5b600a548111156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b890614e7d565b60405180910390fd5b806011546123cf91906150b0565b341015612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240890614e5d565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124609190615029565b92505081905550600b54600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290614e9d565b60405180910390fd5b6124f53382612f76565b50565b612500612e6e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612565576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000612572612e6e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661261f612e6e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126649190614c65565b60405180910390a35050565b612678612e6e565b73ffffffffffffffffffffffffffffffffffffffff166126966120ac565b73ffffffffffffffffffffffffffffffffffffffff16146126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e390614ddd565b60405180910390fd5b80600a8190555050565b600061272b83601b54846040516020016127109190614b5a565b604051602081830303815290604052805190602001206137a6565b905092915050565b60165481565b601c6020528060005260406000206000915090505481565b612759612e6e565b73ffffffffffffffffffffffffffffffffffffffff166127776120ac565b73ffffffffffffffffffffffffffffffffffffffff16146127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c490614ddd565b60405180910390fd5b60026009541415612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a90614ebd565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161284190614be9565b60006040518083038185875af1925050503d806000811461287e576040519150601f19603f3d011682016040523d82523d6000602084013e612883565b606091505b50509050806128c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128be90614e3d565b60405180910390fd5b506001600981905550565b6000601754826128e291906150b0565b9050919050565b601b5481565b6128fa848484612f9d565b6129198373ffffffffffffffffffffffffffffffffffffffff166137bd565b801561292e575061292c848484846137d0565b155b15612965576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b612973612e6e565b73ffffffffffffffffffffffffffffffffffffffff166129916120ac565b73ffffffffffffffffffffffffffffffffffffffff16146129e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129de90614ddd565b60405180910390fd5b8060168190555050565b60606129fc82612e76565b612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3290614e1d565b60405180910390fd5b600d548211612aa1576000612a4e613930565b90506000815111612a6e5760405180602001604052806000815250612a99565b80612a78846139c2565b604051602001612a89929190614b75565b6040516020818303038152906040525b915050612afb565b600060138054612ab090615212565b905011612acc5760405180602001604052806000815250612af8565b6013612ad7836139c2565b604051602001612ae8929190614baf565b6040516020818303038152906040525b90505b919050565b600c5481565b6000612b1182613b23565b9050919050565b612b20612e6e565b73ffffffffffffffffffffffffffffffffffffffff16612b3e6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b90614ddd565b60405180910390fd5b80600e8190555050565b6000612bd38360165484604051602001612bb89190614b5a565b604051602081830303815290604052805190602001206137a6565b905092915050565b600060115482612beb91906150b0565b9050919050565b612bfa612e6e565b73ffffffffffffffffffffffffffffffffffffffff16612c186120ac565b73ffffffffffffffffffffffffffffffffffffffff1614612c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6590614ddd565b60405180910390fd5b8060198190555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612d14612e6e565b73ffffffffffffffffffffffffffffffffffffffff16612d326120ac565b73ffffffffffffffffffffffffffffffffffffffff1614612d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7f90614ddd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612def90614cbd565b60405180910390fd5b612e01816136e2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612e81612f94565b11158015612e90575060015482105b8015612ebd575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612f90828260405180602001604052806000815250613b8d565b5050565b60006001905090565b6000612fa882613453565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613013576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16613034612e6e565b73ffffffffffffffffffffffffffffffffffffffff16148061306357506130628561305d612e6e565b612c78565b5b806130a85750613071612e6e565b73ffffffffffffffffffffffffffffffffffffffff1661309084611094565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806130e1576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613148576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131558585856001613b9f565b61316160008487612ec4565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156133e15760015482146133e057878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461344c8585856001613ba5565b5050505050565b61345b61408c565b600082905080613469612f94565b11158015613478575060015481105b156136ab576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516136a957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461358d5780925050506136dd565b5b6001156136a857818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146136a35780925050506136dd565b61358e565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000826137b38584613bab565b1490509392505050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137f6612e6e565b8786866040518563ffffffff1660e01b81526004016138189493929190614c19565b602060405180830381600087803b15801561383257600080fd5b505af192505050801561386357506040513d601f19601f8201168201806040525081019061386091906145b7565b60015b6138dd573d8060008114613893576040519150601f19603f3d011682016040523d82523d6000602084013e613898565b606091505b506000815114156138d5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606012805461393f90615212565b80601f016020809104026020016040519081016040528092919081815260200182805461396b90615212565b80156139b85780601f1061398d576101008083540402835291602001916139b8565b820191906000526020600020905b81548152906001019060200180831161399b57829003601f168201915b5050505050905090565b60606000821415613a0a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b1e565b600082905060005b60008214613a3c578080613a2590615275565b915050600a82613a35919061507f565b9150613a12565b60008167ffffffffffffffff811115613a5857613a576153cf565b5b6040519080825280601f01601f191660200182016040528015613a8a5781602001600182028036833780820191505090505b5090505b60008514613b1757600182613aa3919061510a565b9150600a85613ab291906152e2565b6030613abe9190615029565b60f81b818381518110613ad457613ad36153a0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613b10919061507f565b9450613a8e565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b613b9a8383836001613c20565b505050565b50505050565b50505050565b60008082905060005b8451811015613c15576000858281518110613bd257613bd16153a0565b5b60200260200101519050808311613bf457613bed8382613fef565b9250613c01565b613bfe8184613fef565b92505b508080613c0d90615275565b915050613bb4565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613c8e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613cc9576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cd66000868387613b9f565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613ea05750613e9f8773ffffffffffffffffffffffffffffffffffffffff166137bd565b5b15613f66575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613f1560008884806001019550886137d0565b613f4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613ea6578260015414613f6157600080fd5b613fd2565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613f67575b816001819055505050613fe86000868387613ba5565b5050505050565b600082600052816020526040600020905092915050565b82805461401290615212565b90600052602060002090601f016020900481019282614034576000855561407b565b82601f1061404d57805160ff191683800117855561407b565b8280016001018555821561407b579182015b8281111561407a57825182559160200191906001019061405f565b5b50905061408891906140cf565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156140e85760008160009055506001016140d0565b5090565b60006140ff6140fa84614f38565b614f13565b9050808382526020820190508285602086028201111561412257614121615408565b5b60005b858110156141525781614138888261428e565b845260208401935060208301925050600181019050614125565b5050509392505050565b600061416f61416a84614f64565b614f13565b90508281526020810184848401111561418b5761418a61540d565b5b6141968482856151d0565b509392505050565b60006141b16141ac84614f95565b614f13565b9050828152602081018484840111156141cd576141cc61540d565b5b6141d88482856151d0565b509392505050565b6000813590506141ef816157ba565b92915050565b60008083601f84011261420b5761420a615403565b5b8235905067ffffffffffffffff811115614228576142276153fe565b5b60208301915083602082028301111561424457614243615408565b5b9250929050565b600082601f8301126142605761425f615403565b5b81356142708482602086016140ec565b91505092915050565b600081359050614288816157d1565b92915050565b60008135905061429d816157e8565b92915050565b6000813590506142b2816157ff565b92915050565b6000815190506142c7816157ff565b92915050565b600082601f8301126142e2576142e1615403565b5b81356142f284826020860161415c565b91505092915050565b600082601f8301126143105761430f615403565b5b813561432084826020860161419e565b91505092915050565b60008135905061433881615816565b92915050565b60006020828403121561435457614353615417565b5b6000614362848285016141e0565b91505092915050565b6000806040838503121561438257614381615417565b5b6000614390858286016141e0565b92505060206143a1858286016141e0565b9150509250929050565b6000806000606084860312156143c4576143c3615417565b5b60006143d2868287016141e0565b93505060206143e3868287016141e0565b92505060406143f486828701614329565b9150509250925092565b6000806000806080858703121561441857614417615417565b5b6000614426878288016141e0565b9450506020614437878288016141e0565b935050604061444887828801614329565b925050606085013567ffffffffffffffff81111561446957614468615412565b5b614475878288016142cd565b91505092959194509250565b6000806040838503121561449857614497615417565b5b60006144a6858286016141e0565b92505060206144b785828601614279565b9150509250929050565b600080604083850312156144d8576144d7615417565b5b60006144e6858286016141e0565b92505060206144f785828601614329565b9150509250929050565b6000806040838503121561451857614517615417565b5b600083013567ffffffffffffffff81111561453657614535615412565b5b6145428582860161424b565b9250506020614553858286016141e0565b9150509250929050565b60006020828403121561457357614572615417565b5b60006145818482850161428e565b91505092915050565b6000602082840312156145a05761459f615417565b5b60006145ae848285016142a3565b91505092915050565b6000602082840312156145cd576145cc615417565b5b60006145db848285016142b8565b91505092915050565b6000602082840312156145fa576145f9615417565b5b600082013567ffffffffffffffff81111561461857614617615412565b5b614624848285016142fb565b91505092915050565b60006020828403121561464357614642615417565b5b600061465184828501614329565b91505092915050565b60008060006040848603121561467357614672615417565b5b600061468186828701614329565b935050602084013567ffffffffffffffff8111156146a2576146a1615412565b5b6146ae868287016141f5565b92509250509250925092565b6146c38161513e565b82525050565b6146d28161513e565b82525050565b6146e96146e48261513e565b6152be565b82525050565b6146f881615150565b82525050565b61470781615150565b82525050565b6147168161515c565b82525050565b600061472782614fdb565b6147318185614ff1565b93506147418185602086016151df565b61474a8161541c565b840191505092915050565b600061476082614fe6565b61476a818561500d565b935061477a8185602086016151df565b6147838161541c565b840191505092915050565b600061479982614fe6565b6147a3818561501e565b93506147b38185602086016151df565b80840191505092915050565b600081546147cc81615212565b6147d6818661501e565b945060018216600081146147f1576001811461480257614835565b60ff19831686528186019350614835565b61480b85614fc6565b60005b8381101561482d5781548189015260018201915060208101905061480e565b838801955050505b50505092915050565b600061484b60268361500d565b91506148568261543a565b604082019050919050565b600061486e60148361500d565b915061487982615489565b602082019050919050565b600061489160138361500d565b915061489c826154b2565b602082019050919050565b60006148b460188361500d565b91506148bf826154db565b602082019050919050565b60006148d760128361500d565b91506148e282615504565b602082019050919050565b60006148fa601e8361500d565b91506149058261552d565b602082019050919050565b600061491d60148361500d565b915061492882615556565b602082019050919050565b600061494060128361500d565b915061494b8261557f565b602082019050919050565b600061496360168361500d565b915061496e826155a8565b602082019050919050565b600061498660058361501e565b9150614991826155d1565b600582019050919050565b60006149a960208361500d565b91506149b4826155fa565b602082019050919050565b60006149cc60268361500d565b91506149d782615623565b604082019050919050565b60006149ef602f8361500d565b91506149fa82615672565b604082019050919050565b6000614a12600083615002565b9150614a1d826156c1565b600082019050919050565b6000614a3560108361500d565b9150614a40826156c4565b602082019050919050565b6000614a5860168361500d565b9150614a63826156ed565b602082019050919050565b6000614a7b60168361500d565b9150614a8682615716565b602082019050919050565b6000614a9e601c8361500d565b9150614aa98261573f565b602082019050919050565b6000614ac1601f8361500d565b9150614acc82615768565b602082019050919050565b6000614ae460018361501e565b9150614aef82615791565b600182019050919050565b606082016000820151614b1060008501826146ba565b506020820151614b236020850182614b4b565b506040820151614b3660408501826146ef565b50505050565b614b45816151b2565b82525050565b614b54816151bc565b82525050565b6000614b6682846146d8565b60148201915081905092915050565b6000614b81828561478e565b9150614b8c82614ad7565b9150614b98828461478e565b9150614ba382614979565b91508190509392505050565b6000614bbb82856147bf565b9150614bc682614ad7565b9150614bd2828461478e565b9150614bdd82614979565b91508190509392505050565b6000614bf482614a05565b9150819050919050565b6000602082019050614c1360008301846146c9565b92915050565b6000608082019050614c2e60008301876146c9565b614c3b60208301866146c9565b614c486040830185614b3c565b8181036060830152614c5a818461471c565b905095945050505050565b6000602082019050614c7a60008301846146fe565b92915050565b6000602082019050614c95600083018461470d565b92915050565b60006020820190508181036000830152614cb58184614755565b905092915050565b60006020820190508181036000830152614cd68161483e565b9050919050565b60006020820190508181036000830152614cf681614861565b9050919050565b60006020820190508181036000830152614d1681614884565b9050919050565b60006020820190508181036000830152614d36816148a7565b9050919050565b60006020820190508181036000830152614d56816148ca565b9050919050565b60006020820190508181036000830152614d76816148ed565b9050919050565b60006020820190508181036000830152614d9681614910565b9050919050565b60006020820190508181036000830152614db681614933565b9050919050565b60006020820190508181036000830152614dd681614956565b9050919050565b60006020820190508181036000830152614df68161499c565b9050919050565b60006020820190508181036000830152614e16816149bf565b9050919050565b60006020820190508181036000830152614e36816149e2565b9050919050565b60006020820190508181036000830152614e5681614a28565b9050919050565b60006020820190508181036000830152614e7681614a4b565b9050919050565b60006020820190508181036000830152614e9681614a6e565b9050919050565b60006020820190508181036000830152614eb681614a91565b9050919050565b60006020820190508181036000830152614ed681614ab4565b9050919050565b6000606082019050614ef26000830184614afa565b92915050565b6000602082019050614f0d6000830184614b3c565b92915050565b6000614f1d614f2e565b9050614f298282615244565b919050565b6000604051905090565b600067ffffffffffffffff821115614f5357614f526153cf565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f7f57614f7e6153cf565b5b614f888261541c565b9050602081019050919050565b600067ffffffffffffffff821115614fb057614faf6153cf565b5b614fb98261541c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615034826151b2565b915061503f836151b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561507457615073615313565b5b828201905092915050565b600061508a826151b2565b9150615095836151b2565b9250826150a5576150a4615342565b5b828204905092915050565b60006150bb826151b2565b91506150c6836151b2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150ff576150fe615313565b5b828202905092915050565b6000615115826151b2565b9150615120836151b2565b92508282101561513357615132615313565b5b828203905092915050565b600061514982615192565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156151fd5780820151818401526020810190506151e2565b8381111561520c576000848401525b50505050565b6000600282049050600182168061522a57607f821691505b6020821081141561523e5761523d615371565b5b50919050565b61524d8261541c565b810181811067ffffffffffffffff8211171561526c5761526b6153cf565b5b80604052505050565b6000615280826151b2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152b3576152b2615313565b5b600182019050919050565b60006152c9826152d0565b9050919050565b60006152db8261542d565b9050919050565b60006152ed826151b2565b91506152f8836151b2565b92508261530857615307615342565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f54727920746f2073656e64206d6f726520455448000000000000000000000000600082015250565b7f53616c65206973206e6f74206163746976652000000000000000000000000000600082015250565b7f72656163686564207068617365206d617820737570706c790000000000000000600082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f596f7520617265206e6f74206120486f6c646572000000000000000000000000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f596f7520617265206e6f7420696e2070726573616c6500000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6157c38161513e565b81146157ce57600080fd5b50565b6157da81615150565b81146157e557600080fd5b50565b6157f18161515c565b81146157fc57600080fd5b50565b61580881615166565b811461581357600080fd5b50565b61581f816151b2565b811461582a57600080fd5b5056fea2646970667358221220527f95e44336a988b62c77c83cb59f1f32ba54b7a8483bf308e7873ac766338e64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106103ad5760003560e01c80637ab0f550116101e7578063aa98e0c61161010d578063cece3fea116100a0578063e75722301161006f578063e757223014610dce578063e8006bb014610e0b578063e985e9c514610e34578063f2fde38b14610e71576103ad565b8063cece3fea14610d00578063dc33e68114610d2b578063e4f9a94914610d68578063e5ec56a014610d91576103ad565b8063b569c7b4116100dc578063b569c7b414610c46578063b88d4fde14610c71578063bd32fb6614610c9a578063c87b56dd14610cc3576103ad565b8063aa98e0c614610b8a578063aaff45c514610bb5578063ac44600214610bf2578063aebceff414610c09576103ad565b8063915a647f11610185578063a0712d6811610154578063a0712d6814610adf578063a22cb46514610afb578063a40ece7a14610b24578063aa91a97014610b4d576103ad565b8063915a647f14610a235780639231ab2a14610a4e578063930fa27b14610a8b57806395d89b4114610ab4576103ad565b80638825b014116101c15780638825b0141461097b5780638ba4cc3c146109a45780638d859f3e146109cd5780638da5cb5b146109f8576103ad565b80637ab0f5501461091d5780637cdd702e1461094657806382449f3314610971576103ad565b806334f90318116102d7578063598a32f91161026a5780636c32f9f7116102395780636c32f9f71461086157806370a082311461088c578063715018a6146108c957806375236143146108e0576103ad565b8063598a32f9146107a55780636352211e146107d057806364662f681461080d57806369ba1a7514610838576103ad565b80634e69d560116102a65780634e69d5601461070a5780635151c0511461073557806351d7ff931461075157806355f804b31461077c576103ad565b806334f90318146106525780633fd173661461068f57806342842e0e146106b857806345ab07ee146106e1576103ad565b806318160ddd1161034f5780632632d5f81161031e5780632632d5f8146105ac5780632ba2865b146105d75780632ea7c5d9146106005780632f9c7f0114610629576103ad565b806318160ddd146104f05780631984b2861461051b578063200d2ed21461055857806323b872dd14610583576103ad565b8063081812fc1161038b578063081812fc14610443578063095ea7b3146104805780630f2cdd6c146104a957806310157fc3146104d4576103ad565b806301ffc9a7146103b2578063031eba26146103ef57806306fdde0314610418575b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d4919061458a565b610e9a565b6040516103e69190614c65565b60405180910390f35b3480156103fb57600080fd5b506104166004803603810190610411919061455d565b610f7c565b005b34801561042457600080fd5b5061042d611002565b60405161043a9190614c9b565b60405180910390f35b34801561044f57600080fd5b5061046a6004803603810190610465919061462d565b611094565b6040516104779190614bfe565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a291906144c1565b611110565b005b3480156104b557600080fd5b506104be61121b565b6040516104cb9190614ef8565b60405180910390f35b6104ee60048036038101906104e9919061465a565b611221565b005b3480156104fc57600080fd5b50610505611480565b6040516105129190614ef8565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d919061433e565b611497565b60405161054f9190614ef8565b60405180910390f35b34801561056457600080fd5b5061056d6114af565b60405161057a9190614ef8565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906143ab565b6114b5565b005b3480156105b857600080fd5b506105c16114c5565b6040516105ce9190614ef8565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f9919061462d565b6114cb565b005b34801561060c57600080fd5b506106276004803603810190610622919061462d565b611551565b005b34801561063557600080fd5b50610650600480360381019061064b919061462d565b6115d7565b005b34801561065e57600080fd5b506106796004803603810190610674919061433e565b61165d565b6040516106869190614ef8565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b1919061462d565b611675565b005b3480156106c457600080fd5b506106df60048036038101906106da91906143ab565b6116fb565b005b3480156106ed57600080fd5b506107086004803603810190610703919061462d565b61171b565b005b34801561071657600080fd5b5061071f6117a1565b60405161072c9190614ef8565b60405180910390f35b61074f600480360381019061074a919061465a565b6117ab565b005b34801561075d57600080fd5b506107666119ba565b6040516107739190614ef8565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e91906145e4565b6119c0565b005b3480156107b157600080fd5b506107ba611a56565b6040516107c79190614ef8565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f2919061462d565b611a5c565b6040516108049190614bfe565b60405180910390f35b34801561081957600080fd5b50610822611a72565b60405161082f9190614ef8565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a919061462d565b611a78565b005b34801561086d57600080fd5b50610876611afe565b6040516108839190614ef8565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae919061433e565b611b04565b6040516108c09190614ef8565b60405180910390f35b3480156108d557600080fd5b506108de611bd4565b005b3480156108ec57600080fd5b506109076004803603810190610902919061433e565b611c5c565b6040516109149190614ef8565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f919061462d565b611c74565b005b34801561095257600080fd5b5061095b611cfa565b6040516109689190614ef8565b60405180910390f35b610979611d00565b005b34801561098757600080fd5b506109a2600480360381019061099d919061462d565b611f3f565b005b3480156109b057600080fd5b506109cb60048036038101906109c691906144c1565b611fc5565b005b3480156109d957600080fd5b506109e26120a6565b6040516109ef9190614ef8565b60405180910390f35b348015610a0457600080fd5b50610a0d6120ac565b604051610a1a9190614bfe565b60405180910390f35b348015610a2f57600080fd5b50610a386120d5565b604051610a459190614ef8565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a70919061462d565b6120db565b604051610a829190614edd565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad91906145e4565b6120f3565b005b348015610ac057600080fd5b50610ac9612189565b604051610ad69190614c9b565b60405180910390f35b610af96004803603810190610af4919061462d565b61221b565b005b348015610b0757600080fd5b50610b226004803603810190610b1d9190614481565b6124f8565b005b348015610b3057600080fd5b50610b4b6004803603810190610b46919061462d565b612670565b005b348015610b5957600080fd5b50610b746004803603810190610b6f9190614501565b6126f6565b604051610b819190614c65565b60405180910390f35b348015610b9657600080fd5b50610b9f612733565b604051610bac9190614c80565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd7919061433e565b612739565b604051610be99190614ef8565b60405180910390f35b348015610bfe57600080fd5b50610c07612751565b005b348015610c1557600080fd5b50610c306004803603810190610c2b919061462d565b6128d2565b604051610c3d9190614ef8565b60405180910390f35b348015610c5257600080fd5b50610c5b6128e9565b604051610c689190614c80565b60405180910390f35b348015610c7d57600080fd5b50610c986004803603810190610c9391906143fe565b6128ef565b005b348015610ca657600080fd5b50610cc16004803603810190610cbc919061455d565b61296b565b005b348015610ccf57600080fd5b50610cea6004803603810190610ce5919061462d565b6129f1565b604051610cf79190614c9b565b60405180910390f35b348015610d0c57600080fd5b50610d15612b00565b604051610d229190614ef8565b60405180910390f35b348015610d3757600080fd5b50610d526004803603810190610d4d919061433e565b612b06565b604051610d5f9190614ef8565b60405180910390f35b348015610d7457600080fd5b50610d8f6004803603810190610d8a919061462d565b612b18565b005b348015610d9d57600080fd5b50610db86004803603810190610db39190614501565b612b9e565b604051610dc59190614c65565b60405180910390f35b348015610dda57600080fd5b50610df56004803603810190610df0919061462d565b612bdb565b604051610e029190614ef8565b60405180910390f35b348015610e1757600080fd5b50610e326004803603810190610e2d919061462d565b612bf2565b005b348015610e4057600080fd5b50610e5b6004803603810190610e56919061436b565b612c78565b604051610e689190614c65565b60405180910390f35b348015610e7d57600080fd5b50610e986004803603810190610e93919061433e565b612d0c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f755750610f7482612e04565b5b9050919050565b610f84612e6e565b73ffffffffffffffffffffffffffffffffffffffff16610fa26120ac565b73ffffffffffffffffffffffffffffffffffffffff1614610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90614ddd565b60405180910390fd5b80601b8190555050565b60606003805461101190615212565b80601f016020809104026020016040519081016040528092919081815260200182805461103d90615212565b801561108a5780601f1061105f5761010080835404028352916020019161108a565b820191906000526020600020905b81548152906001019060200180831161106d57829003601f168201915b5050505050905090565b600061109f82612e76565b6110d5576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061111b82611a5c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611183576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111a2612e6e565b73ffffffffffffffffffffffffffffffffffffffff16141580156111d457506111d2816111cd612e6e565b612c78565b155b1561120b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611216838383612ec4565b505050565b600b5481565b600260145414611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90614cfd565b60405180910390fd5b60195483611272611480565b61127c9190615029565b11156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614dfd565b60405180910390fd5b611308828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033612b9e565b611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90614dbd565b60405180910390fd5b6017548361135591906150b0565b341015611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e90614cdd565b60405180910390fd5b82601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e69190615029565b92505081905550601554601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890614e9d565b60405180910390fd5b61147b3384612f76565b505050565b600061148a612f94565b6002546001540303905090565b60186020528060005260406000206000915090505481565b60145481565b6114c0838383612f9d565b505050565b60175481565b6114d3612e6e565b73ffffffffffffffffffffffffffffffffffffffff166114f16120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90614ddd565b60405180910390fd5b80600b8190555050565b611559612e6e565b73ffffffffffffffffffffffffffffffffffffffff166115776120ac565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614ddd565b60405180910390fd5b8060158190555050565b6115df612e6e565b73ffffffffffffffffffffffffffffffffffffffff166115fd6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90614ddd565b60405180910390fd5b80601a8190555050565b60106020528060005260406000206000915090505481565b61167d612e6e565b73ffffffffffffffffffffffffffffffffffffffff1661169b6120ac565b73ffffffffffffffffffffffffffffffffffffffff16146116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890614ddd565b60405180910390fd5b8060118190555050565b611716838383604051806020016040528060008152506128ef565b505050565b611723612e6e565b73ffffffffffffffffffffffffffffffffffffffff166117416120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614ddd565b60405180910390fd5b80600d8190555050565b6000601454905090565b6001601454146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790614cfd565b60405180910390fd5b601954836117fc611480565b6118069190615029565b1115611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90614dfd565b60405180910390fd5b611892828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050336126f6565b6118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c890614dbd565b60405180910390fd5b82601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119209190615029565b92505081905550601a54601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290614e9d565b60405180910390fd5b6119b53384612f76565b505050565b600a5481565b6119c8612e6e565b73ffffffffffffffffffffffffffffffffffffffff166119e66120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390614ddd565b60405180910390fd5b8060129080519060200190611a52929190614006565b5050565b601a5481565b6000611a6782613453565b600001519050919050565b600d5481565b611a80612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611a9e6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614ddd565b60405180910390fd5b8060148190555050565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611bdc612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611bfa6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4790614ddd565b60405180910390fd5b611c5a60006136e2565b565b600f6020528060005260406000206000915090505481565b611c7c612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611c9a6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790614ddd565b60405180910390fd5b80600c8190555050565b60155481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590614d5d565b60405180910390fd5b600460145414611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90614d3d565b60405180910390fd5b6122b86001611dc0611480565b611dca9190615029565b1115611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290614d9d565b60405180910390fd5b6001611e1633611b04565b1015611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90614d7d565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ea79190615029565b92505081905550600c54601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2990614e9d565b60405180910390fd5b611f3d336001612f76565b565b611f47612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611f656120ac565b73ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614ddd565b60405180910390fd5b8060178190555050565b611fcd612e6e565b73ffffffffffffffffffffffffffffffffffffffff16611feb6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614ddd565b60405180910390fd5b6122b88161204d611480565b6120579190615029565b1115612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90614d9d565b60405180910390fd5b6120a28282612f76565b5050565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b6120e361408c565b6120ec82613453565b9050919050565b6120fb612e6e565b73ffffffffffffffffffffffffffffffffffffffff166121196120ac565b73ffffffffffffffffffffffffffffffffffffffff161461216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216690614ddd565b60405180910390fd5b8060139080519060200190612185929190614006565b5050565b60606004805461219890615212565b80601f01602080910402602001604051908101604052809291908181526020018280546121c490615212565b80156122115780601f106121e657610100808354040283529160200191612211565b820191906000526020600020905b8154815290600101906020018083116121f457829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090614d5d565b60405180910390fd5b6003601454146122ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c590614d3d565b60405180910390fd5b6122b8816122da611480565b6122e49190615029565b1115612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90614d9d565b60405180910390fd5b600e5481612331611480565b61233b9190615029565b111561237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390614d1d565b60405180910390fd5b600a548111156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b890614e7d565b60405180910390fd5b806011546123cf91906150b0565b341015612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240890614e5d565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124609190615029565b92505081905550600b54600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290614e9d565b60405180910390fd5b6124f53382612f76565b50565b612500612e6e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612565576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000612572612e6e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661261f612e6e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126649190614c65565b60405180910390a35050565b612678612e6e565b73ffffffffffffffffffffffffffffffffffffffff166126966120ac565b73ffffffffffffffffffffffffffffffffffffffff16146126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e390614ddd565b60405180910390fd5b80600a8190555050565b600061272b83601b54846040516020016127109190614b5a565b604051602081830303815290604052805190602001206137a6565b905092915050565b60165481565b601c6020528060005260406000206000915090505481565b612759612e6e565b73ffffffffffffffffffffffffffffffffffffffff166127776120ac565b73ffffffffffffffffffffffffffffffffffffffff16146127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c490614ddd565b60405180910390fd5b60026009541415612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a90614ebd565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161284190614be9565b60006040518083038185875af1925050503d806000811461287e576040519150601f19603f3d011682016040523d82523d6000602084013e612883565b606091505b50509050806128c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128be90614e3d565b60405180910390fd5b506001600981905550565b6000601754826128e291906150b0565b9050919050565b601b5481565b6128fa848484612f9d565b6129198373ffffffffffffffffffffffffffffffffffffffff166137bd565b801561292e575061292c848484846137d0565b155b15612965576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b612973612e6e565b73ffffffffffffffffffffffffffffffffffffffff166129916120ac565b73ffffffffffffffffffffffffffffffffffffffff16146129e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129de90614ddd565b60405180910390fd5b8060168190555050565b60606129fc82612e76565b612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3290614e1d565b60405180910390fd5b600d548211612aa1576000612a4e613930565b90506000815111612a6e5760405180602001604052806000815250612a99565b80612a78846139c2565b604051602001612a89929190614b75565b6040516020818303038152906040525b915050612afb565b600060138054612ab090615212565b905011612acc5760405180602001604052806000815250612af8565b6013612ad7836139c2565b604051602001612ae8929190614baf565b6040516020818303038152906040525b90505b919050565b600c5481565b6000612b1182613b23565b9050919050565b612b20612e6e565b73ffffffffffffffffffffffffffffffffffffffff16612b3e6120ac565b73ffffffffffffffffffffffffffffffffffffffff1614612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b90614ddd565b60405180910390fd5b80600e8190555050565b6000612bd38360165484604051602001612bb89190614b5a565b604051602081830303815290604052805190602001206137a6565b905092915050565b600060115482612beb91906150b0565b9050919050565b612bfa612e6e565b73ffffffffffffffffffffffffffffffffffffffff16612c186120ac565b73ffffffffffffffffffffffffffffffffffffffff1614612c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6590614ddd565b60405180910390fd5b8060198190555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612d14612e6e565b73ffffffffffffffffffffffffffffffffffffffff16612d326120ac565b73ffffffffffffffffffffffffffffffffffffffff1614612d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7f90614ddd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612def90614cbd565b60405180910390fd5b612e01816136e2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612e81612f94565b11158015612e90575060015482105b8015612ebd575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612f90828260405180602001604052806000815250613b8d565b5050565b60006001905090565b6000612fa882613453565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613013576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16613034612e6e565b73ffffffffffffffffffffffffffffffffffffffff16148061306357506130628561305d612e6e565b612c78565b5b806130a85750613071612e6e565b73ffffffffffffffffffffffffffffffffffffffff1661309084611094565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806130e1576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613148576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131558585856001613b9f565b61316160008487612ec4565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156133e15760015482146133e057878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461344c8585856001613ba5565b5050505050565b61345b61408c565b600082905080613469612f94565b11158015613478575060015481105b156136ab576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516136a957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461358d5780925050506136dd565b5b6001156136a857818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146136a35780925050506136dd565b61358e565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000826137b38584613bab565b1490509392505050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137f6612e6e565b8786866040518563ffffffff1660e01b81526004016138189493929190614c19565b602060405180830381600087803b15801561383257600080fd5b505af192505050801561386357506040513d601f19601f8201168201806040525081019061386091906145b7565b60015b6138dd573d8060008114613893576040519150601f19603f3d011682016040523d82523d6000602084013e613898565b606091505b506000815114156138d5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606012805461393f90615212565b80601f016020809104026020016040519081016040528092919081815260200182805461396b90615212565b80156139b85780601f1061398d576101008083540402835291602001916139b8565b820191906000526020600020905b81548152906001019060200180831161399b57829003601f168201915b5050505050905090565b60606000821415613a0a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b1e565b600082905060005b60008214613a3c578080613a2590615275565b915050600a82613a35919061507f565b9150613a12565b60008167ffffffffffffffff811115613a5857613a576153cf565b5b6040519080825280601f01601f191660200182016040528015613a8a5781602001600182028036833780820191505090505b5090505b60008514613b1757600182613aa3919061510a565b9150600a85613ab291906152e2565b6030613abe9190615029565b60f81b818381518110613ad457613ad36153a0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613b10919061507f565b9450613a8e565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b613b9a8383836001613c20565b505050565b50505050565b50505050565b60008082905060005b8451811015613c15576000858281518110613bd257613bd16153a0565b5b60200260200101519050808311613bf457613bed8382613fef565b9250613c01565b613bfe8184613fef565b92505b508080613c0d90615275565b915050613bb4565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613c8e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613cc9576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cd66000868387613b9f565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613ea05750613e9f8773ffffffffffffffffffffffffffffffffffffffff166137bd565b5b15613f66575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613f1560008884806001019550886137d0565b613f4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613ea6578260015414613f6157600080fd5b613fd2565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613f67575b816001819055505050613fe86000868387613ba5565b5050505050565b600082600052816020526040600020905092915050565b82805461401290615212565b90600052602060002090601f016020900481019282614034576000855561407b565b82601f1061404d57805160ff191683800117855561407b565b8280016001018555821561407b579182015b8281111561407a57825182559160200191906001019061405f565b5b50905061408891906140cf565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156140e85760008160009055506001016140d0565b5090565b60006140ff6140fa84614f38565b614f13565b9050808382526020820190508285602086028201111561412257614121615408565b5b60005b858110156141525781614138888261428e565b845260208401935060208301925050600181019050614125565b5050509392505050565b600061416f61416a84614f64565b614f13565b90508281526020810184848401111561418b5761418a61540d565b5b6141968482856151d0565b509392505050565b60006141b16141ac84614f95565b614f13565b9050828152602081018484840111156141cd576141cc61540d565b5b6141d88482856151d0565b509392505050565b6000813590506141ef816157ba565b92915050565b60008083601f84011261420b5761420a615403565b5b8235905067ffffffffffffffff811115614228576142276153fe565b5b60208301915083602082028301111561424457614243615408565b5b9250929050565b600082601f8301126142605761425f615403565b5b81356142708482602086016140ec565b91505092915050565b600081359050614288816157d1565b92915050565b60008135905061429d816157e8565b92915050565b6000813590506142b2816157ff565b92915050565b6000815190506142c7816157ff565b92915050565b600082601f8301126142e2576142e1615403565b5b81356142f284826020860161415c565b91505092915050565b600082601f8301126143105761430f615403565b5b813561432084826020860161419e565b91505092915050565b60008135905061433881615816565b92915050565b60006020828403121561435457614353615417565b5b6000614362848285016141e0565b91505092915050565b6000806040838503121561438257614381615417565b5b6000614390858286016141e0565b92505060206143a1858286016141e0565b9150509250929050565b6000806000606084860312156143c4576143c3615417565b5b60006143d2868287016141e0565b93505060206143e3868287016141e0565b92505060406143f486828701614329565b9150509250925092565b6000806000806080858703121561441857614417615417565b5b6000614426878288016141e0565b9450506020614437878288016141e0565b935050604061444887828801614329565b925050606085013567ffffffffffffffff81111561446957614468615412565b5b614475878288016142cd565b91505092959194509250565b6000806040838503121561449857614497615417565b5b60006144a6858286016141e0565b92505060206144b785828601614279565b9150509250929050565b600080604083850312156144d8576144d7615417565b5b60006144e6858286016141e0565b92505060206144f785828601614329565b9150509250929050565b6000806040838503121561451857614517615417565b5b600083013567ffffffffffffffff81111561453657614535615412565b5b6145428582860161424b565b9250506020614553858286016141e0565b9150509250929050565b60006020828403121561457357614572615417565b5b60006145818482850161428e565b91505092915050565b6000602082840312156145a05761459f615417565b5b60006145ae848285016142a3565b91505092915050565b6000602082840312156145cd576145cc615417565b5b60006145db848285016142b8565b91505092915050565b6000602082840312156145fa576145f9615417565b5b600082013567ffffffffffffffff81111561461857614617615412565b5b614624848285016142fb565b91505092915050565b60006020828403121561464357614642615417565b5b600061465184828501614329565b91505092915050565b60008060006040848603121561467357614672615417565b5b600061468186828701614329565b935050602084013567ffffffffffffffff8111156146a2576146a1615412565b5b6146ae868287016141f5565b92509250509250925092565b6146c38161513e565b82525050565b6146d28161513e565b82525050565b6146e96146e48261513e565b6152be565b82525050565b6146f881615150565b82525050565b61470781615150565b82525050565b6147168161515c565b82525050565b600061472782614fdb565b6147318185614ff1565b93506147418185602086016151df565b61474a8161541c565b840191505092915050565b600061476082614fe6565b61476a818561500d565b935061477a8185602086016151df565b6147838161541c565b840191505092915050565b600061479982614fe6565b6147a3818561501e565b93506147b38185602086016151df565b80840191505092915050565b600081546147cc81615212565b6147d6818661501e565b945060018216600081146147f1576001811461480257614835565b60ff19831686528186019350614835565b61480b85614fc6565b60005b8381101561482d5781548189015260018201915060208101905061480e565b838801955050505b50505092915050565b600061484b60268361500d565b91506148568261543a565b604082019050919050565b600061486e60148361500d565b915061487982615489565b602082019050919050565b600061489160138361500d565b915061489c826154b2565b602082019050919050565b60006148b460188361500d565b91506148bf826154db565b602082019050919050565b60006148d760128361500d565b91506148e282615504565b602082019050919050565b60006148fa601e8361500d565b91506149058261552d565b602082019050919050565b600061491d60148361500d565b915061492882615556565b602082019050919050565b600061494060128361500d565b915061494b8261557f565b602082019050919050565b600061496360168361500d565b915061496e826155a8565b602082019050919050565b600061498660058361501e565b9150614991826155d1565b600582019050919050565b60006149a960208361500d565b91506149b4826155fa565b602082019050919050565b60006149cc60268361500d565b91506149d782615623565b604082019050919050565b60006149ef602f8361500d565b91506149fa82615672565b604082019050919050565b6000614a12600083615002565b9150614a1d826156c1565b600082019050919050565b6000614a3560108361500d565b9150614a40826156c4565b602082019050919050565b6000614a5860168361500d565b9150614a63826156ed565b602082019050919050565b6000614a7b60168361500d565b9150614a8682615716565b602082019050919050565b6000614a9e601c8361500d565b9150614aa98261573f565b602082019050919050565b6000614ac1601f8361500d565b9150614acc82615768565b602082019050919050565b6000614ae460018361501e565b9150614aef82615791565b600182019050919050565b606082016000820151614b1060008501826146ba565b506020820151614b236020850182614b4b565b506040820151614b3660408501826146ef565b50505050565b614b45816151b2565b82525050565b614b54816151bc565b82525050565b6000614b6682846146d8565b60148201915081905092915050565b6000614b81828561478e565b9150614b8c82614ad7565b9150614b98828461478e565b9150614ba382614979565b91508190509392505050565b6000614bbb82856147bf565b9150614bc682614ad7565b9150614bd2828461478e565b9150614bdd82614979565b91508190509392505050565b6000614bf482614a05565b9150819050919050565b6000602082019050614c1360008301846146c9565b92915050565b6000608082019050614c2e60008301876146c9565b614c3b60208301866146c9565b614c486040830185614b3c565b8181036060830152614c5a818461471c565b905095945050505050565b6000602082019050614c7a60008301846146fe565b92915050565b6000602082019050614c95600083018461470d565b92915050565b60006020820190508181036000830152614cb58184614755565b905092915050565b60006020820190508181036000830152614cd68161483e565b9050919050565b60006020820190508181036000830152614cf681614861565b9050919050565b60006020820190508181036000830152614d1681614884565b9050919050565b60006020820190508181036000830152614d36816148a7565b9050919050565b60006020820190508181036000830152614d56816148ca565b9050919050565b60006020820190508181036000830152614d76816148ed565b9050919050565b60006020820190508181036000830152614d9681614910565b9050919050565b60006020820190508181036000830152614db681614933565b9050919050565b60006020820190508181036000830152614dd681614956565b9050919050565b60006020820190508181036000830152614df68161499c565b9050919050565b60006020820190508181036000830152614e16816149bf565b9050919050565b60006020820190508181036000830152614e36816149e2565b9050919050565b60006020820190508181036000830152614e5681614a28565b9050919050565b60006020820190508181036000830152614e7681614a4b565b9050919050565b60006020820190508181036000830152614e9681614a6e565b9050919050565b60006020820190508181036000830152614eb681614a91565b9050919050565b60006020820190508181036000830152614ed681614ab4565b9050919050565b6000606082019050614ef26000830184614afa565b92915050565b6000602082019050614f0d6000830184614b3c565b92915050565b6000614f1d614f2e565b9050614f298282615244565b919050565b6000604051905090565b600067ffffffffffffffff821115614f5357614f526153cf565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f7f57614f7e6153cf565b5b614f888261541c565b9050602081019050919050565b600067ffffffffffffffff821115614fb057614faf6153cf565b5b614fb98261541c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615034826151b2565b915061503f836151b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561507457615073615313565b5b828201905092915050565b600061508a826151b2565b9150615095836151b2565b9250826150a5576150a4615342565b5b828204905092915050565b60006150bb826151b2565b91506150c6836151b2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150ff576150fe615313565b5b828202905092915050565b6000615115826151b2565b9150615120836151b2565b92508282101561513357615132615313565b5b828203905092915050565b600061514982615192565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156151fd5780820151818401526020810190506151e2565b8381111561520c576000848401525b50505050565b6000600282049050600182168061522a57607f821691505b6020821081141561523e5761523d615371565b5b50919050565b61524d8261541c565b810181811067ffffffffffffffff8211171561526c5761526b6153cf565b5b80604052505050565b6000615280826151b2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152b3576152b2615313565b5b600182019050919050565b60006152c9826152d0565b9050919050565b60006152db8261542d565b9050919050565b60006152ed826151b2565b91506152f8836151b2565b92508261530857615307615342565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f54727920746f2073656e64206d6f726520455448000000000000000000000000600082015250565b7f53616c65206973206e6f74206163746976652000000000000000000000000000600082015250565b7f72656163686564207068617365206d617820737570706c790000000000000000600082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f596f7520617265206e6f74206120486f6c646572000000000000000000000000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f596f7520617265206e6f7420696e2070726573616c6500000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6157c38161513e565b81146157ce57600080fd5b50565b6157da81615150565b81146157e557600080fd5b50565b6157f18161515c565b81146157fc57600080fd5b50565b61580881615166565b811461581357600080fd5b50565b61581f816151b2565b811461582a57600080fd5b5056fea2646970667358221220527f95e44336a988b62c77c83cb59f1f32ba54b7a8483bf308e7873ac766338e64736f6c63430008070033
Deployed Bytecode Sourcemap
32885:7933:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15140:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39736:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18253:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19756:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19319:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33075:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38470:625;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14389:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37826:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33772:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20621:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37773:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36605:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39110:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40677:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33436:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36500:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20862:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36935:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37246:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40109:559;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32983:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35716:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39577:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18061:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33253:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37167:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33292:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15509:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5171:103;;;;;;;;;;;;;:::i;:::-;;33381:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36819:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37690:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34665:442;;;:::i;:::-;;39388:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37452:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33659:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4948:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37886:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36159:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35820:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18422:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34030:627;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20032:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36707:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39894:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37732:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39668:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36313:181;;;;;;;;;;;;;:::i;:::-;;38111:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39623:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21118:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37961:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35114:596;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33157:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36048:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37035:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38261:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37329:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39249:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20390:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5283:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15140:305;15242:4;15294:25;15279:40;;;:11;:40;;;;:105;;;;15351:33;15336:48;;;:11;:48;;;;15279:105;:158;;;;15401:36;15425:11;15401:23;:36::i;:::-;15279:158;15259:178;;15140:305;;;:::o;39736:150::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39858:20:::1;39832:23;:46;;;;39736:150:::0;:::o;18253:100::-;18307:13;18340:5;18333:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18253:100;:::o;19756:204::-;19824:7;19849:16;19857:7;19849;:16::i;:::-;19844:64;;19874:34;;;;;;;;;;;;;;19844:64;19928:15;:24;19944:7;19928:24;;;;;;;;;;;;;;;;;;;;;19921:31;;19756:204;;;:::o;19319:371::-;19392:13;19408:24;19424:7;19408:15;:24::i;:::-;19392:40;;19453:5;19447:11;;:2;:11;;;19443:48;;;19467:24;;;;;;;;;;;;;;19443:48;19524:5;19508:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;19534:37;19551:5;19558:12;:10;:12::i;:::-;19534:16;:37::i;:::-;19533:38;19508:63;19504:138;;;19595:35;;;;;;;;;;;;;;19504:138;19654:28;19663:2;19667:7;19676:5;19654:8;:28::i;:::-;19381:309;19319:371;;:::o;33075:33::-;;;;:::o;38470:625::-;38594:1;38584:6;;:11;38576:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;38663:16;;38653:8;38639:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:40;;38631:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;38740:31;38752:6;;38740:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38760:10;38740:11;:31::i;:::-;38732:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38841:18;;38830:8;:29;;;;:::i;:::-;38817:9;:42;;38809:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38931:8;38897:18;:30;38916:10;38897:30;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;38992:16;;38958:18;:30;38977:10;38958:30;;;;;;;;;;;;;;;;:50;;38950:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39054:31;39064:10;39076:8;39054:9;:31::i;:::-;38470:625;;;:::o;14389:303::-;14433:7;14658:15;:13;:15::i;:::-;14643:12;;14627:13;;:28;:46;14620:53;;14389:303;:::o;37826:53::-;;;;;;;;;;;;;;;;;:::o;33772:22::-;;;;:::o;20621:170::-;20755:28;20765:4;20771:2;20775:7;20755:9;:28::i;:::-;20621:170;;;:::o;37773:46::-;;;;:::o;36605:96::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36694:1:::1;36677:14;:18;;;;36605:96:::0;:::o;39110:130::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39215:17:::1;39196:16;:36;;;;39110:130:::0;:::o;40677:138::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40790:17:::1;40767:20;:40;;;;40677:138:::0;:::o;33436:55::-;;;;;;;;;;;;;;;;;:::o;36500:98::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36583:9:::1;36575:5;:17;;;;36500:98:::0;:::o;20862:185::-;21000:39;21017:4;21023:2;21027:7;21000:39;;;;;;;;;;;;:16;:39::i;:::-;20862:185;;;:::o;36935:92::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37020:1:::1;37005:12;:16;;;;36935:92:::0;:::o;37246:73::-;37286:4;37307:6;;37300:13;;37246:73;:::o;40109:559::-;40237:1;40227:6;;:11;40219:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;40306:16;;40296:8;40282:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:40;;40274:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;40383:35;40399:6;;40383:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40407:10;40383:15;:35::i;:::-;40375:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40496:8;40458:22;:34;40481:10;40458:34;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;40561:20;;40523:22;:34;40546:10;40523:34;;;;;;;;;;;;;;;;:58;;40515:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;40627:31;40637:10;40649:8;40627:9;:31::i;:::-;40109:559;;;:::o;32983:38::-;;;;:::o;35716:98::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35801:7:::1;35785:13;:23;;;;;;;;;;;;:::i;:::-;;35716:98:::0;:::o;39577:39::-;;;;:::o;18061:125::-;18125:7;18152:21;18165:7;18152:12;:21::i;:::-;:26;;;18145:33;;18061:125;;;:::o;33253:34::-;;;;:::o;37167:72::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37232:1:::1;37223:6;:10;;;;37167:72:::0;:::o;33292:47::-;;;;:::o;15509:206::-;15573:7;15614:1;15597:19;;:5;:19;;;15593:60;;;15625:28;;;;;;;;;;;;;;15593:60;15679:12;:19;15692:5;15679:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;15671:36;;15664:43;;15509:206;;;:::o;5171:103::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5236:30:::1;5263:1;5236:18;:30::i;:::-;5171:103::o:0;33381:50::-;;;;;;;;;;;;;;;;;:::o;36819:108::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36920:1:::1;36897:20;:24;;;;36819:108:::0;:::o;37690:35::-;;;;:::o;34665:442::-;33964:10;33951:23;;:9;:23;;;33943:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34746:1:::1;34736:6;;:11;34728:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;33546:4;34802:1;34786:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:41;;34778:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;34890:1;34865:21;34875:10;34865:9;:21::i;:::-;:26;;34857:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34961:1;34925:20;:32;34946:10;34925:32;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;35013:20;;34977;:32;34998:10;34977:32;;;;;;;;;;;;;;;;:56;;34969:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;35075:24;35085:10;35097:1;35075:9;:24::i;:::-;34665:442::o:0;39388:134::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39495:19:::1;39474:18;:40;;;;39388:134:::0;:::o;37452:189::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33546:4:::1;37546:8;37530:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;37522:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;37608:27;37618:6;37626:8;37608:9;:27::i;:::-;37452:189:::0;;:::o;33659:33::-;;;;:::o;4948:87::-;4994:7;5021:6;;;;;;;;;;;5014:13;;4948:87;:::o;37886:38::-;;;;:::o;36159:148::-;36240:21;;:::i;:::-;36280;36293:7;36280:12;:21::i;:::-;36273:28;;36159:148;;;:::o;35820:110::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35917:7:::1;35895:19;:29;;;;;;;;;;;;:::i;:::-;;35820:110:::0;:::o;18422:104::-;18478:13;18511:7;18504:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18422:104;:::o;34030:627::-;33964:10;33951:23;;:9;:23;;;33943:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34117:1:::1;34107:6;;:11;34099:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;33546:4;34173:8;34157:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;34149:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34271:25;;34259:8;34243:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:53;;34235:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34354:19;;34342:8;:31;;34334:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34435:8;34427:5;;:16;;;;:::i;:::-;34414:9;:29;;34406:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34510:8;34479:15;:27;34495:10;34479:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34564:14;;34533:15;:27;34549:10;34533:27;;;;;;;;;;;;;;;;:45;;34525:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;34620:31;34630:10;34642:8;34620:9;:31::i;:::-;34030:627:::0;:::o;20032:287::-;20143:12;:10;:12::i;:::-;20131:24;;:8;:24;;;20127:54;;;20164:17;;;;;;;;;;;;;;20127:54;20239:8;20194:18;:32;20213:12;:10;:12::i;:::-;20194:32;;;;;;;;;;;;;;;:42;20227:8;20194:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20292:8;20263:48;;20278:12;:10;:12::i;:::-;20263:48;;;20302:8;20263:48;;;;;;:::i;:::-;;;;;;;;20032:287;;:::o;36707:106::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36806:1:::1;36784:19;:23;;;;36707:106:::0;:::o;39894:207::-;39981:4;40005:88;40024:6;40032:23;;40084:6;40067:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;40057:35;;;;;;40005:18;:88::i;:::-;39998:95;;39894:207;;;;:::o;37732:34::-;;;;:::o;39668:57::-;;;;;;;;;;;;;;;;;:::o;36313:181::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2730:1:::1;2876:7;;:19;;2868:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2730:1;2937:7;:18;;;;36378:12:::2;36396:10;:15;;36419:21;36396:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36377:68;;;36460:7;36452:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36370:124;2686:1:::1;2980:7;:22;;;;36313:181::o:0;38111:142::-;38178:7;38227:18;;38217:9;:28;;;;:::i;:::-;38210:35;;38111:142;;;:::o;39623:38::-;;;;:::o;21118:369::-;21285:28;21295:4;21301:2;21305:7;21285:9;:28::i;:::-;21328:15;:2;:13;;;:15::i;:::-;:76;;;;;21348:56;21379:4;21385:2;21389:7;21398:5;21348:30;:56::i;:::-;21347:57;21328:76;21324:156;;;21428:40;;;;;;;;;;;;;;21324:156;21118:369;;;;:::o;37961:142::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38075:20:::1;38053:19;:42;;;;37961:142:::0;:::o;35114:596::-;35187:13;35217:16;35225:7;35217;:16::i;:::-;35209:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35307:12;;35296:7;:23;35293:412;;35332:21;35356:10;:8;:10::i;:::-;35332:34;;35421:1;35403:7;35397:21;:25;:113;;;;;;;;;;;;;;;;;35462:7;35476:18;:7;:16;:18::i;:::-;35445:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35397:113;35377:133;;;;;35293:412;35596:1;35566:19;35560:33;;;;;:::i;:::-;;;:37;:137;;;;;;;;;;;;;;;;;35637:19;35663:18;:7;:16;:18::i;:::-;35620:71;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35560:137;35540:157;;35114:596;;;;:::o;33157:39::-;;;;:::o;36048:107::-;36106:7;36129:20;36143:5;36129:13;:20::i;:::-;36122:27;;36048:107;;;:::o;37035:124::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37149:4:::1;37121:25;:32;;;;37035:124:::0;:::o;38261:199::-;38344:4;38368:84;38387:6;38395:19;;38443:6;38426:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;38416:35;;;;;;38368:18;:84::i;:::-;38361:91;;38261:199;;;;:::o;37329:117::-;37387:7;37433:5;;37423:9;:15;;;;:::i;:::-;37416:22;;37329:117;;;:::o;39249:131::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39352:20:::1;39333:16;:39;;;;39249:131:::0;:::o;20390:164::-;20487:4;20511:18;:25;20530:5;20511:25;;;;;;;;;;;;;;;:35;20537:8;20511:35;;;;;;;;;;;;;;;;;;;;;;;;;20504:42;;20390:164;;;;:::o;5283:201::-;5093:12;:10;:12::i;:::-;5082:23;;:7;:5;:7::i;:::-;:23;;;5074:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5392:1:::1;5372:22;;:8;:22;;;;5364:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5448:28;5467:8;5448:18;:28::i;:::-;5283:201:::0;:::o;9601:157::-;9686:4;9725:25;9710:40;;;:11;:40;;;;9703:47;;9601:157;;;:::o;4491:98::-;4544:7;4571:10;4564:17;;4491:98;:::o;21742:174::-;21799:4;21842:7;21823:15;:13;:15::i;:::-;:26;;:53;;;;;21863:13;;21853:7;:23;21823:53;:85;;;;;21881:11;:20;21893:7;21881:20;;;;;;;;;;;:27;;;;;;;;;;;;21880:28;21823:85;21816:92;;21742:174;;;:::o;29899:196::-;30041:2;30014:15;:24;30030:7;30014:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30079:7;30075:2;30059:28;;30068:5;30059:28;;;;;;;;;;;;29899:196;;;:::o;21924:104::-;21993:27;22003:2;22007:8;21993:27;;;;;;;;;;;;:9;:27::i;:::-;21924:104;;:::o;14163:92::-;14219:7;14246:1;14239:8;;14163:92;:::o;24842:2130::-;24957:35;24995:21;25008:7;24995:12;:21::i;:::-;24957:59;;25055:4;25033:26;;:13;:18;;;:26;;;25029:67;;25068:28;;;;;;;;;;;;;;25029:67;25109:22;25151:4;25135:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;25172:36;25189:4;25195:12;:10;:12::i;:::-;25172:16;:36::i;:::-;25135:73;:126;;;;25249:12;:10;:12::i;:::-;25225:36;;:20;25237:7;25225:11;:20::i;:::-;:36;;;25135:126;25109:153;;25280:17;25275:66;;25306:35;;;;;;;;;;;;;;25275:66;25370:1;25356:16;;:2;:16;;;25352:52;;;25381:23;;;;;;;;;;;;;;25352:52;25417:43;25439:4;25445:2;25449:7;25458:1;25417:21;:43::i;:::-;25525:35;25542:1;25546:7;25555:4;25525:8;:35::i;:::-;25886:1;25856:12;:18;25869:4;25856:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25930:1;25902:12;:16;25915:2;25902:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25948:31;25982:11;:20;25994:7;25982:20;;;;;;;;;;;25948:54;;26033:2;26017:8;:13;;;:18;;;;;;;;;;;;;;;;;;26083:15;26050:8;:23;;;:49;;;;;;;;;;;;;;;;;;26351:19;26383:1;26373:7;:11;26351:33;;26399:31;26433:11;:24;26445:11;26433:24;;;;;;;;;;;26399:58;;26501:1;26476:27;;:8;:13;;;;;;;;;;;;:27;;;26472:384;;;26686:13;;26671:11;:28;26667:174;;26740:4;26724:8;:13;;;:20;;;;;;;;;;;;;;;;;;26793:13;:28;;;26767:8;:23;;;:54;;;;;;;;;;;;;;;;;;26667:174;26472:384;25831:1036;;;26903:7;26899:2;26884:27;;26893:4;26884:27;;;;;;;;;;;;26922:42;26943:4;26949:2;26953:7;26962:1;26922:20;:42::i;:::-;24946:2026;;24842:2130;;;:::o;16890:1109::-;16952:21;;:::i;:::-;16986:12;17001:7;16986:22;;17069:4;17050:15;:13;:15::i;:::-;:23;;:47;;;;;17084:13;;17077:4;:20;17050:47;17046:886;;;17118:31;17152:11;:17;17164:4;17152:17;;;;;;;;;;;17118:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17193:9;:16;;;17188:729;;17264:1;17238:28;;:9;:14;;;:28;;;17234:101;;17302:9;17295:16;;;;;;17234:101;17637:261;17644:4;17637:261;;;17677:6;;;;;;;;17722:11;:17;17734:4;17722:17;;;;;;;;;;;17710:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17796:1;17770:28;;:9;:14;;;:28;;;17766:109;;17838:9;17831:16;;;;;;17766:109;17637:261;;;17188:729;17099:833;17046:886;17960:31;;;;;;;;;;;;;;16890:1109;;;;:::o;5493:191::-;5567:16;5586:6;;;;;;;;;;;5567:25;;5612:8;5603:6;;:17;;;;;;;;;;;;;;;;;;5667:8;5636:40;;5657:8;5636:40;;;;;;;;;;;;5556:128;5493:191;:::o;1111:190::-;1236:4;1289;1260:25;1273:5;1280:4;1260:12;:25::i;:::-;:33;1253:40;;1111:190;;;;;:::o;5716:197::-;5776:4;5794:12;5861:7;5849:20;5841:28;;5904:1;5897:4;:8;5890:15;;;5716:197;;;:::o;30587:667::-;30750:4;30787:2;30771:36;;;30808:12;:10;:12::i;:::-;30822:4;30828:7;30837:5;30771:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30767:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31022:1;31005:6;:13;:18;31001:235;;;31051:40;;;;;;;;;;;;;;31001:235;31194:6;31188:13;31179:6;31175:2;31171:15;31164:38;30767:480;30900:45;;;30890:55;;;:6;:55;;;;30883:62;;;30587:667;;;;;;:::o;35934:108::-;35994:13;36023;36016:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35934:108;:::o;3108:533::-;3164:13;3204:1;3195:5;:10;3191:53;;;3222:10;;;;;;;;;;;;;;;;;;;;;3191:53;3254:12;3269:5;3254:20;;3285:14;3310:78;3325:1;3317:4;:9;3310:78;;3343:8;;;;;:::i;:::-;;;;3374:2;3366:10;;;;;:::i;:::-;;;3310:78;;;3398:19;3430:6;3420:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3398:39;;3448:154;3464:1;3455:5;:10;3448:154;;3492:1;3482:11;;;;;:::i;:::-;;;3559:2;3551:5;:10;;;;:::i;:::-;3538:2;:24;;;;:::i;:::-;3525:39;;3508:6;3515;3508:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3588:2;3579:11;;;;;:::i;:::-;;;3448:154;;;3626:6;3612:21;;;;;3108:533;;;;:::o;15797:137::-;15858:7;15893:12;:19;15906:5;15893:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;15885:41;;15878:48;;15797:137;;;:::o;22391:163::-;22514:32;22520:2;22524:8;22534:5;22541:4;22514:5;:32::i;:::-;22391:163;;;:::o;31902:159::-;;;;;:::o;32720:158::-;;;;;:::o;1662:675::-;1745:7;1765:20;1788:4;1765:27;;1808:9;1803:497;1827:5;:12;1823:1;:16;1803:497;;;1861:20;1884:5;1890:1;1884:8;;;;;;;;:::i;:::-;;;;;;;;1861:31;;1927:12;1911;:28;1907:382;;2054:42;2069:12;2083;2054:14;:42::i;:::-;2039:57;;1907:382;;;2231:42;2246:12;2260;2231:14;:42::i;:::-;2216:57;;1907:382;1846:454;1841:3;;;;;:::i;:::-;;;;1803:497;;;;2317:12;2310:19;;;1662:675;;;;:::o;22813:1775::-;22952:20;22975:13;;22952:36;;23017:1;23003:16;;:2;:16;;;22999:48;;;23028:19;;;;;;;;;;;;;;22999:48;23074:1;23062:8;:13;23058:44;;;23084:18;;;;;;;;;;;;;;23058:44;23115:61;23145:1;23149:2;23153:12;23167:8;23115:21;:61::i;:::-;23488:8;23453:12;:16;23466:2;23453:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23552:8;23512:12;:16;23525:2;23512:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23611:2;23578:11;:25;23590:12;23578:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;23678:15;23628:11;:25;23640:12;23628:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;23711:20;23734:12;23711:35;;23761:11;23790:8;23775:12;:23;23761:37;;23819:4;:23;;;;;23827:15;:2;:13;;;:15::i;:::-;23819:23;23815:641;;;23863:314;23919:12;23915:2;23894:38;;23911:1;23894:38;;;;;;;;;;;;23960:69;23999:1;24003:2;24007:14;;;;;;24023:5;23960:30;:69::i;:::-;23955:174;;24065:40;;;;;;;;;;;;;;23955:174;24172:3;24156:12;:19;;23863:314;;24258:12;24241:13;;:29;24237:43;;24272:8;;;24237:43;23815:641;;;24321:120;24377:14;;;;;;24373:2;24352:40;;24369:1;24352:40;;;;;;;;;;;;24436:3;24420:12;:19;;24321:120;;23815:641;24486:12;24470:13;:28;;;;23428:1082;;24520:60;24549:1;24553:2;24557:12;24571:8;24520:20;:60::i;:::-;22941:1647;22813:1775;;;;:::o;2345:224::-;2413:13;2476:1;2470:4;2463:15;2505:1;2499:4;2492:15;2546:4;2540;2530:21;2521:30;;2345:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:139::-;2900:5;2938:6;2925:20;2916:29;;2954:33;2981:5;2954:33;:::i;:::-;2854:139;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;2999:137;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3142:141;;;;:::o;3302:338::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:122;;3414:79;;:::i;:::-;3373:122;3531:6;3518:20;3556:78;3630:3;3622:6;3615:4;3607:6;3603:17;3556:78;:::i;:::-;3547:87;;3363:277;3302:338;;;;:::o;3660:340::-;3716:5;3765:3;3758:4;3750:6;3746:17;3742:27;3732:122;;3773:79;;:::i;:::-;3732:122;3890:6;3877:20;3915:79;3990:3;3982:6;3975:4;3967:6;3963:17;3915:79;:::i;:::-;3906:88;;3722:278;3660:340;;;;:::o;4006:139::-;4052:5;4090:6;4077:20;4068:29;;4106:33;4133:5;4106:33;:::i;:::-;4006:139;;;;:::o;4151:329::-;4210:6;4259:2;4247:9;4238:7;4234:23;4230:32;4227:119;;;4265:79;;:::i;:::-;4227:119;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4151:329;;;;:::o;4486:474::-;4554:6;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4486:474;;;;;:::o;4966:619::-;5043:6;5051;5059;5108:2;5096:9;5087:7;5083:23;5079:32;5076:119;;;5114:79;;:::i;:::-;5076:119;5234:1;5259:53;5304:7;5295:6;5284:9;5280:22;5259:53;:::i;:::-;5249:63;;5205:117;5361:2;5387:53;5432:7;5423:6;5412:9;5408:22;5387:53;:::i;:::-;5377:63;;5332:118;5489:2;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5460:118;4966:619;;;;;:::o;5591:943::-;5686:6;5694;5702;5710;5759:3;5747:9;5738:7;5734:23;5730:33;5727:120;;;5766:79;;:::i;:::-;5727:120;5886:1;5911:53;5956:7;5947:6;5936:9;5932:22;5911:53;:::i;:::-;5901:63;;5857:117;6013:2;6039:53;6084:7;6075:6;6064:9;6060:22;6039:53;:::i;:::-;6029:63;;5984:118;6141:2;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6112:118;6297:2;6286:9;6282:18;6269:32;6328:18;6320:6;6317:30;6314:117;;;6350:79;;:::i;:::-;6314:117;6455:62;6509:7;6500:6;6489:9;6485:22;6455:62;:::i;:::-;6445:72;;6240:287;5591:943;;;;;;;:::o;6540:468::-;6605:6;6613;6662:2;6650:9;6641:7;6637:23;6633:32;6630:119;;;6668:79;;:::i;:::-;6630:119;6788:1;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6759:117;6915:2;6941:50;6983:7;6974:6;6963:9;6959:22;6941:50;:::i;:::-;6931:60;;6886:115;6540:468;;;;;:::o;7014:474::-;7082:6;7090;7139:2;7127:9;7118:7;7114:23;7110:32;7107:119;;;7145:79;;:::i;:::-;7107:119;7265:1;7290:53;7335:7;7326:6;7315:9;7311:22;7290:53;:::i;:::-;7280:63;;7236:117;7392:2;7418:53;7463:7;7454:6;7443:9;7439:22;7418:53;:::i;:::-;7408:63;;7363:118;7014:474;;;;;:::o;7494:684::-;7587:6;7595;7644:2;7632:9;7623:7;7619:23;7615:32;7612:119;;;7650:79;;:::i;:::-;7612:119;7798:1;7787:9;7783:17;7770:31;7828:18;7820:6;7817:30;7814:117;;;7850:79;;:::i;:::-;7814:117;7955:78;8025:7;8016:6;8005:9;8001:22;7955:78;:::i;:::-;7945:88;;7741:302;8082:2;8108:53;8153:7;8144:6;8133:9;8129:22;8108:53;:::i;:::-;8098:63;;8053:118;7494:684;;;;;:::o;8184:329::-;8243:6;8292:2;8280:9;8271:7;8267:23;8263:32;8260:119;;;8298:79;;:::i;:::-;8260:119;8418:1;8443:53;8488:7;8479:6;8468:9;8464:22;8443:53;:::i;:::-;8433:63;;8389:117;8184:329;;;;:::o;8519:327::-;8577:6;8626:2;8614:9;8605:7;8601:23;8597:32;8594:119;;;8632:79;;:::i;:::-;8594:119;8752:1;8777:52;8821:7;8812:6;8801:9;8797:22;8777:52;:::i;:::-;8767:62;;8723:116;8519:327;;;;:::o;8852:349::-;8921:6;8970:2;8958:9;8949:7;8945:23;8941:32;8938:119;;;8976:79;;:::i;:::-;8938:119;9096:1;9121:63;9176:7;9167:6;9156:9;9152:22;9121:63;:::i;:::-;9111:73;;9067:127;8852:349;;;;:::o;9207:509::-;9276:6;9325:2;9313:9;9304:7;9300:23;9296:32;9293:119;;;9331:79;;:::i;:::-;9293:119;9479:1;9468:9;9464:17;9451:31;9509:18;9501:6;9498:30;9495:117;;;9531:79;;:::i;:::-;9495:117;9636:63;9691:7;9682:6;9671:9;9667:22;9636:63;:::i;:::-;9626:73;;9422:287;9207:509;;;;:::o;9722:329::-;9781:6;9830:2;9818:9;9809:7;9805:23;9801:32;9798:119;;;9836:79;;:::i;:::-;9798:119;9956:1;9981:53;10026:7;10017:6;10006:9;10002:22;9981:53;:::i;:::-;9971:63;;9927:117;9722:329;;;;:::o;10057:704::-;10152:6;10160;10168;10217:2;10205:9;10196:7;10192:23;10188:32;10185:119;;;10223:79;;:::i;:::-;10185:119;10343:1;10368:53;10413:7;10404:6;10393:9;10389:22;10368:53;:::i;:::-;10358:63;;10314:117;10498:2;10487:9;10483:18;10470:32;10529:18;10521:6;10518:30;10515:117;;;10551:79;;:::i;:::-;10515:117;10664:80;10736:7;10727:6;10716:9;10712:22;10664:80;:::i;:::-;10646:98;;;;10441:313;10057:704;;;;;:::o;10767:108::-;10844:24;10862:5;10844:24;:::i;:::-;10839:3;10832:37;10767:108;;:::o;10881:118::-;10968:24;10986:5;10968:24;:::i;:::-;10963:3;10956:37;10881:118;;:::o;11005:157::-;11110:45;11130:24;11148:5;11130:24;:::i;:::-;11110:45;:::i;:::-;11105:3;11098:58;11005:157;;:::o;11168:99::-;11239:21;11254:5;11239:21;:::i;:::-;11234:3;11227:34;11168:99;;:::o;11273:109::-;11354:21;11369:5;11354:21;:::i;:::-;11349:3;11342:34;11273:109;;:::o;11388:118::-;11475:24;11493:5;11475:24;:::i;:::-;11470:3;11463:37;11388:118;;:::o;11512:360::-;11598:3;11626:38;11658:5;11626:38;:::i;:::-;11680:70;11743:6;11738:3;11680:70;:::i;:::-;11673:77;;11759:52;11804:6;11799:3;11792:4;11785:5;11781:16;11759:52;:::i;:::-;11836:29;11858:6;11836:29;:::i;:::-;11831:3;11827:39;11820:46;;11602:270;11512:360;;;;:::o;11878:364::-;11966:3;11994:39;12027:5;11994:39;:::i;:::-;12049:71;12113:6;12108:3;12049:71;:::i;:::-;12042:78;;12129:52;12174:6;12169:3;12162:4;12155:5;12151:16;12129:52;:::i;:::-;12206:29;12228:6;12206:29;:::i;:::-;12201:3;12197:39;12190:46;;11970:272;11878:364;;;;:::o;12248:377::-;12354:3;12382:39;12415:5;12382:39;:::i;:::-;12437:89;12519:6;12514:3;12437:89;:::i;:::-;12430:96;;12535:52;12580:6;12575:3;12568:4;12561:5;12557:16;12535:52;:::i;:::-;12612:6;12607:3;12603:16;12596:23;;12358:267;12248:377;;;;:::o;12655:845::-;12758:3;12795:5;12789:12;12824:36;12850:9;12824:36;:::i;:::-;12876:89;12958:6;12953:3;12876:89;:::i;:::-;12869:96;;12996:1;12985:9;12981:17;13012:1;13007:137;;;;13158:1;13153:341;;;;12974:520;;13007:137;13091:4;13087:9;13076;13072:25;13067:3;13060:38;13127:6;13122:3;13118:16;13111:23;;13007:137;;13153:341;13220:38;13252:5;13220:38;:::i;:::-;13280:1;13294:154;13308:6;13305:1;13302:13;13294:154;;;13382:7;13376:14;13372:1;13367:3;13363:11;13356:35;13432:1;13423:7;13419:15;13408:26;;13330:4;13327:1;13323:12;13318:17;;13294:154;;;13477:6;13472:3;13468:16;13461:23;;13160:334;;12974:520;;12762:738;;12655:845;;;;:::o;13506:366::-;13648:3;13669:67;13733:2;13728:3;13669:67;:::i;:::-;13662:74;;13745:93;13834:3;13745:93;:::i;:::-;13863:2;13858:3;13854:12;13847:19;;13506:366;;;:::o;13878:::-;14020:3;14041:67;14105:2;14100:3;14041:67;:::i;:::-;14034:74;;14117:93;14206:3;14117:93;:::i;:::-;14235:2;14230:3;14226:12;14219:19;;13878:366;;;:::o;14250:::-;14392:3;14413:67;14477:2;14472:3;14413:67;:::i;:::-;14406:74;;14489:93;14578:3;14489:93;:::i;:::-;14607:2;14602:3;14598:12;14591:19;;14250:366;;;:::o;14622:::-;14764:3;14785:67;14849:2;14844:3;14785:67;:::i;:::-;14778:74;;14861:93;14950:3;14861:93;:::i;:::-;14979:2;14974:3;14970:12;14963:19;;14622:366;;;:::o;14994:::-;15136:3;15157:67;15221:2;15216:3;15157:67;:::i;:::-;15150:74;;15233:93;15322:3;15233:93;:::i;:::-;15351:2;15346:3;15342:12;15335:19;;14994:366;;;:::o;15366:::-;15508:3;15529:67;15593:2;15588:3;15529:67;:::i;:::-;15522:74;;15605:93;15694:3;15605:93;:::i;:::-;15723:2;15718:3;15714:12;15707:19;;15366:366;;;:::o;15738:::-;15880:3;15901:67;15965:2;15960:3;15901:67;:::i;:::-;15894:74;;15977:93;16066:3;15977:93;:::i;:::-;16095:2;16090:3;16086:12;16079:19;;15738:366;;;:::o;16110:::-;16252:3;16273:67;16337:2;16332:3;16273:67;:::i;:::-;16266:74;;16349:93;16438:3;16349:93;:::i;:::-;16467:2;16462:3;16458:12;16451:19;;16110:366;;;:::o;16482:::-;16624:3;16645:67;16709:2;16704:3;16645:67;:::i;:::-;16638:74;;16721:93;16810:3;16721:93;:::i;:::-;16839:2;16834:3;16830:12;16823:19;;16482:366;;;:::o;16854:400::-;17014:3;17035:84;17117:1;17112:3;17035:84;:::i;:::-;17028:91;;17128:93;17217:3;17128:93;:::i;:::-;17246:1;17241:3;17237:11;17230:18;;16854:400;;;:::o;17260:366::-;17402:3;17423:67;17487:2;17482:3;17423:67;:::i;:::-;17416:74;;17499:93;17588:3;17499:93;:::i;:::-;17617:2;17612:3;17608:12;17601:19;;17260:366;;;:::o;17632:::-;17774:3;17795:67;17859:2;17854:3;17795:67;:::i;:::-;17788:74;;17871:93;17960:3;17871:93;:::i;:::-;17989:2;17984:3;17980:12;17973:19;;17632:366;;;:::o;18004:::-;18146:3;18167:67;18231:2;18226:3;18167:67;:::i;:::-;18160:74;;18243:93;18332:3;18243:93;:::i;:::-;18361:2;18356:3;18352:12;18345:19;;18004:366;;;:::o;18376:398::-;18535:3;18556:83;18637:1;18632:3;18556:83;:::i;:::-;18549:90;;18648:93;18737:3;18648:93;:::i;:::-;18766:1;18761:3;18757:11;18750:18;;18376:398;;;:::o;18780:366::-;18922:3;18943:67;19007:2;19002:3;18943:67;:::i;:::-;18936:74;;19019:93;19108:3;19019:93;:::i;:::-;19137:2;19132:3;19128:12;19121:19;;18780:366;;;:::o;19152:::-;19294:3;19315:67;19379:2;19374:3;19315:67;:::i;:::-;19308:74;;19391:93;19480:3;19391:93;:::i;:::-;19509:2;19504:3;19500:12;19493:19;;19152:366;;;:::o;19524:::-;19666:3;19687:67;19751:2;19746:3;19687:67;:::i;:::-;19680:74;;19763:93;19852:3;19763:93;:::i;:::-;19881:2;19876:3;19872:12;19865:19;;19524:366;;;:::o;19896:::-;20038:3;20059:67;20123:2;20118:3;20059:67;:::i;:::-;20052:74;;20135:93;20224:3;20135:93;:::i;:::-;20253:2;20248:3;20244:12;20237:19;;19896:366;;;:::o;20268:::-;20410:3;20431:67;20495:2;20490:3;20431:67;:::i;:::-;20424:74;;20507:93;20596:3;20507:93;:::i;:::-;20625:2;20620:3;20616:12;20609:19;;20268:366;;;:::o;20640:400::-;20800:3;20821:84;20903:1;20898:3;20821:84;:::i;:::-;20814:91;;20914:93;21003:3;20914:93;:::i;:::-;21032:1;21027:3;21023:11;21016:18;;20640:400;;;:::o;21116:697::-;21275:4;21270:3;21266:14;21362:4;21355:5;21351:16;21345:23;21381:63;21438:4;21433:3;21429:14;21415:12;21381:63;:::i;:::-;21290:164;21546:4;21539:5;21535:16;21529:23;21565:61;21620:4;21615:3;21611:14;21597:12;21565:61;:::i;:::-;21464:172;21720:4;21713:5;21709:16;21703:23;21739:57;21790:4;21785:3;21781:14;21767:12;21739:57;:::i;:::-;21646:160;21244:569;21116:697;;:::o;21819:118::-;21906:24;21924:5;21906:24;:::i;:::-;21901:3;21894:37;21819:118;;:::o;21943:105::-;22018:23;22035:5;22018:23;:::i;:::-;22013:3;22006:36;21943:105;;:::o;22054:256::-;22166:3;22181:75;22252:3;22243:6;22181:75;:::i;:::-;22281:2;22276:3;22272:12;22265:19;;22301:3;22294:10;;22054:256;;;;:::o;22316:967::-;22698:3;22720:95;22811:3;22802:6;22720:95;:::i;:::-;22713:102;;22832:148;22976:3;22832:148;:::i;:::-;22825:155;;22997:95;23088:3;23079:6;22997:95;:::i;:::-;22990:102;;23109:148;23253:3;23109:148;:::i;:::-;23102:155;;23274:3;23267:10;;22316:967;;;;;:::o;23289:961::-;23668:3;23690:92;23778:3;23769:6;23690:92;:::i;:::-;23683:99;;23799:148;23943:3;23799:148;:::i;:::-;23792:155;;23964:95;24055:3;24046:6;23964:95;:::i;:::-;23957:102;;24076:148;24220:3;24076:148;:::i;:::-;24069:155;;24241:3;24234:10;;23289:961;;;;;:::o;24256:379::-;24440:3;24462:147;24605:3;24462:147;:::i;:::-;24455:154;;24626:3;24619:10;;24256:379;;;:::o;24641:222::-;24734:4;24772:2;24761:9;24757:18;24749:26;;24785:71;24853:1;24842:9;24838:17;24829:6;24785:71;:::i;:::-;24641:222;;;;:::o;24869:640::-;25064:4;25102:3;25091:9;25087:19;25079:27;;25116:71;25184:1;25173:9;25169:17;25160:6;25116:71;:::i;:::-;25197:72;25265:2;25254:9;25250:18;25241:6;25197:72;:::i;:::-;25279;25347:2;25336:9;25332:18;25323:6;25279:72;:::i;:::-;25398:9;25392:4;25388:20;25383:2;25372:9;25368:18;25361:48;25426:76;25497:4;25488:6;25426:76;:::i;:::-;25418:84;;24869:640;;;;;;;:::o;25515:210::-;25602:4;25640:2;25629:9;25625:18;25617:26;;25653:65;25715:1;25704:9;25700:17;25691:6;25653:65;:::i;:::-;25515:210;;;;:::o;25731:222::-;25824:4;25862:2;25851:9;25847:18;25839:26;;25875:71;25943:1;25932:9;25928:17;25919:6;25875:71;:::i;:::-;25731:222;;;;:::o;25959:313::-;26072:4;26110:2;26099:9;26095:18;26087:26;;26159:9;26153:4;26149:20;26145:1;26134:9;26130:17;26123:47;26187:78;26260:4;26251:6;26187:78;:::i;:::-;26179:86;;25959:313;;;;:::o;26278:419::-;26444:4;26482:2;26471:9;26467:18;26459:26;;26531:9;26525:4;26521:20;26517:1;26506:9;26502:17;26495:47;26559:131;26685:4;26559:131;:::i;:::-;26551:139;;26278:419;;;:::o;26703:::-;26869:4;26907:2;26896:9;26892:18;26884:26;;26956:9;26950:4;26946:20;26942:1;26931:9;26927:17;26920:47;26984:131;27110:4;26984:131;:::i;:::-;26976:139;;26703:419;;;:::o;27128:::-;27294:4;27332:2;27321:9;27317:18;27309:26;;27381:9;27375:4;27371:20;27367:1;27356:9;27352:17;27345:47;27409:131;27535:4;27409:131;:::i;:::-;27401:139;;27128:419;;;:::o;27553:::-;27719:4;27757:2;27746:9;27742:18;27734:26;;27806:9;27800:4;27796:20;27792:1;27781:9;27777:17;27770:47;27834:131;27960:4;27834:131;:::i;:::-;27826:139;;27553:419;;;:::o;27978:::-;28144:4;28182:2;28171:9;28167:18;28159:26;;28231:9;28225:4;28221:20;28217:1;28206:9;28202:17;28195:47;28259:131;28385:4;28259:131;:::i;:::-;28251:139;;27978:419;;;:::o;28403:::-;28569:4;28607:2;28596:9;28592:18;28584:26;;28656:9;28650:4;28646:20;28642:1;28631:9;28627:17;28620:47;28684:131;28810:4;28684:131;:::i;:::-;28676:139;;28403:419;;;:::o;28828:::-;28994:4;29032:2;29021:9;29017:18;29009:26;;29081:9;29075:4;29071:20;29067:1;29056:9;29052:17;29045:47;29109:131;29235:4;29109:131;:::i;:::-;29101:139;;28828:419;;;:::o;29253:::-;29419:4;29457:2;29446:9;29442:18;29434:26;;29506:9;29500:4;29496:20;29492:1;29481:9;29477:17;29470:47;29534:131;29660:4;29534:131;:::i;:::-;29526:139;;29253:419;;;:::o;29678:::-;29844:4;29882:2;29871:9;29867:18;29859:26;;29931:9;29925:4;29921:20;29917:1;29906:9;29902:17;29895:47;29959:131;30085:4;29959:131;:::i;:::-;29951:139;;29678:419;;;:::o;30103:::-;30269:4;30307:2;30296:9;30292:18;30284:26;;30356:9;30350:4;30346:20;30342:1;30331:9;30327:17;30320:47;30384:131;30510:4;30384:131;:::i;:::-;30376:139;;30103:419;;;:::o;30528:::-;30694:4;30732:2;30721:9;30717:18;30709:26;;30781:9;30775:4;30771:20;30767:1;30756:9;30752:17;30745:47;30809:131;30935:4;30809:131;:::i;:::-;30801:139;;30528:419;;;:::o;30953:::-;31119:4;31157:2;31146:9;31142:18;31134:26;;31206:9;31200:4;31196:20;31192:1;31181:9;31177:17;31170:47;31234:131;31360:4;31234:131;:::i;:::-;31226:139;;30953:419;;;:::o;31378:::-;31544:4;31582:2;31571:9;31567:18;31559:26;;31631:9;31625:4;31621:20;31617:1;31606:9;31602:17;31595:47;31659:131;31785:4;31659:131;:::i;:::-;31651:139;;31378:419;;;:::o;31803:::-;31969:4;32007:2;31996:9;31992:18;31984:26;;32056:9;32050:4;32046:20;32042:1;32031:9;32027:17;32020:47;32084:131;32210:4;32084:131;:::i;:::-;32076:139;;31803:419;;;:::o;32228:::-;32394:4;32432:2;32421:9;32417:18;32409:26;;32481:9;32475:4;32471:20;32467:1;32456:9;32452:17;32445:47;32509:131;32635:4;32509:131;:::i;:::-;32501:139;;32228:419;;;:::o;32653:::-;32819:4;32857:2;32846:9;32842:18;32834:26;;32906:9;32900:4;32896:20;32892:1;32881:9;32877:17;32870:47;32934:131;33060:4;32934:131;:::i;:::-;32926:139;;32653:419;;;:::o;33078:::-;33244:4;33282:2;33271:9;33267:18;33259:26;;33331:9;33325:4;33321:20;33317:1;33306:9;33302:17;33295:47;33359:131;33485:4;33359:131;:::i;:::-;33351:139;;33078:419;;;:::o;33503:346::-;33658:4;33696:2;33685:9;33681:18;33673:26;;33709:133;33839:1;33828:9;33824:17;33815:6;33709:133;:::i;:::-;33503:346;;;;:::o;33855:222::-;33948:4;33986:2;33975:9;33971:18;33963:26;;33999:71;34067:1;34056:9;34052:17;34043:6;33999:71;:::i;:::-;33855:222;;;;:::o;34083:129::-;34117:6;34144:20;;:::i;:::-;34134:30;;34173:33;34201:4;34193:6;34173:33;:::i;:::-;34083:129;;;:::o;34218:75::-;34251:6;34284:2;34278:9;34268:19;;34218:75;:::o;34299:311::-;34376:4;34466:18;34458:6;34455:30;34452:56;;;34488:18;;:::i;:::-;34452:56;34538:4;34530:6;34526:17;34518:25;;34598:4;34592;34588:15;34580:23;;34299:311;;;:::o;34616:307::-;34677:4;34767:18;34759:6;34756:30;34753:56;;;34789:18;;:::i;:::-;34753:56;34827:29;34849:6;34827:29;:::i;:::-;34819:37;;34911:4;34905;34901:15;34893:23;;34616:307;;;:::o;34929:308::-;34991:4;35081:18;35073:6;35070:30;35067:56;;;35103:18;;:::i;:::-;35067:56;35141:29;35163:6;35141:29;:::i;:::-;35133:37;;35225:4;35219;35215:15;35207:23;;34929:308;;;:::o;35243:141::-;35292:4;35315:3;35307:11;;35338:3;35335:1;35328:14;35372:4;35369:1;35359:18;35351:26;;35243:141;;;:::o;35390:98::-;35441:6;35475:5;35469:12;35459:22;;35390:98;;;:::o;35494:99::-;35546:6;35580:5;35574:12;35564:22;;35494:99;;;:::o;35599:168::-;35682:11;35716:6;35711:3;35704:19;35756:4;35751:3;35747:14;35732:29;;35599:168;;;;:::o;35773:147::-;35874:11;35911:3;35896:18;;35773:147;;;;:::o;35926:169::-;36010:11;36044:6;36039:3;36032:19;36084:4;36079:3;36075:14;36060:29;;35926:169;;;;:::o;36101:148::-;36203:11;36240:3;36225:18;;36101:148;;;;:::o;36255:305::-;36295:3;36314:20;36332:1;36314:20;:::i;:::-;36309:25;;36348:20;36366:1;36348:20;:::i;:::-;36343:25;;36502:1;36434:66;36430:74;36427:1;36424:81;36421:107;;;36508:18;;:::i;:::-;36421:107;36552:1;36549;36545:9;36538:16;;36255:305;;;;:::o;36566:185::-;36606:1;36623:20;36641:1;36623:20;:::i;:::-;36618:25;;36657:20;36675:1;36657:20;:::i;:::-;36652:25;;36696:1;36686:35;;36701:18;;:::i;:::-;36686:35;36743:1;36740;36736:9;36731:14;;36566:185;;;;:::o;36757:348::-;36797:7;36820:20;36838:1;36820:20;:::i;:::-;36815:25;;36854:20;36872:1;36854:20;:::i;:::-;36849:25;;37042:1;36974:66;36970:74;36967:1;36964:81;36959:1;36952:9;36945:17;36941:105;36938:131;;;37049:18;;:::i;:::-;36938:131;37097:1;37094;37090:9;37079:20;;36757:348;;;;:::o;37111:191::-;37151:4;37171:20;37189:1;37171:20;:::i;:::-;37166:25;;37205:20;37223:1;37205:20;:::i;:::-;37200:25;;37244:1;37241;37238:8;37235:34;;;37249:18;;:::i;:::-;37235:34;37294:1;37291;37287:9;37279:17;;37111:191;;;;:::o;37308:96::-;37345:7;37374:24;37392:5;37374:24;:::i;:::-;37363:35;;37308:96;;;:::o;37410:90::-;37444:7;37487:5;37480:13;37473:21;37462:32;;37410:90;;;:::o;37506:77::-;37543:7;37572:5;37561:16;;37506:77;;;:::o;37589:149::-;37625:7;37665:66;37658:5;37654:78;37643:89;;37589:149;;;:::o;37744:126::-;37781:7;37821:42;37814:5;37810:54;37799:65;;37744:126;;;:::o;37876:77::-;37913:7;37942:5;37931:16;;37876:77;;;:::o;37959:101::-;37995:7;38035:18;38028:5;38024:30;38013:41;;37959:101;;;:::o;38066:154::-;38150:6;38145:3;38140;38127:30;38212:1;38203:6;38198:3;38194:16;38187:27;38066:154;;;:::o;38226:307::-;38294:1;38304:113;38318:6;38315:1;38312:13;38304:113;;;38403:1;38398:3;38394:11;38388:18;38384:1;38379:3;38375:11;38368:39;38340:2;38337:1;38333:10;38328:15;;38304:113;;;38435:6;38432:1;38429:13;38426:101;;;38515:1;38506:6;38501:3;38497:16;38490:27;38426:101;38275:258;38226:307;;;:::o;38539:320::-;38583:6;38620:1;38614:4;38610:12;38600:22;;38667:1;38661:4;38657:12;38688:18;38678:81;;38744:4;38736:6;38732:17;38722:27;;38678:81;38806:2;38798:6;38795:14;38775:18;38772:38;38769:84;;;38825:18;;:::i;:::-;38769:84;38590:269;38539:320;;;:::o;38865:281::-;38948:27;38970:4;38948:27;:::i;:::-;38940:6;38936:40;39078:6;39066:10;39063:22;39042:18;39030:10;39027:34;39024:62;39021:88;;;39089:18;;:::i;:::-;39021:88;39129:10;39125:2;39118:22;38908:238;38865:281;;:::o;39152:233::-;39191:3;39214:24;39232:5;39214:24;:::i;:::-;39205:33;;39260:66;39253:5;39250:77;39247:103;;;39330:18;;:::i;:::-;39247:103;39377:1;39370:5;39366:13;39359:20;;39152:233;;;:::o;39391:100::-;39430:7;39459:26;39479:5;39459:26;:::i;:::-;39448:37;;39391:100;;;:::o;39497:94::-;39536:7;39565:20;39579:5;39565:20;:::i;:::-;39554:31;;39497:94;;;:::o;39597:176::-;39629:1;39646:20;39664:1;39646:20;:::i;:::-;39641:25;;39680:20;39698:1;39680:20;:::i;:::-;39675:25;;39719:1;39709:35;;39724:18;;:::i;:::-;39709:35;39765:1;39762;39758:9;39753:14;;39597:176;;;;:::o;39779:180::-;39827:77;39824:1;39817:88;39924:4;39921:1;39914:15;39948:4;39945:1;39938:15;39965:180;40013:77;40010:1;40003:88;40110:4;40107:1;40100:15;40134:4;40131:1;40124:15;40151:180;40199:77;40196:1;40189:88;40296:4;40293:1;40286:15;40320:4;40317:1;40310:15;40337:180;40385:77;40382:1;40375:88;40482:4;40479:1;40472:15;40506:4;40503:1;40496:15;40523:180;40571:77;40568:1;40561:88;40668:4;40665:1;40658:15;40692:4;40689:1;40682:15;40709:117;40818:1;40815;40808:12;40832:117;40941:1;40938;40931:12;40955:117;41064:1;41061;41054:12;41078:117;41187:1;41184;41177:12;41201:117;41310:1;41307;41300:12;41324:117;41433:1;41430;41423:12;41447:102;41488:6;41539:2;41535:7;41530:2;41523:5;41519:14;41515:28;41505:38;;41447:102;;;:::o;41555:94::-;41588:8;41636:5;41632:2;41628:14;41607:35;;41555:94;;;:::o;41655:225::-;41795:34;41791:1;41783:6;41779:14;41772:58;41864:8;41859:2;41851:6;41847:15;41840:33;41655:225;:::o;41886:170::-;42026:22;42022:1;42014:6;42010:14;42003:46;41886:170;:::o;42062:169::-;42202:21;42198:1;42190:6;42186:14;42179:45;42062:169;:::o;42237:174::-;42377:26;42373:1;42365:6;42361:14;42354:50;42237:174;:::o;42417:168::-;42557:20;42553:1;42545:6;42541:14;42534:44;42417:168;:::o;42591:180::-;42731:32;42727:1;42719:6;42715:14;42708:56;42591:180;:::o;42777:170::-;42917:22;42913:1;42905:6;42901:14;42894:46;42777:170;:::o;42953:168::-;43093:20;43089:1;43081:6;43077:14;43070:44;42953:168;:::o;43127:172::-;43267:24;43263:1;43255:6;43251:14;43244:48;43127:172;:::o;43305:155::-;43445:7;43441:1;43433:6;43429:14;43422:31;43305:155;:::o;43466:182::-;43606:34;43602:1;43594:6;43590:14;43583:58;43466:182;:::o;43654:225::-;43794:34;43790:1;43782:6;43778:14;43771:58;43863:8;43858:2;43850:6;43846:15;43839:33;43654:225;:::o;43885:234::-;44025:34;44021:1;44013:6;44009:14;44002:58;44094:17;44089:2;44081:6;44077:15;44070:42;43885:234;:::o;44125:114::-;;:::o;44245:166::-;44385:18;44381:1;44373:6;44369:14;44362:42;44245:166;:::o;44417:172::-;44557:24;44553:1;44545:6;44541:14;44534:48;44417:172;:::o;44595:::-;44735:24;44731:1;44723:6;44719:14;44712:48;44595:172;:::o;44773:178::-;44913:30;44909:1;44901:6;44897:14;44890:54;44773:178;:::o;44957:181::-;45097:33;45093:1;45085:6;45081:14;45074:57;44957:181;:::o;45144:151::-;45284:3;45280:1;45272:6;45268:14;45261:27;45144:151;:::o;45301:122::-;45374:24;45392:5;45374:24;:::i;:::-;45367:5;45364:35;45354:63;;45413:1;45410;45403:12;45354:63;45301:122;:::o;45429:116::-;45499:21;45514:5;45499:21;:::i;:::-;45492:5;45489:32;45479:60;;45535:1;45532;45525:12;45479:60;45429:116;:::o;45551:122::-;45624:24;45642:5;45624:24;:::i;:::-;45617:5;45614:35;45604:63;;45663:1;45660;45653:12;45604:63;45551:122;:::o;45679:120::-;45751:23;45768:5;45751:23;:::i;:::-;45744:5;45741:34;45731:62;;45789:1;45786;45779:12;45731:62;45679:120;:::o;45805:122::-;45878:24;45896:5;45878:24;:::i;:::-;45871:5;45868:35;45858:63;;45917:1;45914;45907:12;45858:63;45805:122;:::o
Swarm Source
ipfs://527f95e44336a988b62c77c83cb59f1f32ba54b7a8483bf308e7873ac766338e
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.