ERC-721
Overview
Max Total Supply
5,000 MetaversePlayers
Holders
914
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MetaversePlayersLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaversePlayers
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: GPL-3.0 // HOFHOFHOFHOFHOFHOFHOFHOFHOFHOFHHOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHF HOFHOFHOFHOF // HOFHOFHOFHOF HOF HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOF HOFHOFH HOFHOFHOFHOF // HOFHOFHOFHOFHOFHOFHOFHOFHOFHOFHHOFHOFHOFHOF // ----------- House Of First ----------- // -- Metaverse Players - Butcher Billy -- pragma solidity ^0.8.10; import "./ERC721Enum.sol"; import "./Ownable.sol"; import "./Strings.sol"; import "./ReentrancyGuard.sol"; import {MerkleProof} from "./MerkleProof.sol"; contract OwnableDelegateProxy {} /** * used to delegate ownership of a contract to another address, to save on unneeded transactions to approve contract use for users */ contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract MetaversePlayers is ERC721Enum, Ownable, ReentrancyGuard { using Strings for uint256; using MerkleProof for bytes32[]; string public baseURI; //sale settings uint256 public SALE_START_TIMESTAMP = 1649894400; // time when sale starts - NOT FINAL VALUE - TBC uint256 public SALE_END_TIMESTAMP = SALE_START_TIMESTAMP + (86400 * 10); // time when sale ends - NOT FINAL VALUE - TBC uint256 public price = 0.06 ether; // NOT FINAL VALUE - TBC uint256 public maxSupply = 10000; // NOT FINAL VALUE - TBC uint256 public reserved = 300; // 300 NFTs reserved for vault - NOT FINAL VALUE - TBC uint256 public maxPerTx = 10; // max per transaction - NOT FINAL VALUE - TBC uint256 public ambassadorAllowance = 2; // max per ambassador uint256 public allowancePerWallet = 5; // max mintable per wallet - NOT FINAL VALUE - TBC mapping(address => uint256) public purchases; // mapping of mints per address mapping(address => uint256) public ambassadorPurchases; // mapping of ambassador mints per address bool public signatureMode = false; // enable allowlist minting via signature bool public salePaused = false; bool public enableAmbassadorSale = true; bool public enableAllowlistSale = false; bool public enablePublicSale = false; // allowlist address public constant ALLOWLIST_SIGNER = 0x303B711240cF0C4ec9903DF6410B904E0f8E67e9; string _name = "Metaverse Players"; string _symbol = "MetaversePlayers"; string _initBaseURI = "https://houseoffirst.com:1335/metaverseplayers/opensea/"; bytes32 merkleRoot; address public proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; // OpenSea Mainnet Proxy Registry address constructor() ERC721P(_name, _symbol) { setBaseURI(_initBaseURI); } function _baseURI() internal view virtual returns (string memory) { return baseURI; } function getPurchases(address addr) external view returns (uint256) { return purchases[addr]; } function getAmbassadorPurchases(address addr) external view returns (uint256) { return ambassadorPurchases[addr]; } function getTotalPurchases(address addr) external view returns (uint256) { return purchases[addr] + ambassadorPurchases[addr]; } function mintingHasStarted() public view returns (bool) { return block.timestamp > SALE_START_TIMESTAMP; } function mintingHasEnded() public view returns (bool) { return block.timestamp > SALE_END_TIMESTAMP; } function getMaxSupply() public view returns (uint256) { return maxSupply; } function getAvailableMaxSupply() public view returns (uint256) { return maxSupply - reserved; } function mintingIsActive() public view returns (bool) { bool timeOk = mintingHasStarted() && !mintingHasEnded(); bool notSoldOut = _owners.length <= getAvailableMaxSupply(); return timeOk && notSoldOut; } function getAllowancePerWallet() public view returns (uint256) { return allowancePerWallet; } function getNFTPrice() public view returns (uint256) { return price; } /* allowlist */ function isAllowlisted(address user, bytes memory signature) public pure returns (bool) { bytes32 messageHash = keccak256(abi.encodePacked(user)); bytes32 ethSignedMessageHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash)); return recoverSigner(ethSignedMessageHash, signature) == ALLOWLIST_SIGNER; } function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) private pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_ethSignedMessageHash, v, r, s); } function splitSignature(bytes memory sig) private pure returns (bytes32 r, bytes32 s, uint8 v) { require(sig.length == 65, "invalid signature length"); assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } } function _leaf(string memory allowance, string memory payload) internal pure returns (bytes32) { return keccak256(abi.encodePacked(payload, allowance)); } function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns (bool) { return MerkleProof.verify(proof, merkleRoot, leaf); } function getAllowance(string memory allowance, bytes32[] calldata proof) public view returns (string memory) { string memory payload = string(abi.encodePacked(msg.sender)); require(_verify(_leaf(allowance, payload), proof), "Invalid Merkle Tree proof supplied."); return allowance; } /** * public mint nfts (no signature required) */ function mintNFT(uint256 numberOfNfts) public payable nonReentrant { require(!salePaused && enablePublicSale, "Sale paused or public sale disabled"); require(block.timestamp > SALE_START_TIMESTAMP, "Sale has not started"); require(block.timestamp < SALE_END_TIMESTAMP, "Sale has ended"); uint256 s = _owners.length; require(numberOfNfts > 0 && numberOfNfts <= maxPerTx, "Invalid numberOfNfts"); require((s + numberOfNfts) <= (maxSupply - reserved), "Exceeds Max Supply"); require(msg.value >= price * numberOfNfts, "Not Enough ETH"); require(purchases[msg.sender] + numberOfNfts <= allowancePerWallet, "Exceeds Allocation"); purchases[msg.sender] += numberOfNfts; for (uint256 i = 0; i < numberOfNfts; ++i) { _mint(msg.sender, s + i); } delete s; } /** * allowlist mint nfts (signature required) */ function allowlistMintNFT(uint256 numberOfNfts, uint256 allowance, bytes32[] memory proof, bytes memory signature) public payable nonReentrant { require(!salePaused && enableAllowlistSale, "Sale Paused"); require(block.timestamp > SALE_START_TIMESTAMP, "Sale has not started"); require(block.timestamp < SALE_END_TIMESTAMP, "Sale has ended"); require(msg.value >= price * numberOfNfts, "Not Enough ETH"); if(signatureMode) { // use signature for allowlist validation allowance = allowancePerWallet; require(isAllowlisted(msg.sender, signature), "Address not allowlisted"); } else { // use merkle tree for allowlist validation string memory payload = string(abi.encodePacked(msg.sender)); require(_verify(_leaf(Strings.toString(allowance), payload), proof), "Address not allowlisted"); delete payload; } uint256 s = _owners.length; require(numberOfNfts > 0 && numberOfNfts <= maxPerTx, "Invalid numberOfNfts"); require((s + numberOfNfts) <= (maxSupply - reserved), "Exceeds Max Supply"); require(purchases[msg.sender] + numberOfNfts <= allowance, "Exceeds Allocation"); purchases[msg.sender] += numberOfNfts; for (uint256 i = 0; i < numberOfNfts; ++i) { _mint(msg.sender, s + i); } delete s; } /** * ambassador mint nfts (signature required) */ function ambassadorMintNFT(uint256 numberOfNfts, bytes memory signature) public payable nonReentrant { require(!salePaused && enableAmbassadorSale, "Sale Paused"); require(isAllowlisted(msg.sender, signature), "Address not allowlisted"); uint256 s = _owners.length; require(numberOfNfts > 0 && numberOfNfts <= maxPerTx, "Invalid numberOfNfts"); require((s + numberOfNfts) <= (maxSupply - reserved), "Exceeds Max Supply"); require(ambassadorPurchases[msg.sender] + numberOfNfts <= ambassadorAllowance, "Exceeds Allocation"); ambassadorPurchases[msg.sender] += numberOfNfts; for (uint256 i = 0; i < numberOfNfts; ++i) { _mint(msg.sender, s + i); } delete s; } /** * admin minting for reserved nfts (callable by Owner only) */ function giftNFT(uint256[] calldata quantity, address[] calldata recipient) external onlyOwner { require(quantity.length == recipient.length, "Invalid quantities and recipients (length mismatch)"); uint256 totalQuantity = 0; uint256 s = _owners.length; for (uint256 i = 0; i < quantity.length; ++i) { totalQuantity += quantity[i]; } require(s + totalQuantity <= maxSupply, "Exceeds Max Supply"); require(totalQuantity <= reserved, "Exceeds Max Reserved"); // update remaining reserved count reserved -= totalQuantity; delete totalQuantity; for (uint256 i = 0; i < recipient.length; ++i) { for (uint256 j = 0; j < quantity[i]; ++j) { _mint(recipient[i], s++); } } delete s; } /** * admin minting for reserved nfts - sets purchases[recipient] (callable by Owner only) */ function giftNFTPurchases(uint256[] calldata quantity, address[] calldata recipient) external onlyOwner { require(quantity.length == recipient.length, "Invalid quantities and recipients (length mismatch)"); uint256 totalQuantity = 0; uint256 s = _owners.length; for (uint256 i = 0; i < quantity.length; ++i) { totalQuantity += quantity[i]; } require(s + totalQuantity <= maxSupply, "Exceeds Max Supply"); require(totalQuantity <= reserved, "Exceeds Max Reserved"); // update remaining reserved count reserved -= totalQuantity; delete totalQuantity; for (uint256 i = 0; i < recipient.length; ++i) { purchases[recipient[i]] += quantity[i]; for (uint256 j = 0; j < quantity[i]; ++j) { _mint(recipient[i], s++); } } delete s; } /** * admin ambassador minting for reserved nfts (callable by Owner only) */ function airdropToAmbassador(uint256 quantity, address recipient) external onlyOwner { require(ambassadorPurchases[recipient] + quantity <= ambassadorAllowance, "Exceeds ambassador allowance"); uint256 s = _owners.length; require(s + quantity <= maxSupply, "Exceeds Max Supply"); require(quantity <= reserved, "Exceeds Max Reserved"); // update remaining reserved count reserved -= quantity; ambassadorPurchases[recipient] += quantity; for (uint256 i = 0; i < quantity; ++i) { _mint(recipient, s++); } delete s; } function _mint(address to, uint256 tokenId) internal virtual override { _owners.push(to); emit Transfer(address(0), to, tokenId); } function batchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public { for (uint256 i = 0; i < _tokenIds.length; i++) { transferFrom(_from, _to, _tokenIds[i]); } } function multiTransfer(uint256[] calldata tokenIds, address[] calldata recipient) external onlyOwner { require(tokenIds.length == recipient.length, "Invalid tokenIds and recipients (length mismatch)"); for (uint256 i = 0; i < recipient.length; ++i) { for (uint256 j = 0; j < tokenIds[i]; ++j) { transferFrom(msg.sender, recipient[i], tokenIds[i]); } } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: Nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : ""; } function setMerkleRoot(bytes32 root) public onlyOwner { merkleRoot = root; } function setPurchases(address _addr, uint256 _purchases) public onlyOwner { purchases[_addr] = _purchases; } function setAmbassadorPurchases(address _addr, uint256 _purchases) public onlyOwner { ambassadorPurchases[_addr] = _purchases; } function setPrice(uint256 _newPrice) public onlyOwner { price = _newPrice; } function setReserved(uint256 _reserved) public onlyOwner { reserved = _reserved; } function setMaxPerTx(uint256 _maxPerTx) public onlyOwner { maxPerTx = _maxPerTx; } function setAmbassadorAllowance(uint256 _newAllowance) public onlyOwner { ambassadorAllowance = _newAllowance; } function setAllowancePerWallet(uint256 _allowancePerWallet) public onlyOwner { allowancePerWallet = _allowancePerWallet; } function setMaxSupply(uint256 _newMaxSupply) public onlyOwner { maxSupply = _newMaxSupply; } /** * adjusts number of reserved nfts to psuedo limit supply (callable by Owner only) * example: if maxSupply = 10000 & supplyCap = 4000 then set reserved = 6000 (maxSupply - supplyCap) */ function setSupplyCap(uint256 _supplyCap) public onlyOwner { require(_supplyCap <= maxSupply, "Supply cap exceeds max supply"); reserved = maxSupply - _supplyCap; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setSalePaused(bool _salePaused) public onlyOwner { salePaused = _salePaused; } function setEnablePublicSale(bool _enablePublicSale) public onlyOwner { enablePublicSale = _enablePublicSale; } function setEnableAllowlistSale(bool _enableAllowlistSale) public onlyOwner { enableAllowlistSale = _enableAllowlistSale; } function setEnableAmbassadorSale(bool _enableAmbassadorSale) public onlyOwner { enableAmbassadorSale = _enableAmbassadorSale; } function setSignatureMode(bool _mode) public onlyOwner { signatureMode = _mode; } function setSaleStartTimestamp(uint256 _timestamp) public onlyOwner { SALE_START_TIMESTAMP = _timestamp; } function setSaleEndTimestamp(uint256 _timestamp) public onlyOwner { SALE_END_TIMESTAMP = _timestamp; } function setSaleStartEndTimestamp(uint256 _startTimestamp, uint256 _endTimestamp) public onlyOwner { setSaleStartTimestamp(_startTimestamp); setSaleEndTimestamp(_endTimestamp); } function setPhaseConfig(uint256 _startTimestamp, uint256 _endTimestamp, uint256 _maxPerTx, uint256 _allowancePerWallet, uint256 _supplyCap) public onlyOwner { setSaleStartEndTimestamp(_startTimestamp, _endTimestamp); setMaxPerTx(_maxPerTx); setAllowancePerWallet(_allowancePerWallet); setSupplyCap(_supplyCap); } // for transparency regarding ETH raised uint256 totalWithdrawn = 0; function getTotalWithdrawn() public view returns (uint256) { return totalWithdrawn; } function getTotalBalance() public view returns (uint256) { return address(this).balance; } function getTotalRaised() public view returns (uint256) { return getTotalWithdrawn() + getTotalBalance(); } /** * withdraw ETH from the contract (callable by Owner only) */ function withdraw() public payable onlyOwner { uint256 val = address(this).balance; (bool success, ) = payable(msg.sender).call{ value: val }(""); require(success); totalWithdrawn += val; delete val; } /** * whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll(address owner, address operator) override public view returns (bool) { // whitelist opensea proxy contract for easy trading ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.10; import "./ERC721P.sol"; import "./IERC721Enumerable.sol"; abstract contract ERC721Enum is ERC721P, IERC721Enumerable { function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) { require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 count; for (uint256 i; i < _owners.length; ++i) { if (owner == _owners[i]) { if (count == index) return i; else ++count; } } require(false, "ERC721Enum: owner ioob"); } function tokensOfOwner(address owner) public view returns (uint256[] memory) { require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 tokenCount = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(owner, i); } return tokenIds; } function totalSupply() public view virtual override returns (uint256) { return _owners.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob"); return index; } }
// SPDX-License-Identifier: GPL-3.0 // Thank you to ToyBoogers & Pagzi Tech for the optimised ERC721 pragma solidity ^0.8.10; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./ERC165.sol"; abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function getOwners() external view returns (address[] memory) { return _owners; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); uint256 count = 0; uint256 length = _owners.length; for (uint256 i = 0; i < length; ++i) { if (owner == _owners[i]) { ++count; } } delete length; return count; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721P.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721P.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _owners.push(to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721P.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721P.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721P.ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) 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. */ 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 Merklee 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) } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ALLOWLIST_SIGNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_END_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_START_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"airdropToAmbassador","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowancePerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfNfts","type":"uint256"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"allowlistMintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ambassadorAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfNfts","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"ambassadorMintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ambassadorPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllowlistSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAmbassadorSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enablePublicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"allowance","type":"string"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"getAllowance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllowancePerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAmbassadorPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNFTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getTotalPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"giftNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"giftNFTPurchases","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","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":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfNfts","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingHasEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingHasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"purchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allowancePerWallet","type":"uint256"}],"name":"setAllowancePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAllowance","type":"uint256"}],"name":"setAmbassadorAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_purchases","type":"uint256"}],"name":"setAmbassadorPurchases","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enableAllowlistSale","type":"bool"}],"name":"setEnableAllowlistSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enableAmbassadorSale","type":"bool"}],"name":"setEnableAmbassadorSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enablePublicSale","type":"bool"}],"name":"setEnablePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"uint256","name":"_endTimestamp","type":"uint256"},{"internalType":"uint256","name":"_maxPerTx","type":"uint256"},{"internalType":"uint256","name":"_allowancePerWallet","type":"uint256"},{"internalType":"uint256","name":"_supplyCap","type":"uint256"}],"name":"setPhaseConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_purchases","type":"uint256"}],"name":"setPurchases","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserved","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setSaleEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_salePaused","type":"bool"}],"name":"setSalePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"uint256","name":"_endTimestamp","type":"uint256"}],"name":"setSaleStartEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setSaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_mode","type":"bool"}],"name":"setSignatureMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signatureMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052636257640060088190556200001d90620d2f00620004c5565b60095566d529ae9e860000600a908155612710600b5561012c600c55600d556002600e556005600f556012805464ffffffffff191662010000179055604080518082019091526011808252704d657461766572736520506c617965727360781b602090920191825262000093916013916200041f565b506040805180820190915260108082526f4d6574617665727365506c617965727360801b6020909201918252620000cd916014916200041f565b5060405180606001604052806037815260200162005a90603791398051620000fe916015916020909101906200041f565b50601780546001600160a01b03191673a5409ec958c83c3f309868babaca7c86dcb077c117905560006018553480156200013757600080fd5b50601380546200014790620004ec565b80601f01602080910402602001604051908101604052809291908181526020018280546200017590620004ec565b8015620001c65780601f106200019a57610100808354040283529160200191620001c6565b820191906000526020600020905b815481529060010190602001808311620001a857829003601f168201915b505050505060148054620001da90620004ec565b80601f01602080910402602001604051908101604052809291908181526020018280546200020890620004ec565b8015620002595780601f106200022d5761010080835404028352916020019162000259565b820191906000526020600020905b8154815290600101906020018083116200023b57829003601f168201915b50508451620002739350600092506020860191506200041f565b508051620002899060019060208401906200041f565b505050620002a6620002a06200035160201b60201c565b62000355565b6001600655601580546200034b9190620002c090620004ec565b80601f0160208091040260200160405190810160405280929190818152602001828054620002ee90620004ec565b80156200033f5780601f1062000313576101008083540402835291602001916200033f565b820191906000526020600020905b8154815290600101906020018083116200032157829003601f168201915b5050620003a792505050565b62000529565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b80516200041b9060079060208401906200041f565b5050565b8280546200042d90620004ec565b90600052602060002090601f0160209004810192826200045157600085556200049c565b82601f106200046c57805160ff19168380011785556200049c565b828001600101855582156200049c579182015b828111156200049c5782518255916020019190600101906200047f565b50620004aa929150620004ae565b5090565b5b80821115620004aa5760008155600101620004af565b60008219821115620004e757634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200050157607f821691505b602082108114156200052357634e487b7160e01b600052602260045260246000fd5b50919050565b61555780620005396000396000f3fe6080604052600436106105945760003560e01c806383fde87d116102e0578063b6a3f59a11610184578063d45a0237116100e1578063f686788311610095578063fc8cc4591161006f578063fc8cc45914610f4f578063fe60d12c14610f6f578063ff8abd1f14610f8557600080fd5b8063f686788314610f0a578063f968adbe14610f24578063fb107a4f14610f3a57600080fd5b8063e985e9c5116100c6578063e985e9c514610eaa578063f2fde38b14610eca578063f3993d1114610eea57600080fd5b8063d45a023714610e74578063d5abeb0114610e9457600080fd5b8063c29af27411610138578063c87b56dd1161011d578063c87b56dd14610e10578063caca28ad14610e30578063cd7c032614610e4757600080fd5b8063c29af27414610dd0578063c6f6f21614610df057600080fd5b8063badf8ec411610169578063badf8ec414610d7b578063c0d42d9614610d90578063c215600d14610db057600080fd5b8063b6a3f59a14610d3b578063b88d4fde14610d5b57600080fd5b8063928d63a41161023d5780639f550293116101f1578063a22cb465116101cb578063a22cb46514610cce578063a391f14d14610cee578063ad7c039e14610d1b57600080fd5b80639f55029314610c81578063a035b1fe14610c96578063a0e67e2b14610cac57600080fd5b806395d89b411161022257806395d89b4114610c095780639c14727814610c1e5780639ca1ac8f14610c6157600080fd5b8063928d63a414610bd3578063946807fd14610bf357600080fd5b80638d92becd116102945780638f5bbf1d116102795780638f5bbf1d14610b8057806391b7f5ed14610ba05780639264274414610bc057600080fd5b80638d92becd14610b355780638da5cb5b14610b5557600080fd5b80638462151c116102c55780638462151c14610ae057806384724c6014610b0d57806389404a7914610b2057600080fd5b806383fde87d14610a93578063842a77d314610ab357600080fd5b80634728b9f4116104475780636352211e116103a457806370a08231116103585780637666de76116103325780637666de7614610a365780637cb6475914610a4b5780637e79c72314610a6b57600080fd5b806370a08231146109be57806370cd5a80146109de578063715018a614610a2157600080fd5b80636c0360eb116103895780636c0360eb146109765780636f8b44b01461098b578063704103c6146109ab57600080fd5b80636352211e1461093657806366fddfa91461095657600080fd5b806350cee227116103fb57806355f804b3116103e057806355f804b3146108d757806357591dfc146108f75780635d08c1ae1461091757600080fd5b806350cee227146108a057806354964d27146108c057600080fd5b80634be3ca0e1161042c5780634be3ca0e1461084a5780634c0f38c21461086b5780634f6ccce71461088057600080fd5b80634728b9f414610815578063472efe381461082a57600080fd5b80632316b4da116104f5578063371e6f99116104a95780633db82fb51161048e5780633db82fb5146107bf5780634210830d146107df57806342842e0e146107f557600080fd5b8063371e6f99146107a15780633ccfd60b146107b757600080fd5b80632d6e71b6116104da5780632d6e71b6146107415780632f745c59146107615780632f9eca871461078157600080fd5b80632316b4da146106ff57806323b872dd1461072157600080fd5b806312b583491161054c5780631ddf3a37116105315780631ddf3a37146106a9578063219c4882146106c957806322299799146106e957600080fd5b806312b583491461067757806318160ddd1461069457600080fd5b8063081812fc1161057d578063081812fc146105f0578063095ea7b3146106355780630bcecf291461065757600080fd5b806301ffc9a71461059957806306fdde03146105ce575b600080fd5b3480156105a557600080fd5b506105b96105b4366004614ab2565b610fa5565b60405190151581526020015b60405180910390f35b3480156105da57600080fd5b506105e3611001565b6040516105c59190614b45565b3480156105fc57600080fd5b5061061061060b366004614b58565b611093565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016105c5565b34801561064157600080fd5b50610655610650366004614b93565b61113e565b005b34801561066357600080fd5b506012546105b99062010000900460ff1681565b34801561068357600080fd5b50475b6040519081526020016105c5565b3480156106a057600080fd5b50600254610686565b3480156106b557600080fd5b506106556106c4366004614b93565b611297565b3480156106d557600080fd5b506106556106e4366004614b93565b611327565b3480156106f557600080fd5b50610686600f5481565b34801561070b57600080fd5b506012546105b990640100000000900460ff1681565b34801561072d57600080fd5b5061065561073c366004614bbf565b6113b7565b34801561074d57600080fd5b5061065561075c366004614b58565b61143e565b34801561076d57600080fd5b5061068661077c366004614b93565b6114aa565b34801561078d57600080fd5b5061065561079c366004614c4c565b6115c6565b3480156107ad57600080fd5b50610686600e5481565b610655611741565b3480156107cb57600080fd5b506106556107da366004614b58565b61181a565b3480156107eb57600080fd5b5061068660095481565b34801561080157600080fd5b50610655610810366004614bbf565b611886565b34801561082157600080fd5b506105b96118a1565b34801561083657600080fd5b50610655610845366004614ccd565b6118e1565b34801561085657600080fd5b506012546105b9906301000000900460ff1681565b34801561087757600080fd5b50600b54610686565b34801561088c57600080fd5b5061068661089b366004614b58565b611979565b3480156108ac57600080fd5b506105b96108bb366004614df4565b6119d6565b3480156108cc57600080fd5b5060085442116105b9565b3480156108e357600080fd5b506106556108f2366004614e44565b611aa8565b34801561090357600080fd5b50610655610912366004614ccd565b611b26565b34801561092357600080fd5b506012546105b990610100900460ff1681565b34801561094257600080fd5b50610610610951366004614b58565b611bc5565b34801561096257600080fd5b506105e3610971366004614e79565b611c72565b34801561098257600080fd5b506105e3611d84565b34801561099757600080fd5b506106556109a6366004614b58565b611e12565b6106556109b9366004614f06565b611e7e565b3480156109ca57600080fd5b506106866109d9366004614fd9565b6122ea565b3480156109ea57600080fd5b506106866109f9366004614fd9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526010602052604090205490565b348015610a2d57600080fd5b506106556123e9565b348015610a4257600080fd5b5061068661245c565b348015610a5757600080fd5b50610655610a66366004614b58565b612473565b348015610a7757600080fd5b5061061073303b711240cf0c4ec9903df6410b904e0f8e67e981565b348015610a9f57600080fd5b50610655610aae366004614ff6565b6124df565b348015610abf57600080fd5b50610686610ace366004614fd9565b60106020526000908152604090205481565b348015610aec57600080fd5b50610b00610afb366004614fd9565b61256b565b6040516105c59190615031565b610655610b1b366004615075565b612665565b348015610b2c57600080fd5b50601854610686565b348015610b4157600080fd5b50610655610b50366004614ccd565b61290c565b348015610b6157600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff16610610565b348015610b8c57600080fd5b50610655610b9b3660046150a6565b6129aa565b348015610bac57600080fd5b50610655610bbb366004614b58565b612bcb565b610655610bce366004614b58565b612c37565b348015610bdf57600080fd5b50610655610bee366004614ccd565b612fae565b348015610bff57600080fd5b5061068660085481565b348015610c1557600080fd5b506105e361304e565b348015610c2a57600080fd5b50610686610c39366004614fd9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526011602052604090205490565b348015610c6d57600080fd5b50610655610c7c366004614c4c565b61305d565b348015610c8d57600080fd5b5061068661336e565b348015610ca257600080fd5b50610686600a5481565b348015610cb857600080fd5b50610cc161337e565b6040516105c591906150d6565b348015610cda57600080fd5b50610655610ce9366004615124565b6133ec565b348015610cfa57600080fd5b50610686610d09366004614fd9565b60116020526000908152604090205481565b348015610d2757600080fd5b50610655610d36366004614b58565b6134e9565b348015610d4757600080fd5b50610655610d56366004614b58565b613555565b348015610d6757600080fd5b50610655610d76366004615159565b613622565b348015610d8757600080fd5b50600f54610686565b348015610d9c57600080fd5b50610655610dab3660046151b9565b6136aa565b348015610dbc57600080fd5b50610686610dcb366004614fd9565b613723565b348015610ddc57600080fd5b50610655610deb366004614c4c565b61375e565b348015610dfc57600080fd5b50610655610e0b366004614b58565b6139ad565b348015610e1c57600080fd5b506105e3610e2b366004614b58565b613a19565b348015610e3c57600080fd5b5060095442116105b9565b348015610e5357600080fd5b506017546106109073ffffffffffffffffffffffffffffffffffffffff1681565b348015610e8057600080fd5b50610655610e8f366004614b58565b613af2565b348015610ea057600080fd5b50610686600b5481565b348015610eb657600080fd5b506105b9610ec53660046151db565b613b5e565b348015610ed657600080fd5b50610655610ee5366004614fd9565b613c5f565b348015610ef657600080fd5b50610655610f05366004615209565b613d5b565b348015610f1657600080fd5b506012546105b99060ff1681565b348015610f3057600080fd5b50610686600d5481565b348015610f4657600080fd5b50600a54610686565b348015610f5b57600080fd5b50610655610f6a366004614ccd565b613d9d565b348015610f7b57600080fd5b50610686600c5481565b348015610f9157600080fd5b50610655610fa0366004614b58565b613e3e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610ffb5750610ffb82613eaa565b92915050565b606060008054611010906152c1565b80601f016020809104026020016040519081016040528092919081815260200182805461103c906152c1565b80156110895780601f1061105e57610100808354040283529160200191611089565b820191906000526020600020905b81548152906001019060200180831161106c57829003601f168201915b5050505050905090565b600061109e82613f8d565b6111155760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061114982611bc5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111ed5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161110c565b3373ffffffffffffffffffffffffffffffffffffffff8216148061121657506112168133613b5e565b6112885760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161110c565b6112928383613ff1565b505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146112fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260106020526040902055565b60055473ffffffffffffffffffffffffffffffffffffffff16331461138e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260116020526040902055565b6113c13382614091565b6114335760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161110c565b611292838383614198565b60055473ffffffffffffffffffffffffffffffffffffffff1633146114a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600c55565b60006114b5836122ea565b82106115035760405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f6200000000000000000000604482015260640161110c565b6000805b60025481101561157d576002818154811061152457611524615315565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff8681169116141561156d5783821415611561579150610ffb9050565b61156a82615373565b91505b61157681615373565b9050611507565b5060405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f6200000000000000000000604482015260640161110c565b60055473ffffffffffffffffffffffffffffffffffffffff16331461162d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b8281146116a25760405162461bcd60e51b815260206004820152603160248201527f496e76616c696420746f6b656e49647320616e6420726563697069656e74732060448201527f286c656e677468206d69736d6174636829000000000000000000000000000000606482015260840161110c565b60005b8181101561173a5760005b8585838181106116c2576116c2615315565b9050602002013581101561172957611719338585858181106116e6576116e6615315565b90506020020160208101906116fb9190614fd9565b88888681811061170d5761170d615315565b905060200201356113b7565b61172281615373565b90506116b0565b5061173381615373565b90506116a5565b5050505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146117a85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b6040514790600090339083908381818185875af1925050503d80600081146117ec576040519150601f19603f3d011682016040523d82523d6000602084013e6117f1565b606091505b50509050806117ff57600080fd5b816018600082825461181191906153ac565b90915550505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146118815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600855565b61129283838360405180602001604052806000815250613622565b6000806118af600854421190565b80156118bd57506009544211155b905060006118c961245c565b600254111590508180156118da5750805b9250505090565b60055473ffffffffffffffffffffffffffffffffffffffff1633146119485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600061198460025490565b82106119d25760405162461bcd60e51b815260206004820152601760248201527f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000604482015260640161110c565b5090565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16602080830191909152825180830360140181526034830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006054840152607080840182905284518085039091018152609090930190935281519101206000919073303b711240cf0c4ec9903df6410b904e0f8e67e9611a888286614367565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611b0f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b8051611b229060079060208401906149f4565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611b8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b6012805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60008060028381548110611bdb57611bdb615315565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905080610ffb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015260840161110c565b6060600033604051602001611cb2919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b6040516020818303038152906040529050611d09611cd08683614404565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061443792505050565b611d7b5760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65642e0000000000000000000000000000000000000000000000000000000000606482015260840161110c565b50929392505050565b60078054611d91906152c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611dbd906152c1565b8015611e0a5780601f10611ddf57610100808354040283529160200191611e0a565b820191906000526020600020905b815481529060010190602001808311611ded57829003601f168201915b505050505081565b60055473ffffffffffffffffffffffffffffffffffffffff163314611e795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600b55565b60026006541415611ed15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161110c565b6002600655601254610100900460ff16158015611ef757506012546301000000900460ff165b611f435760405162461bcd60e51b815260206004820152600b60248201527f53616c6520506175736564000000000000000000000000000000000000000000604482015260640161110c565b6008544211611f945760405162461bcd60e51b815260206004820152601460248201527f53616c6520686173206e6f742073746172746564000000000000000000000000604482015260640161110c565b6009544210611fe55760405162461bcd60e51b815260206004820152600e60248201527f53616c652068617320656e646564000000000000000000000000000000000000604482015260640161110c565b83600a54611ff391906153c4565b3410156120425760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420456e6f75676820455448000000000000000000000000000000000000604482015260640161110c565b60125460ff16156120ad57600f54925061205c33826119d6565b6120a85760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420616c6c6f776c6973746564000000000000000000604482015260640161110c565b612157565b604080513360601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201528151601481830301815260349091019091526121096121036120fd86614446565b83614404565b84614437565b6121555760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420616c6c6f776c6973746564000000000000000000604482015260640161110c565b505b600254841580159061216b5750600d548511155b6121b75760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e667473000000000000000000000000604482015260640161110c565b600c54600b546121c79190615401565b6121d186836153ac565b111561221f5760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b33600090815260106020526040902054849061223c9087906153ac565b111561228a5760405162461bcd60e51b815260206004820152601260248201527f4578636565647320416c6c6f636174696f6e0000000000000000000000000000604482015260640161110c565b33600090815260106020526040812080548792906122a99084906153ac565b90915550600090505b858110156122dd576122cd336122c883856153ac565b614578565b6122d681615373565b90506122b2565b5050600160065550505050565b600073ffffffffffffffffffffffffffffffffffffffff82166123755760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015260840161110c565b600254600090815b818110156123e0576002818154811061239857612398615315565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff868116911614156123d0576123cd83615373565b92505b6123d981615373565b905061237d565b50909392505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146124505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b61245a6000614619565b565b6000600c54600b5461246e9190615401565b905090565b60055473ffffffffffffffffffffffffffffffffffffffff1633146124da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b601655565b60055473ffffffffffffffffffffffffffffffffffffffff1633146125465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b61255085856136aa565b612559836139ad565b61256282613af2565b61173a81613555565b6060612576826122ea565b6000106125c55760405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f6200000000000000000000604482015260640161110c565b60006125d0836122ea565b905060008167ffffffffffffffff8111156125ed576125ed614ce8565b604051908082528060200260200182016040528015612616578160200160208202803683370190505b50905060005b8281101561265d5761262e85826114aa565b82828151811061264057612640615315565b60209081029190910101528061265581615373565b91505061261c565b509392505050565b600260065414156126b85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161110c565b6002600655601254610100900460ff161580156126dd575060125462010000900460ff165b6127295760405162461bcd60e51b815260206004820152600b60248201527f53616c6520506175736564000000000000000000000000000000000000000000604482015260640161110c565b61273333826119d6565b61277f5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420616c6c6f776c6973746564000000000000000000604482015260640161110c565b60025482158015906127935750600d548311155b6127df5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e667473000000000000000000000000604482015260640161110c565b600c54600b546127ef9190615401565b6127f984836153ac565b11156128475760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b600e54336000908152601160205260409020546128659085906153ac565b11156128b35760405162461bcd60e51b815260206004820152601260248201527f4578636565647320416c6c6f636174696f6e0000000000000000000000000000604482015260640161110c565b33600090815260116020526040812080548592906128d29084906153ac565b90915550600090505b83811015612901576128f1336122c883856153ac565b6128fa81615373565b90506128db565b505060016006555050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146129735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b60128054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff163314612a115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600e5473ffffffffffffffffffffffffffffffffffffffff8216600090815260116020526040902054612a459084906153ac565b1115612a935760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320616d6261737361646f7220616c6c6f77616e636500000000604482015260640161110c565b600254600b54612aa384836153ac565b1115612af15760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b600c54831115612b435760405162461bcd60e51b815260206004820152601460248201527f45786365656473204d6178205265736572766564000000000000000000000000604482015260640161110c565b82600c6000828254612b559190615401565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526011602052604081208054859290612b8f9084906153ac565b90915550600090505b83811015612bc557612bb58383612bae81615373565b9450614578565b612bbe81615373565b9050612b98565b50505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314612c325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600a55565b60026006541415612c8a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161110c565b6002600655601254610100900460ff16158015612cb15750601254640100000000900460ff165b612d235760405162461bcd60e51b815260206004820152602360248201527f53616c6520706175736564206f72207075626c69632073616c6520646973616260448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161110c565b6008544211612d745760405162461bcd60e51b815260206004820152601460248201527f53616c6520686173206e6f742073746172746564000000000000000000000000604482015260640161110c565b6009544210612dc55760405162461bcd60e51b815260206004820152600e60248201527f53616c652068617320656e646564000000000000000000000000000000000000604482015260640161110c565b6002548115801590612dd95750600d548211155b612e255760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e667473000000000000000000000000604482015260640161110c565b600c54600b54612e359190615401565b612e3f83836153ac565b1115612e8d5760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b81600a54612e9b91906153c4565b341015612eea5760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420456e6f75676820455448000000000000000000000000000000000000604482015260640161110c565b600f5433600090815260106020526040902054612f089084906153ac565b1115612f565760405162461bcd60e51b815260206004820152601260248201527f4578636565647320416c6c6f636174696f6e0000000000000000000000000000604482015260640161110c565b3360009081526010602052604081208054849290612f759084906153ac565b90915550600090505b82811015612fa457612f94336122c883856153ac565b612f9d81615373565b9050612f7e565b5050600160065550565b60055473ffffffffffffffffffffffffffffffffffffffff1633146130155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b601280549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b606060018054611010906152c1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146130c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b8281146131395760405162461bcd60e51b815260206004820152603360248201527f496e76616c6964207175616e74697469657320616e6420726563697069656e7460448201527f7320286c656e677468206d69736d617463682900000000000000000000000000606482015260840161110c565b600254600090815b8581101561317f5786868281811061315b5761315b615315565b905060200201358361316d91906153ac565b925061317881615373565b9050613141565b50600b5461318d83836153ac565b11156131db5760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b600c5482111561322d5760405162461bcd60e51b815260206004820152601460248201527f45786365656473204d6178205265736572766564000000000000000000000000604482015260640161110c565b81600c600082825461323f9190615401565b90915550600092508290505b838110156133655786868281811061326557613265615315565b905060200201356010600087878581811061328257613282615315565b90506020020160208101906132979190614fd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132e091906153ac565b90915550600090505b8787838181106132fb576132fb615315565b905060200201358110156133545761334486868481811061331e5761331e615315565b90506020020160208101906133339190614fd9565b8461333d81615373565b9550614578565b61334d81615373565b90506132e9565b5061335e81615373565b905061324b565b50505050505050565b60004760185461246e91906153ac565b6060600280548060200260200160405190810160405280929190818152602001828054801561108957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116133b8575050505050905090565b73ffffffffffffffffffffffffffffffffffffffff82163314156134525760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161110c565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146135505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600955565b60055473ffffffffffffffffffffffffffffffffffffffff1633146135bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600b5481111561360e5760405162461bcd60e51b815260206004820152601d60248201527f537570706c79206361702065786365656473206d617820737570706c79000000604482015260640161110c565b80600b5461361c9190615401565b600c5550565b61362c3383614091565b61369e5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161110c565b612bc584848484614690565b60055473ffffffffffffffffffffffffffffffffffffffff1633146137115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b61371a8261181a565b611b22816134e9565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601160209081526040808320546010909252822054610ffb91906153ac565b60055473ffffffffffffffffffffffffffffffffffffffff1633146137c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b82811461383a5760405162461bcd60e51b815260206004820152603360248201527f496e76616c6964207175616e74697469657320616e6420726563697069656e7460448201527f7320286c656e677468206d69736d617463682900000000000000000000000000606482015260840161110c565b600254600090815b858110156138805786868281811061385c5761385c615315565b905060200201358361386e91906153ac565b925061387981615373565b9050613842565b50600b5461388e83836153ac565b11156138dc5760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b600c5482111561392e5760405162461bcd60e51b815260206004820152601460248201527f45786365656473204d6178205265736572766564000000000000000000000000604482015260640161110c565b81600c60008282546139409190615401565b90915550600092508290505b838110156133655760005b87878381811061396957613969615315565b9050602002013581101561399c5761398c86868481811061331e5761331e615315565b61399581615373565b9050613957565b506139a681615373565b905061394c565b60055473ffffffffffffffffffffffffffffffffffffffff163314613a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600d55565b6060613a2482613f8d565b613a965760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015260840161110c565b6000613aa0614719565b90506000815111613ac05760405180602001604052806000815250613aeb565b80613aca84614446565b604051602001613adb929190615418565b6040516020818303038152906040525b9392505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314613b595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600f55565b6017546040517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009281169190841690829063c455279190602401602060405180830381865afa158015613bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfa9190615447565b73ffffffffffffffffffffffffffffffffffffffff161415613c20576001915050610ffb565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314613cc65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b73ffffffffffffffffffffffffffffffffffffffff8116613d4f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161110c565b613d5881614619565b50565b60005b8151811015612bc557613d8b8484848481518110613d7e57613d7e615315565b60200260200101516113b7565b80613d9581615373565b915050613d5e565b60055473ffffffffffffffffffffffffffffffffffffffff163314613e045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b60128054911515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909216919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff163314613ea55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600e55565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480613f3d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610ffb57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610ffb565b60025460009082108015610ffb5750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110613fc757613fc7615315565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141592915050565b600081815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061404b82611bc5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061409c82613f8d565b61410e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015260840161110c565b600061411983611bc5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061418857508373ffffffffffffffffffffffffffffffffffffffff1661417084611093565b73ffffffffffffffffffffffffffffffffffffffff16145b80613c575750613c578185613b5e565b8273ffffffffffffffffffffffffffffffffffffffff166141b882611bc5565b73ffffffffffffffffffffffffffffffffffffffff16146142415760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606482015260840161110c565b73ffffffffffffffffffffffffffffffffffffffff82166142c95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161110c565b6142d4600082613ff1565b81600282815481106142e8576142e8615315565b6000918252602082200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b60008060008061437685614728565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156143d1573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151979650505050505050565b60008183604051602001614419929190615418565b60405160208183030381529060405280519060200120905092915050565b6000613aeb826016548561479c565b60608161448657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156144b0578061449a81615373565b91506144a99050600a83615493565b915061448a565b60008167ffffffffffffffff8111156144cb576144cb614ce8565b6040519080825280601f01601f1916602001820160405280156144f5576020820181803683370190505b5090505b8415613c575761450a600183615401565b9150614517600a866154a7565b6145229060306153ac565b60f81b81838151811061453757614537615315565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350614571600a86615493565b94506144f9565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61469b848484614198565b6146a7848484846147b2565b612bc55760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161110c565b606060078054611010906152c1565b6000806000835160411461477e5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604482015260640161110c565b50505060208101516040820151606090920151909260009190911a90565b6000826147a98584614988565b14949350505050565b600073ffffffffffffffffffffffffffffffffffffffff84163b1561497d576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906148299033908990889088906004016154bb565b6020604051808303816000875af1925050508015614882575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261487f91810190615504565b60015b614932573d8080156148b0576040519150601f19603f3d011682016040523d82523d6000602084013e6148b5565b606091505b50805161492a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161110c565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050613c57565b506001949350505050565b600081815b845181101561265d5760008582815181106149aa576149aa615315565b602002602001015190508083116149d057600083815260208290526040902092506149e1565b600081815260208490526040902092505b50806149ec81615373565b91505061498d565b828054614a00906152c1565b90600052602060002090601f016020900481019282614a225760008555614a68565b82601f10614a3b57805160ff1916838001178555614a68565b82800160010185558215614a68579182015b82811115614a68578251825591602001919060010190614a4d565b506119d29291505b808211156119d25760008155600101614a70565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114613d5857600080fd5b600060208284031215614ac457600080fd5b8135613aeb81614a84565b60005b83811015614aea578181015183820152602001614ad2565b83811115612bc55750506000910152565b60008151808452614b13816020860160208601614acf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613aeb6020830184614afb565b600060208284031215614b6a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114613d5857600080fd5b60008060408385031215614ba657600080fd5b8235614bb181614b71565b946020939093013593505050565b600080600060608486031215614bd457600080fd5b8335614bdf81614b71565b92506020840135614bef81614b71565b929592945050506040919091013590565b60008083601f840112614c1257600080fd5b50813567ffffffffffffffff811115614c2a57600080fd5b6020830191508360208260051b8501011115614c4557600080fd5b9250929050565b60008060008060408587031215614c6257600080fd5b843567ffffffffffffffff80821115614c7a57600080fd5b614c8688838901614c00565b90965094506020870135915080821115614c9f57600080fd5b50614cac87828801614c00565b95989497509550505050565b80358015158114614cc857600080fd5b919050565b600060208284031215614cdf57600080fd5b613aeb82614cb8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d5e57614d5e614ce8565b604052919050565b600082601f830112614d7757600080fd5b813567ffffffffffffffff811115614d9157614d91614ce8565b614dc260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614d17565b818152846020838601011115614dd757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614e0757600080fd5b8235614e1281614b71565b9150602083013567ffffffffffffffff811115614e2e57600080fd5b614e3a85828601614d66565b9150509250929050565b600060208284031215614e5657600080fd5b813567ffffffffffffffff811115614e6d57600080fd5b613c5784828501614d66565b600080600060408486031215614e8e57600080fd5b833567ffffffffffffffff80821115614ea657600080fd5b614eb287838801614d66565b94506020860135915080821115614ec857600080fd5b50614ed586828701614c00565b9497909650939450505050565b600067ffffffffffffffff821115614efc57614efc614ce8565b5060051b60200190565b60008060008060808587031215614f1c57600080fd5b843593506020808601359350604086013567ffffffffffffffff80821115614f4357600080fd5b818801915088601f830112614f5757600080fd5b8135614f6a614f6582614ee2565b614d17565b81815260059190911b8301840190848101908b831115614f8957600080fd5b938501935b82851015614fa757843582529385019390850190614f8e565b965050506060880135925080831115614fbf57600080fd5b5050614fcd87828801614d66565b91505092959194509250565b600060208284031215614feb57600080fd5b8135613aeb81614b71565b600080600080600060a0868803121561500e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6020808252825182820181905260009190848201906040850190845b818110156150695783518352928401929184019160010161504d565b50909695505050505050565b6000806040838503121561508857600080fd5b82359150602083013567ffffffffffffffff811115614e2e57600080fd5b600080604083850312156150b957600080fd5b8235915060208301356150cb81614b71565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561506957835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016150f2565b6000806040838503121561513757600080fd5b823561514281614b71565b915061515060208401614cb8565b90509250929050565b6000806000806080858703121561516f57600080fd5b843561517a81614b71565b9350602085013561518a81614b71565b925060408501359150606085013567ffffffffffffffff8111156151ad57600080fd5b614fcd87828801614d66565b600080604083850312156151cc57600080fd5b50508035926020909101359150565b600080604083850312156151ee57600080fd5b82356151f981614b71565b915060208301356150cb81614b71565b60008060006060848603121561521e57600080fd5b833561522981614b71565b925060208481013561523a81614b71565b9250604085013567ffffffffffffffff81111561525657600080fd5b8501601f8101871361526757600080fd5b8035615275614f6582614ee2565b81815260059190911b8201830190838101908983111561529457600080fd5b928401925b828410156152b257833582529284019290840190615299565b80955050505050509250925092565b600181811c908216806152d557607f821691505b6020821081141561530f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153a5576153a5615344565b5060010190565b600082198211156153bf576153bf615344565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153fc576153fc615344565b500290565b60008282101561541357615413615344565b500390565b6000835161542a818460208801614acf565b83519083019061543e818360208801614acf565b01949350505050565b60006020828403121561545957600080fd5b8151613aeb81614b71565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826154a2576154a2615464565b500490565b6000826154b6576154b6615464565b500690565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526154fa6080830184614afb565b9695505050505050565b60006020828403121561551657600080fd5b8151613aeb81614a8456fea2646970667358221220c3e6651d8a507b796c46e777d6e640a0336a626ff24f6d44c4ef3fff5839805164736f6c634300080b003368747470733a2f2f686f7573656f6666697273742e636f6d3a313333352f6d6574617665727365706c61796572732f6f70656e7365612f
Deployed Bytecode
0x6080604052600436106105945760003560e01c806383fde87d116102e0578063b6a3f59a11610184578063d45a0237116100e1578063f686788311610095578063fc8cc4591161006f578063fc8cc45914610f4f578063fe60d12c14610f6f578063ff8abd1f14610f8557600080fd5b8063f686788314610f0a578063f968adbe14610f24578063fb107a4f14610f3a57600080fd5b8063e985e9c5116100c6578063e985e9c514610eaa578063f2fde38b14610eca578063f3993d1114610eea57600080fd5b8063d45a023714610e74578063d5abeb0114610e9457600080fd5b8063c29af27411610138578063c87b56dd1161011d578063c87b56dd14610e10578063caca28ad14610e30578063cd7c032614610e4757600080fd5b8063c29af27414610dd0578063c6f6f21614610df057600080fd5b8063badf8ec411610169578063badf8ec414610d7b578063c0d42d9614610d90578063c215600d14610db057600080fd5b8063b6a3f59a14610d3b578063b88d4fde14610d5b57600080fd5b8063928d63a41161023d5780639f550293116101f1578063a22cb465116101cb578063a22cb46514610cce578063a391f14d14610cee578063ad7c039e14610d1b57600080fd5b80639f55029314610c81578063a035b1fe14610c96578063a0e67e2b14610cac57600080fd5b806395d89b411161022257806395d89b4114610c095780639c14727814610c1e5780639ca1ac8f14610c6157600080fd5b8063928d63a414610bd3578063946807fd14610bf357600080fd5b80638d92becd116102945780638f5bbf1d116102795780638f5bbf1d14610b8057806391b7f5ed14610ba05780639264274414610bc057600080fd5b80638d92becd14610b355780638da5cb5b14610b5557600080fd5b80638462151c116102c55780638462151c14610ae057806384724c6014610b0d57806389404a7914610b2057600080fd5b806383fde87d14610a93578063842a77d314610ab357600080fd5b80634728b9f4116104475780636352211e116103a457806370a08231116103585780637666de76116103325780637666de7614610a365780637cb6475914610a4b5780637e79c72314610a6b57600080fd5b806370a08231146109be57806370cd5a80146109de578063715018a614610a2157600080fd5b80636c0360eb116103895780636c0360eb146109765780636f8b44b01461098b578063704103c6146109ab57600080fd5b80636352211e1461093657806366fddfa91461095657600080fd5b806350cee227116103fb57806355f804b3116103e057806355f804b3146108d757806357591dfc146108f75780635d08c1ae1461091757600080fd5b806350cee227146108a057806354964d27146108c057600080fd5b80634be3ca0e1161042c5780634be3ca0e1461084a5780634c0f38c21461086b5780634f6ccce71461088057600080fd5b80634728b9f414610815578063472efe381461082a57600080fd5b80632316b4da116104f5578063371e6f99116104a95780633db82fb51161048e5780633db82fb5146107bf5780634210830d146107df57806342842e0e146107f557600080fd5b8063371e6f99146107a15780633ccfd60b146107b757600080fd5b80632d6e71b6116104da5780632d6e71b6146107415780632f745c59146107615780632f9eca871461078157600080fd5b80632316b4da146106ff57806323b872dd1461072157600080fd5b806312b583491161054c5780631ddf3a37116105315780631ddf3a37146106a9578063219c4882146106c957806322299799146106e957600080fd5b806312b583491461067757806318160ddd1461069457600080fd5b8063081812fc1161057d578063081812fc146105f0578063095ea7b3146106355780630bcecf291461065757600080fd5b806301ffc9a71461059957806306fdde03146105ce575b600080fd5b3480156105a557600080fd5b506105b96105b4366004614ab2565b610fa5565b60405190151581526020015b60405180910390f35b3480156105da57600080fd5b506105e3611001565b6040516105c59190614b45565b3480156105fc57600080fd5b5061061061060b366004614b58565b611093565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016105c5565b34801561064157600080fd5b50610655610650366004614b93565b61113e565b005b34801561066357600080fd5b506012546105b99062010000900460ff1681565b34801561068357600080fd5b50475b6040519081526020016105c5565b3480156106a057600080fd5b50600254610686565b3480156106b557600080fd5b506106556106c4366004614b93565b611297565b3480156106d557600080fd5b506106556106e4366004614b93565b611327565b3480156106f557600080fd5b50610686600f5481565b34801561070b57600080fd5b506012546105b990640100000000900460ff1681565b34801561072d57600080fd5b5061065561073c366004614bbf565b6113b7565b34801561074d57600080fd5b5061065561075c366004614b58565b61143e565b34801561076d57600080fd5b5061068661077c366004614b93565b6114aa565b34801561078d57600080fd5b5061065561079c366004614c4c565b6115c6565b3480156107ad57600080fd5b50610686600e5481565b610655611741565b3480156107cb57600080fd5b506106556107da366004614b58565b61181a565b3480156107eb57600080fd5b5061068660095481565b34801561080157600080fd5b50610655610810366004614bbf565b611886565b34801561082157600080fd5b506105b96118a1565b34801561083657600080fd5b50610655610845366004614ccd565b6118e1565b34801561085657600080fd5b506012546105b9906301000000900460ff1681565b34801561087757600080fd5b50600b54610686565b34801561088c57600080fd5b5061068661089b366004614b58565b611979565b3480156108ac57600080fd5b506105b96108bb366004614df4565b6119d6565b3480156108cc57600080fd5b5060085442116105b9565b3480156108e357600080fd5b506106556108f2366004614e44565b611aa8565b34801561090357600080fd5b50610655610912366004614ccd565b611b26565b34801561092357600080fd5b506012546105b990610100900460ff1681565b34801561094257600080fd5b50610610610951366004614b58565b611bc5565b34801561096257600080fd5b506105e3610971366004614e79565b611c72565b34801561098257600080fd5b506105e3611d84565b34801561099757600080fd5b506106556109a6366004614b58565b611e12565b6106556109b9366004614f06565b611e7e565b3480156109ca57600080fd5b506106866109d9366004614fd9565b6122ea565b3480156109ea57600080fd5b506106866109f9366004614fd9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526010602052604090205490565b348015610a2d57600080fd5b506106556123e9565b348015610a4257600080fd5b5061068661245c565b348015610a5757600080fd5b50610655610a66366004614b58565b612473565b348015610a7757600080fd5b5061061073303b711240cf0c4ec9903df6410b904e0f8e67e981565b348015610a9f57600080fd5b50610655610aae366004614ff6565b6124df565b348015610abf57600080fd5b50610686610ace366004614fd9565b60106020526000908152604090205481565b348015610aec57600080fd5b50610b00610afb366004614fd9565b61256b565b6040516105c59190615031565b610655610b1b366004615075565b612665565b348015610b2c57600080fd5b50601854610686565b348015610b4157600080fd5b50610655610b50366004614ccd565b61290c565b348015610b6157600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff16610610565b348015610b8c57600080fd5b50610655610b9b3660046150a6565b6129aa565b348015610bac57600080fd5b50610655610bbb366004614b58565b612bcb565b610655610bce366004614b58565b612c37565b348015610bdf57600080fd5b50610655610bee366004614ccd565b612fae565b348015610bff57600080fd5b5061068660085481565b348015610c1557600080fd5b506105e361304e565b348015610c2a57600080fd5b50610686610c39366004614fd9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526011602052604090205490565b348015610c6d57600080fd5b50610655610c7c366004614c4c565b61305d565b348015610c8d57600080fd5b5061068661336e565b348015610ca257600080fd5b50610686600a5481565b348015610cb857600080fd5b50610cc161337e565b6040516105c591906150d6565b348015610cda57600080fd5b50610655610ce9366004615124565b6133ec565b348015610cfa57600080fd5b50610686610d09366004614fd9565b60116020526000908152604090205481565b348015610d2757600080fd5b50610655610d36366004614b58565b6134e9565b348015610d4757600080fd5b50610655610d56366004614b58565b613555565b348015610d6757600080fd5b50610655610d76366004615159565b613622565b348015610d8757600080fd5b50600f54610686565b348015610d9c57600080fd5b50610655610dab3660046151b9565b6136aa565b348015610dbc57600080fd5b50610686610dcb366004614fd9565b613723565b348015610ddc57600080fd5b50610655610deb366004614c4c565b61375e565b348015610dfc57600080fd5b50610655610e0b366004614b58565b6139ad565b348015610e1c57600080fd5b506105e3610e2b366004614b58565b613a19565b348015610e3c57600080fd5b5060095442116105b9565b348015610e5357600080fd5b506017546106109073ffffffffffffffffffffffffffffffffffffffff1681565b348015610e8057600080fd5b50610655610e8f366004614b58565b613af2565b348015610ea057600080fd5b50610686600b5481565b348015610eb657600080fd5b506105b9610ec53660046151db565b613b5e565b348015610ed657600080fd5b50610655610ee5366004614fd9565b613c5f565b348015610ef657600080fd5b50610655610f05366004615209565b613d5b565b348015610f1657600080fd5b506012546105b99060ff1681565b348015610f3057600080fd5b50610686600d5481565b348015610f4657600080fd5b50600a54610686565b348015610f5b57600080fd5b50610655610f6a366004614ccd565b613d9d565b348015610f7b57600080fd5b50610686600c5481565b348015610f9157600080fd5b50610655610fa0366004614b58565b613e3e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610ffb5750610ffb82613eaa565b92915050565b606060008054611010906152c1565b80601f016020809104026020016040519081016040528092919081815260200182805461103c906152c1565b80156110895780601f1061105e57610100808354040283529160200191611089565b820191906000526020600020905b81548152906001019060200180831161106c57829003601f168201915b5050505050905090565b600061109e82613f8d565b6111155760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061114982611bc5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111ed5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161110c565b3373ffffffffffffffffffffffffffffffffffffffff8216148061121657506112168133613b5e565b6112885760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161110c565b6112928383613ff1565b505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146112fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260106020526040902055565b60055473ffffffffffffffffffffffffffffffffffffffff16331461138e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260116020526040902055565b6113c13382614091565b6114335760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161110c565b611292838383614198565b60055473ffffffffffffffffffffffffffffffffffffffff1633146114a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600c55565b60006114b5836122ea565b82106115035760405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f6200000000000000000000604482015260640161110c565b6000805b60025481101561157d576002818154811061152457611524615315565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff8681169116141561156d5783821415611561579150610ffb9050565b61156a82615373565b91505b61157681615373565b9050611507565b5060405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f6200000000000000000000604482015260640161110c565b60055473ffffffffffffffffffffffffffffffffffffffff16331461162d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b8281146116a25760405162461bcd60e51b815260206004820152603160248201527f496e76616c696420746f6b656e49647320616e6420726563697069656e74732060448201527f286c656e677468206d69736d6174636829000000000000000000000000000000606482015260840161110c565b60005b8181101561173a5760005b8585838181106116c2576116c2615315565b9050602002013581101561172957611719338585858181106116e6576116e6615315565b90506020020160208101906116fb9190614fd9565b88888681811061170d5761170d615315565b905060200201356113b7565b61172281615373565b90506116b0565b5061173381615373565b90506116a5565b5050505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146117a85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b6040514790600090339083908381818185875af1925050503d80600081146117ec576040519150601f19603f3d011682016040523d82523d6000602084013e6117f1565b606091505b50509050806117ff57600080fd5b816018600082825461181191906153ac565b90915550505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146118815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600855565b61129283838360405180602001604052806000815250613622565b6000806118af600854421190565b80156118bd57506009544211155b905060006118c961245c565b600254111590508180156118da5750805b9250505090565b60055473ffffffffffffffffffffffffffffffffffffffff1633146119485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600061198460025490565b82106119d25760405162461bcd60e51b815260206004820152601760248201527f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000604482015260640161110c565b5090565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16602080830191909152825180830360140181526034830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006054840152607080840182905284518085039091018152609090930190935281519101206000919073303b711240cf0c4ec9903df6410b904e0f8e67e9611a888286614367565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611b0f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b8051611b229060079060208401906149f4565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611b8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b6012805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60008060028381548110611bdb57611bdb615315565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905080610ffb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015260840161110c565b6060600033604051602001611cb2919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b6040516020818303038152906040529050611d09611cd08683614404565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061443792505050565b611d7b5760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65642e0000000000000000000000000000000000000000000000000000000000606482015260840161110c565b50929392505050565b60078054611d91906152c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611dbd906152c1565b8015611e0a5780601f10611ddf57610100808354040283529160200191611e0a565b820191906000526020600020905b815481529060010190602001808311611ded57829003601f168201915b505050505081565b60055473ffffffffffffffffffffffffffffffffffffffff163314611e795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600b55565b60026006541415611ed15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161110c565b6002600655601254610100900460ff16158015611ef757506012546301000000900460ff165b611f435760405162461bcd60e51b815260206004820152600b60248201527f53616c6520506175736564000000000000000000000000000000000000000000604482015260640161110c565b6008544211611f945760405162461bcd60e51b815260206004820152601460248201527f53616c6520686173206e6f742073746172746564000000000000000000000000604482015260640161110c565b6009544210611fe55760405162461bcd60e51b815260206004820152600e60248201527f53616c652068617320656e646564000000000000000000000000000000000000604482015260640161110c565b83600a54611ff391906153c4565b3410156120425760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420456e6f75676820455448000000000000000000000000000000000000604482015260640161110c565b60125460ff16156120ad57600f54925061205c33826119d6565b6120a85760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420616c6c6f776c6973746564000000000000000000604482015260640161110c565b612157565b604080513360601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201528151601481830301815260349091019091526121096121036120fd86614446565b83614404565b84614437565b6121555760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420616c6c6f776c6973746564000000000000000000604482015260640161110c565b505b600254841580159061216b5750600d548511155b6121b75760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e667473000000000000000000000000604482015260640161110c565b600c54600b546121c79190615401565b6121d186836153ac565b111561221f5760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b33600090815260106020526040902054849061223c9087906153ac565b111561228a5760405162461bcd60e51b815260206004820152601260248201527f4578636565647320416c6c6f636174696f6e0000000000000000000000000000604482015260640161110c565b33600090815260106020526040812080548792906122a99084906153ac565b90915550600090505b858110156122dd576122cd336122c883856153ac565b614578565b6122d681615373565b90506122b2565b5050600160065550505050565b600073ffffffffffffffffffffffffffffffffffffffff82166123755760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015260840161110c565b600254600090815b818110156123e0576002818154811061239857612398615315565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff868116911614156123d0576123cd83615373565b92505b6123d981615373565b905061237d565b50909392505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146124505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b61245a6000614619565b565b6000600c54600b5461246e9190615401565b905090565b60055473ffffffffffffffffffffffffffffffffffffffff1633146124da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b601655565b60055473ffffffffffffffffffffffffffffffffffffffff1633146125465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b61255085856136aa565b612559836139ad565b61256282613af2565b61173a81613555565b6060612576826122ea565b6000106125c55760405162461bcd60e51b815260206004820152601660248201527f455243373231456e756d3a206f776e657220696f6f6200000000000000000000604482015260640161110c565b60006125d0836122ea565b905060008167ffffffffffffffff8111156125ed576125ed614ce8565b604051908082528060200260200182016040528015612616578160200160208202803683370190505b50905060005b8281101561265d5761262e85826114aa565b82828151811061264057612640615315565b60209081029190910101528061265581615373565b91505061261c565b509392505050565b600260065414156126b85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161110c565b6002600655601254610100900460ff161580156126dd575060125462010000900460ff165b6127295760405162461bcd60e51b815260206004820152600b60248201527f53616c6520506175736564000000000000000000000000000000000000000000604482015260640161110c565b61273333826119d6565b61277f5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420616c6c6f776c6973746564000000000000000000604482015260640161110c565b60025482158015906127935750600d548311155b6127df5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e667473000000000000000000000000604482015260640161110c565b600c54600b546127ef9190615401565b6127f984836153ac565b11156128475760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b600e54336000908152601160205260409020546128659085906153ac565b11156128b35760405162461bcd60e51b815260206004820152601260248201527f4578636565647320416c6c6f636174696f6e0000000000000000000000000000604482015260640161110c565b33600090815260116020526040812080548592906128d29084906153ac565b90915550600090505b83811015612901576128f1336122c883856153ac565b6128fa81615373565b90506128db565b505060016006555050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146129735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b60128054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff163314612a115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600e5473ffffffffffffffffffffffffffffffffffffffff8216600090815260116020526040902054612a459084906153ac565b1115612a935760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320616d6261737361646f7220616c6c6f77616e636500000000604482015260640161110c565b600254600b54612aa384836153ac565b1115612af15760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b600c54831115612b435760405162461bcd60e51b815260206004820152601460248201527f45786365656473204d6178205265736572766564000000000000000000000000604482015260640161110c565b82600c6000828254612b559190615401565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526011602052604081208054859290612b8f9084906153ac565b90915550600090505b83811015612bc557612bb58383612bae81615373565b9450614578565b612bbe81615373565b9050612b98565b50505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314612c325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600a55565b60026006541415612c8a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161110c565b6002600655601254610100900460ff16158015612cb15750601254640100000000900460ff165b612d235760405162461bcd60e51b815260206004820152602360248201527f53616c6520706175736564206f72207075626c69632073616c6520646973616260448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161110c565b6008544211612d745760405162461bcd60e51b815260206004820152601460248201527f53616c6520686173206e6f742073746172746564000000000000000000000000604482015260640161110c565b6009544210612dc55760405162461bcd60e51b815260206004820152600e60248201527f53616c652068617320656e646564000000000000000000000000000000000000604482015260640161110c565b6002548115801590612dd95750600d548211155b612e255760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206e756d6265724f664e667473000000000000000000000000604482015260640161110c565b600c54600b54612e359190615401565b612e3f83836153ac565b1115612e8d5760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b81600a54612e9b91906153c4565b341015612eea5760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420456e6f75676820455448000000000000000000000000000000000000604482015260640161110c565b600f5433600090815260106020526040902054612f089084906153ac565b1115612f565760405162461bcd60e51b815260206004820152601260248201527f4578636565647320416c6c6f636174696f6e0000000000000000000000000000604482015260640161110c565b3360009081526010602052604081208054849290612f759084906153ac565b90915550600090505b82811015612fa457612f94336122c883856153ac565b612f9d81615373565b9050612f7e565b5050600160065550565b60055473ffffffffffffffffffffffffffffffffffffffff1633146130155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b601280549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b606060018054611010906152c1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146130c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b8281146131395760405162461bcd60e51b815260206004820152603360248201527f496e76616c6964207175616e74697469657320616e6420726563697069656e7460448201527f7320286c656e677468206d69736d617463682900000000000000000000000000606482015260840161110c565b600254600090815b8581101561317f5786868281811061315b5761315b615315565b905060200201358361316d91906153ac565b925061317881615373565b9050613141565b50600b5461318d83836153ac565b11156131db5760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b600c5482111561322d5760405162461bcd60e51b815260206004820152601460248201527f45786365656473204d6178205265736572766564000000000000000000000000604482015260640161110c565b81600c600082825461323f9190615401565b90915550600092508290505b838110156133655786868281811061326557613265615315565b905060200201356010600087878581811061328257613282615315565b90506020020160208101906132979190614fd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132e091906153ac565b90915550600090505b8787838181106132fb576132fb615315565b905060200201358110156133545761334486868481811061331e5761331e615315565b90506020020160208101906133339190614fd9565b8461333d81615373565b9550614578565b61334d81615373565b90506132e9565b5061335e81615373565b905061324b565b50505050505050565b60004760185461246e91906153ac565b6060600280548060200260200160405190810160405280929190818152602001828054801561108957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116133b8575050505050905090565b73ffffffffffffffffffffffffffffffffffffffff82163314156134525760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161110c565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146135505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600955565b60055473ffffffffffffffffffffffffffffffffffffffff1633146135bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600b5481111561360e5760405162461bcd60e51b815260206004820152601d60248201527f537570706c79206361702065786365656473206d617820737570706c79000000604482015260640161110c565b80600b5461361c9190615401565b600c5550565b61362c3383614091565b61369e5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161110c565b612bc584848484614690565b60055473ffffffffffffffffffffffffffffffffffffffff1633146137115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b61371a8261181a565b611b22816134e9565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601160209081526040808320546010909252822054610ffb91906153ac565b60055473ffffffffffffffffffffffffffffffffffffffff1633146137c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b82811461383a5760405162461bcd60e51b815260206004820152603360248201527f496e76616c6964207175616e74697469657320616e6420726563697069656e7460448201527f7320286c656e677468206d69736d617463682900000000000000000000000000606482015260840161110c565b600254600090815b858110156138805786868281811061385c5761385c615315565b905060200201358361386e91906153ac565b925061387981615373565b9050613842565b50600b5461388e83836153ac565b11156138dc5760405162461bcd60e51b815260206004820152601260248201527f45786365656473204d617820537570706c790000000000000000000000000000604482015260640161110c565b600c5482111561392e5760405162461bcd60e51b815260206004820152601460248201527f45786365656473204d6178205265736572766564000000000000000000000000604482015260640161110c565b81600c60008282546139409190615401565b90915550600092508290505b838110156133655760005b87878381811061396957613969615315565b9050602002013581101561399c5761398c86868481811061331e5761331e615315565b61399581615373565b9050613957565b506139a681615373565b905061394c565b60055473ffffffffffffffffffffffffffffffffffffffff163314613a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600d55565b6060613a2482613f8d565b613a965760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015260840161110c565b6000613aa0614719565b90506000815111613ac05760405180602001604052806000815250613aeb565b80613aca84614446565b604051602001613adb929190615418565b6040516020818303038152906040525b9392505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314613b595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600f55565b6017546040517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009281169190841690829063c455279190602401602060405180830381865afa158015613bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfa9190615447565b73ffffffffffffffffffffffffffffffffffffffff161415613c20576001915050610ffb565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314613cc65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b73ffffffffffffffffffffffffffffffffffffffff8116613d4f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161110c565b613d5881614619565b50565b60005b8151811015612bc557613d8b8484848481518110613d7e57613d7e615315565b60200260200101516113b7565b80613d9581615373565b915050613d5e565b60055473ffffffffffffffffffffffffffffffffffffffff163314613e045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b60128054911515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909216919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff163314613ea55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161110c565b600e55565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480613f3d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610ffb57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610ffb565b60025460009082108015610ffb5750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110613fc757613fc7615315565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141592915050565b600081815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061404b82611bc5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061409c82613f8d565b61410e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015260840161110c565b600061411983611bc5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061418857508373ffffffffffffffffffffffffffffffffffffffff1661417084611093565b73ffffffffffffffffffffffffffffffffffffffff16145b80613c575750613c578185613b5e565b8273ffffffffffffffffffffffffffffffffffffffff166141b882611bc5565b73ffffffffffffffffffffffffffffffffffffffff16146142415760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606482015260840161110c565b73ffffffffffffffffffffffffffffffffffffffff82166142c95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161110c565b6142d4600082613ff1565b81600282815481106142e8576142e8615315565b6000918252602082200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b60008060008061437685614728565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156143d1573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151979650505050505050565b60008183604051602001614419929190615418565b60405160208183030381529060405280519060200120905092915050565b6000613aeb826016548561479c565b60608161448657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156144b0578061449a81615373565b91506144a99050600a83615493565b915061448a565b60008167ffffffffffffffff8111156144cb576144cb614ce8565b6040519080825280601f01601f1916602001820160405280156144f5576020820181803683370190505b5090505b8415613c575761450a600183615401565b9150614517600a866154a7565b6145229060306153ac565b60f81b81838151811061453757614537615315565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350614571600a86615493565b94506144f9565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61469b848484614198565b6146a7848484846147b2565b612bc55760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161110c565b606060078054611010906152c1565b6000806000835160411461477e5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604482015260640161110c565b50505060208101516040820151606090920151909260009190911a90565b6000826147a98584614988565b14949350505050565b600073ffffffffffffffffffffffffffffffffffffffff84163b1561497d576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906148299033908990889088906004016154bb565b6020604051808303816000875af1925050508015614882575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261487f91810190615504565b60015b614932573d8080156148b0576040519150601f19603f3d011682016040523d82523d6000602084013e6148b5565b606091505b50805161492a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161110c565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050613c57565b506001949350505050565b600081815b845181101561265d5760008582815181106149aa576149aa615315565b602002602001015190508083116149d057600083815260208290526040902092506149e1565b600081815260208490526040902092505b50806149ec81615373565b91505061498d565b828054614a00906152c1565b90600052602060002090601f016020900481019282614a225760008555614a68565b82601f10614a3b57805160ff1916838001178555614a68565b82800160010185558215614a68579182015b82811115614a68578251825591602001919060010190614a4d565b506119d29291505b808211156119d25760008155600101614a70565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114613d5857600080fd5b600060208284031215614ac457600080fd5b8135613aeb81614a84565b60005b83811015614aea578181015183820152602001614ad2565b83811115612bc55750506000910152565b60008151808452614b13816020860160208601614acf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613aeb6020830184614afb565b600060208284031215614b6a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114613d5857600080fd5b60008060408385031215614ba657600080fd5b8235614bb181614b71565b946020939093013593505050565b600080600060608486031215614bd457600080fd5b8335614bdf81614b71565b92506020840135614bef81614b71565b929592945050506040919091013590565b60008083601f840112614c1257600080fd5b50813567ffffffffffffffff811115614c2a57600080fd5b6020830191508360208260051b8501011115614c4557600080fd5b9250929050565b60008060008060408587031215614c6257600080fd5b843567ffffffffffffffff80821115614c7a57600080fd5b614c8688838901614c00565b90965094506020870135915080821115614c9f57600080fd5b50614cac87828801614c00565b95989497509550505050565b80358015158114614cc857600080fd5b919050565b600060208284031215614cdf57600080fd5b613aeb82614cb8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d5e57614d5e614ce8565b604052919050565b600082601f830112614d7757600080fd5b813567ffffffffffffffff811115614d9157614d91614ce8565b614dc260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614d17565b818152846020838601011115614dd757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614e0757600080fd5b8235614e1281614b71565b9150602083013567ffffffffffffffff811115614e2e57600080fd5b614e3a85828601614d66565b9150509250929050565b600060208284031215614e5657600080fd5b813567ffffffffffffffff811115614e6d57600080fd5b613c5784828501614d66565b600080600060408486031215614e8e57600080fd5b833567ffffffffffffffff80821115614ea657600080fd5b614eb287838801614d66565b94506020860135915080821115614ec857600080fd5b50614ed586828701614c00565b9497909650939450505050565b600067ffffffffffffffff821115614efc57614efc614ce8565b5060051b60200190565b60008060008060808587031215614f1c57600080fd5b843593506020808601359350604086013567ffffffffffffffff80821115614f4357600080fd5b818801915088601f830112614f5757600080fd5b8135614f6a614f6582614ee2565b614d17565b81815260059190911b8301840190848101908b831115614f8957600080fd5b938501935b82851015614fa757843582529385019390850190614f8e565b965050506060880135925080831115614fbf57600080fd5b5050614fcd87828801614d66565b91505092959194509250565b600060208284031215614feb57600080fd5b8135613aeb81614b71565b600080600080600060a0868803121561500e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6020808252825182820181905260009190848201906040850190845b818110156150695783518352928401929184019160010161504d565b50909695505050505050565b6000806040838503121561508857600080fd5b82359150602083013567ffffffffffffffff811115614e2e57600080fd5b600080604083850312156150b957600080fd5b8235915060208301356150cb81614b71565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561506957835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016150f2565b6000806040838503121561513757600080fd5b823561514281614b71565b915061515060208401614cb8565b90509250929050565b6000806000806080858703121561516f57600080fd5b843561517a81614b71565b9350602085013561518a81614b71565b925060408501359150606085013567ffffffffffffffff8111156151ad57600080fd5b614fcd87828801614d66565b600080604083850312156151cc57600080fd5b50508035926020909101359150565b600080604083850312156151ee57600080fd5b82356151f981614b71565b915060208301356150cb81614b71565b60008060006060848603121561521e57600080fd5b833561522981614b71565b925060208481013561523a81614b71565b9250604085013567ffffffffffffffff81111561525657600080fd5b8501601f8101871361526757600080fd5b8035615275614f6582614ee2565b81815260059190911b8201830190838101908983111561529457600080fd5b928401925b828410156152b257833582529284019290840190615299565b80955050505050509250925092565b600181811c908216806152d557607f821691505b6020821081141561530f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153a5576153a5615344565b5060010190565b600082198211156153bf576153bf615344565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153fc576153fc615344565b500290565b60008282101561541357615413615344565b500390565b6000835161542a818460208801614acf565b83519083019061543e818360208801614acf565b01949350505050565b60006020828403121561545957600080fd5b8151613aeb81614b71565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826154a2576154a2615464565b500490565b6000826154b6576154b6615464565b500690565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526154fa6080830184614afb565b9695505050505050565b60006020828403121561551657600080fd5b8151613aeb81614a8456fea2646970667358221220c3e6651d8a507b796c46e777d6e640a0336a626ff24f6d44c4ef3fff5839805164736f6c634300080b0033
Deployed Bytecode Sourcemap
1173:16489:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;191:301:3;;;;;;;;;;-1:-1:-1;191:301:3;;;;;:::i;:::-;;:::i;:::-;;;611:14:15;;604:22;586:41;;574:2;559:18;191:301:3;;;;;;;;2089:100:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2729:308::-;;;;;;;;;;-1:-1:-1;2729:308:4;;;;;:::i;:::-;;:::i;:::-;;;1809:42:15;1797:55;;;1779:74;;1767:2;1752:18;2729:308:4;1633:226:15;2309:412:4;;;;;;;;;;-1:-1:-1;2309:412:4;;;;;:::i;:::-;;:::i;:::-;;2370:39:11;;;;;;;;;;-1:-1:-1;2370:39:11;;;;;;;;;;;16561:104;;;;;;;;;;-1:-1:-1;16636:21:11;16561:104;;;2489:25:15;;;2477:2;2462:18;16561:104:11;2343:177:15;1470:110:3;;;;;;;;;;-1:-1:-1;1558:7:3;:14;1470:110;;13415:122:11;;;;;;;;;;-1:-1:-1;13415:122:11;;;;;:::i;:::-;;:::i;13545:142::-;;;;;;;;;;-1:-1:-1;13545:142:11;;;;;:::i;:::-;;:::i;1969:37::-;;;;;;;;;;;;;;;;2462:36;;;;;;;;;;-1:-1:-1;2462:36:11;;;;;;;;;;;3602:376:4;;;;;;;;;;-1:-1:-1;3602:376:4;;;;;:::i;:::-;;:::i;13793:96:11:-;;;;;;;;;;-1:-1:-1;13793:96:11;;;;;:::i;:::-;;:::i;500:504:3:-;;;;;;;;;;-1:-1:-1;500:504:3;;;;;:::i;:::-;;:::i;12534:428:11:-;;;;;;;;;;-1:-1:-1;12534:428:11;;;;;:::i;:::-;;:::i;1902:38::-;;;;;;;;;;;;;;;;16884:273;;;:::i;15551:120::-;;;;;;;;;;-1:-1:-1;15551:120:11;;;;;:::i;:::-;;:::i;1475:71::-;;;;;;;;;;;;;;;;3986:185:4;;;;;;;;;;-1:-1:-1;3986:185:4;;;;;:::i;:::-;;:::i;4026:236:11:-;;;;;;;;;;;;;:::i;15448:95::-;;;;;;;;;;-1:-1:-1;15448:95:11;;;;;:::i;:::-;;:::i;2416:39::-;;;;;;;;;;-1:-1:-1;2416:39:11;;;;;;;;;;;3812:89;;;;;;;;;;-1:-1:-1;3884:9:11;;3812:89;;1588:244:3;;;;;;;;;;-1:-1:-1;1588:244:3;;;;;:::i;:::-;;:::i;4506:364:11:-;;;;;;;;;;-1:-1:-1;4506:364:11;;;;;:::i;:::-;;:::i;3560:120::-;;;;;;;;;;-1:-1:-1;3652:20:11;;3634:15;:38;3560:120;;14800:104;;;;;;;;;;-1:-1:-1;14800:104:11;;;;;:::i;:::-;;:::i;15299:141::-;;;;;;;;;;-1:-1:-1;15299:141:11;;;;;:::i;:::-;;:::i;2333:30::-;;;;;;;;;;-1:-1:-1;2333:30:11;;;;;;;;;;;1755:326:4;;;;;;;;;;-1:-1:-1;1755:326:4;;;;;:::i;:::-;;:::i;5808:315:11:-;;;;;;;;;;-1:-1:-1;5808:315:11;;;;;:::i;:::-;;:::i;1316:21::-;;;;;;;;;;;;;:::i;14279:106::-;;;;;;;;;;-1:-1:-1;14279:106:11;;;;;:::i;:::-;;:::i;7147:1445::-;;;;;;:::i;:::-;;:::i;1229:518:4:-;;;;;;;;;;-1:-1:-1;1229:518:4;;;;;:::i;:::-;;:::i;3152:109:11:-;;;;;;;;;;-1:-1:-1;3152:109:11;;;;;:::i;:::-;3238:15;;3211:7;3238:15;;;:9;:15;;;;;;;3152:109;1661:101:12;;;;;;;;;;;;;:::i;3909:109:11:-;;;;;;;;;;;;;:::i;13317:90::-;;;;;;;;;;-1:-1:-1;13317:90:11;;;;;:::i;:::-;;:::i;2525:85::-;;;;;;;;;;;;2568:42;2525:85;;16012:353;;;;;;;;;;-1:-1:-1;16012:353:11;;;;;:::i;:::-;;:::i;2064:44::-;;;;;;;;;;-1:-1:-1;2064:44:11;;;;;:::i;:::-;;;;;;;;;;;;;;1012:450:3;;;;;;;;;;-1:-1:-1;1012:450:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8668:765:11:-;;;;;;:::i;:::-;;:::i;16454:99::-;;;;;;;;;;-1:-1:-1;16531:14:11;;16454:99;;14912:101;;;;;;;;;;-1:-1:-1;14912:101:11;;;;;:::i;:::-;;:::i;1029:85:12:-;;;;;;;;;;-1:-1:-1;1101:6:12;;;;1029:85;;11511:621:11;;;;;;;;;;-1:-1:-1;11511:621:11;;;;;:::i;:::-;;:::i;13695:90::-;;;;;;;;;;-1:-1:-1;13695:90:11;;;;;:::i;:::-;;:::i;6198:874::-;;;;;;:::i;:::-;;:::i;15154:137::-;;;;;;;;;;-1:-1:-1;15154:137:11;;;;;:::i;:::-;;:::i;1371:48::-;;;;;;;;;;;;;;;;2197:104:4;;;;;;;;;;;;;:::i;3269:129:11:-;;;;;;;;;;-1:-1:-1;3269:129:11;;;;;:::i;:::-;3365:25;;3338:7;3365:25;;;:19;:25;;;;;;;3269:129;10495:914;;;;;;;;;;-1:-1:-1;10495:914:11;;;;;:::i;:::-;;:::i;16673:121::-;;;;;;;;;;;;;:::i;1600:33::-;;;;;;;;;;;;;;;;763:95:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3045:327::-;;;;;;;;;;-1:-1:-1;3045:327:4;;;;;:::i;:::-;;:::i;2147:54:11:-;;;;;;;;;;-1:-1:-1;2147:54:11;;;;;:::i;:::-;;;;;;;;;;;;;;15679:116;;;;;;;;;;-1:-1:-1;15679:116:11;;;;;:::i;:::-;;:::i;14605:187::-;;;;;;;;;;-1:-1:-1;14605:187:11;;;;;:::i;:::-;;:::i;4179:365:4:-;;;;;;;;;;-1:-1:-1;4179:365:4;;;;;:::i;:::-;;:::i;4270:107:11:-;;;;;;;;;;-1:-1:-1;4351:18:11;;4270:107;;15803:201;;;;;;;;;;-1:-1:-1;15803:201:11;;;;;:::i;:::-;;:::i;3406:142::-;;;;;;;;;;-1:-1:-1;3406:142:11;;;;;:::i;:::-;;:::i;9524:852::-;;;;;;;;;;-1:-1:-1;9524:852:11;;;;;:::i;:::-;;:::i;13897:96::-;;;;;;;;;;-1:-1:-1;13897:96:11;;;;;:::i;:::-;;:::i;12970:339::-;;;;;;;;;;-1:-1:-1;12970:339:11;;;;;:::i;:::-;;:::i;3688:116::-;;;;;;;;;;-1:-1:-1;3778:18:11;;3760:15;:36;3688:116;;2821:80;;;;;;;;;;-1:-1:-1;2821:80:11;;;;;;;;14135:136;;;;;;;;;;-1:-1:-1;14135:136:11;;;;;:::i;:::-;;:::i;1665:32::-;;;;;;;;;;;;;;;;17258:401;;;;;;;;;;-1:-1:-1;17258:401:11;;;;;:::i;:::-;;:::i;1911:198:12:-;;;;;;;;;;-1:-1:-1;1911:198:12;;;;;:::i;:::-;;:::i;12306:220:11:-;;;;;;;;;;-1:-1:-1;12306:220:11;;;;;:::i;:::-;;:::i;2251:33::-;;;;;;;;;;-1:-1:-1;2251:33:11;;;;;;;;1820:28;;;;;;;;;;;;;;;;4389:84;;;;;;;;;;-1:-1:-1;4460:5:11;;4389:84;;15021:125;;;;;;;;;;-1:-1:-1;15021:125:11;;;;;:::i;:::-;;:::i;1729:29::-;;;;;;;;;;;;;;;;14001:126;;;;;;;;;;-1:-1:-1;14001:126:11;;;;;:::i;:::-;;:::i;191:301:3:-;339:4;381:50;;;396:35;381:50;;:103;;;448:36;472:11;448:23;:36::i;:::-;361:123;191:301;-1:-1:-1;;191:301:3:o;2089:100:4:-;2143:13;2176:5;2169:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2089:100;:::o;2729:308::-;2850:7;2897:16;2905:7;2897;:16::i;:::-;2875:110;;;;-1:-1:-1;;;2875:110:4;;14880:2:15;2875:110:4;;;14862:21:15;14919:2;14899:18;;;14892:30;14958:34;14938:18;;;14931:62;15029:14;15009:18;;;15002:42;15061:19;;2875:110:4;;;;;;;;;-1:-1:-1;3005:24:4;;;;:15;:24;;;;;;;;;2729:308::o;2309:412::-;2390:13;2406:24;2422:7;2406:15;:24::i;:::-;2390:40;;2455:5;2449:11;;:2;:11;;;;2441:57;;;;-1:-1:-1;;;2441:57:4;;15293:2:15;2441:57:4;;;15275:21:15;15332:2;15312:18;;;15305:30;15371:34;15351:18;;;15344:62;15442:3;15422:18;;;15415:31;15463:19;;2441:57:4;15091:397:15;2441:57:4;719:10:1;2533:21:4;;;;;:62;;-1:-1:-1;2558:37:4;2575:5;719:10:1;17258:401:11;:::i;2558:37:4:-;2511:168;;;;-1:-1:-1;;;2511:168:4;;15695:2:15;2511:168:4;;;15677:21:15;15734:2;15714:18;;;15707:30;15773:34;15753:18;;;15746:62;15844:26;15824:18;;;15817:54;15888:19;;2511:168:4;15493:420:15;2511:168:4;2692:21;2701:2;2705:7;2692:8;:21::i;:::-;2379:342;2309:412;;:::o;13415:122:11:-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;13500:16:11::1;::::0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:29;13415:122::o;13545:142::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;13640:26:11::1;::::0;;::::1;;::::0;;;:19:::1;:26;::::0;;;;:39;13545:142::o;3602:376:4:-;3811:41;719:10:1;3844:7:4;3811:18;:41::i;:::-;3789:140;;;;-1:-1:-1;;;3789:140:4;;16481:2:15;3789:140:4;;;16463:21:15;16520:2;16500:18;;;16493:30;16559:34;16539:18;;;16532:62;16630:19;16610:18;;;16603:47;16667:19;;3789:140:4;16279:413:15;3789:140:4;3942:28;3952:4;3958:2;3962:7;3942:9;:28::i;13793:96:11:-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;13861:8:11::1;:20:::0;13793:96::o;500:504:3:-;625:15;674:24;692:5;674:17;:24::i;:::-;666:5;:32;658:67;;;;-1:-1:-1;;;658:67:3;;16899:2:15;658:67:3;;;16881:21:15;16938:2;16918:18;;;16911:30;16977:24;16957:18;;;16950:52;17019:18;;658:67:3;16697:346:15;658:67:3;736:13;765:9;760:186;780:7;:14;776:18;;760:186;;;829:7;837:1;829:10;;;;;;;;:::i;:::-;;;;;;;;;;;;820:19;;;829:10;;820:19;816:119;;;873:5;864;:14;860:59;;;887:1;-1:-1:-1;880:8:3;;-1:-1:-1;880:8:3;860:59;912:7;;;:::i;:::-;;;860:59;796:3;;;:::i;:::-;;;760:186;;;-1:-1:-1;956:40:3;;-1:-1:-1;;;956:40:3;;16899:2:15;956:40:3;;;16881:21:15;16938:2;16918:18;;;16911:30;16977:24;16957:18;;;16950:52;17019:18;;956:40:3;16697:346:15;12534:428:11;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;12654:35:11;;::::1;12646:97;;;::::0;-1:-1:-1;;;12646:97:11;;17828:2:15;12646:97:11::1;::::0;::::1;17810:21:15::0;17867:2;17847:18;;;17840:30;17906:34;17886:18;;;17879:62;17977:19;17957:18;;;17950:47;18014:19;;12646:97:11::1;17626:413:15::0;12646:97:11::1;12759:9;12754:201;12774:20:::0;;::::1;12754:201;;;12821:9;12816:128;12840:8;;12849:1;12840:11;;;;;;;:::i;:::-;;;;;;;12836:1;:15;12816:128;;;12877:51;12890:10;12902:9;;12912:1;12902:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;12916:8;;12925:1;12916:11;;;;;;;:::i;:::-;;;;;;;12877:12;:51::i;:::-;12853:3;::::0;::::1;:::i;:::-;;;12816:128;;;-1:-1:-1::0;12796:3:11::1;::::0;::::1;:::i;:::-;;;12754:201;;;;12534:428:::0;;;;:::o;16884:273::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;17005:64:11::1;::::0;16954:21:::1;::::0;16940:11:::1;::::0;17013:10:::1;::::0;16954:21;;16940:11;17005:64;16940:11;17005:64;16954:21;17013:10;17005:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16986:83;;;17088:7;17080:16;;;::::0;::::1;;17125:3;17107:14;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;16884:273:11:o;15551:120::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;15630:20:11::1;:33:::0;15551:120::o;3986:185:4:-;4124:39;4141:4;4147:2;4151:7;4124:39;;;;;;;;;;;;:16;:39::i;4026:236:11:-;4074:4;4091:11;4105:19;3652:20;;3634:15;:38;;3560:120;4105:19;:41;;;;-1:-1:-1;3778:18:11;;3760:15;:36;4128:18;4105:41;4091:55;;4157:15;4193:23;:21;:23::i;:::-;4175:7;:14;:41;;;-1:-1:-1;4234:6:11;:20;;;;;4244:10;4234:20;4227:27;;;;4026:236;:::o;15448:95::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;15514:13:11::1;:21:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;15448:95::o;1588:244:3:-;1708:7;1749:24;1558:7;:14;;1470:110;1749:24;1741:5;:32;1733:68;;;;-1:-1:-1;;;1733:68:3;;18589:2:15;1733:68:3;;;18571:21:15;18628:2;18608:18;;;18601:30;18667:25;18647:18;;;18640:53;18710:18;;1733:68:3;18387:347:15;1733:68:3;-1:-1:-1;1819:5:3;1588:244::o;4506:364:11:-;4637:22;;;18901:66:15;18888:2;18884:15;;;18880:88;4637:22:11;;;;18868:101:15;;;;4637:22:11;;;;;;;;;18985:12:15;;;4637:22:11;;4627:33;;;;;;19250:66:15;4712:65:11;;;19238:79:15;19333:12;;;;19326:28;;;4712:65:11;;;;;;;;;;19370:12:15;;;;4712:65:11;;;4702:76;;;;;-1:-1:-1;;4627:33:11;2568:42;4796:46;4702:76;4832:9;4796:13;:46::i;:::-;:66;;;;4506:364;-1:-1:-1;;;;;4506:364:11:o;14800:104::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;14875:21:11;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;14800:104:::0;:::o;15299:141::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;15388:20:11::1;:44:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;15299:141::o;1755:326:4:-;1872:7;1897:13;1913:7;1921;1913:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1962:19:4;1940:110;;;;-1:-1:-1;;;1940:110:4;;19595:2:15;1940:110:4;;;19577:21:15;19634:2;19614:18;;;19607:30;19673:34;19653:18;;;19646:62;19744:11;19724:18;;;19717:39;19773:19;;1940:110:4;19393:405:15;5808:315:11;5902:13;5928:21;5976:10;5959:28;;;;;;;18888:2:15;18884:15;;;;18901:66;18880:88;18868:101;;18994:2;18985:12;;18739:264;5959:28:11;;;;;;;;;;;;;5928:60;;6007:41;6015:25;6021:9;6032:7;6015:5;:25::i;:::-;6042:5;;6007:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6007:7:11;;-1:-1:-1;;;6007:41:11:i;:::-;5999:89;;;;-1:-1:-1;;;5999:89:11;;20005:2:15;5999:89:11;;;19987:21:15;20044:2;20024:18;;;20017:30;20083:34;20063:18;;;20056:62;20154:5;20134:18;;;20127:33;20177:19;;5999:89:11;19803:399:15;5999:89:11;-1:-1:-1;6106:9:11;;5808:315;-1:-1:-1;;;5808:315:11:o;1316:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14279:106::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;14352:9:11::1;:25:::0;14279:106::o;7147:1445::-;1744:1:13;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:13;;20409:2:15;2317:63:13;;;20391:21:15;20448:2;20428:18;;;20421:30;20487:33;20467:18;;;20460:61;20538:18;;2317:63:13;20207:355:15;2317:63:13;1744:1;2455:7;:18;7310:10:11::1;::::0;::::1;::::0;::::1;;;7309:11;:34:::0;::::1;;;-1:-1:-1::0;7324:19:11::1;::::0;;;::::1;;;7309:34;7301:58;;;::::0;-1:-1:-1;;;7301:58:11;;20769:2:15;7301:58:11::1;::::0;::::1;20751:21:15::0;20808:2;20788:18;;;20781:30;20847:13;20827:18;;;20820:41;20878:18;;7301:58:11::1;20567:335:15::0;7301:58:11::1;7396:20;;7378:15;:38;7370:71;;;::::0;-1:-1:-1;;;7370:71:11;;21109:2:15;7370:71:11::1;::::0;::::1;21091:21:15::0;21148:2;21128:18;;;21121:30;21187:22;21167:18;;;21160:50;21227:18;;7370:71:11::1;20907:344:15::0;7370:71:11::1;7478:18;;7460:15;:36;7452:63;;;::::0;-1:-1:-1;;;7452:63:11;;21458:2:15;7452:63:11::1;::::0;::::1;21440:21:15::0;21497:2;21477:18;;;21470:30;21536:16;21516:18;;;21509:44;21570:18;;7452:63:11::1;21256:338:15::0;7452:63:11::1;7555:12;7547:5;;:20;;;;:::i;:::-;7534:9;:33;;7526:60;;;::::0;-1:-1:-1;;;7526:60:11;;22034:2:15;7526:60:11::1;::::0;::::1;22016:21:15::0;22073:2;22053:18;;;22046:30;22112:16;22092:18;;;22085:44;22146:18;;7526:60:11::1;21832:338:15::0;7526:60:11::1;7600:13;::::0;::::1;;7597:515;;;7697:18;;7685:30;;7738:36;7752:10;7764:9;7738:13;:36::i;:::-;7730:72;;;::::0;-1:-1:-1;;;7730:72:11;;22377:2:15;7730:72:11::1;::::0;::::1;22359:21:15::0;22416:2;22396:18;;;22389:30;22455:25;22435:18;;;22428:53;22498:18;;7730:72:11::1;22175:347:15::0;7730:72:11::1;7597:515;;;7932:28;::::0;;7949:10:::1;18888:2:15::0;18884:15;18901:66;18880:88;7932:28:11::1;::::0;::::1;18868:101:15::0;7932:28:11;;;;;;;;;18985:12:15;;;;7932:28:11;;;7984:59:::1;7992:43;7998:27;8015:9:::0;7998:16:::1;:27::i;:::-;8027:7;7992:5;:43::i;:::-;8037:5;7984:7;:59::i;:::-;7976:95;;;::::0;-1:-1:-1;;;7976:95:11;;22377:2:15;7976:95:11::1;::::0;::::1;22359:21:15::0;22416:2;22396:18;;;22389:30;22455:25;22435:18;;;22428:53;22498:18;;7976:95:11::1;22175:347:15::0;7976:95:11::1;-1:-1:-1::0;7597:515:11::1;8134:7;:14:::0;8167:16;;;;;:44:::1;;;8203:8;;8187:12;:24;;8167:44;8159:77;;;::::0;-1:-1:-1;;;8159:77:11;;22729:2:15;8159:77:11::1;::::0;::::1;22711:21:15::0;22768:2;22748:18;;;22741:30;22807:22;22787:18;;;22780:50;22847:18;;8159:77:11::1;22527:344:15::0;8159:77:11::1;8290:8;;8278:9;;:20;;;;:::i;:::-;8256:16;8260:12:::0;8256:1;:16:::1;:::i;:::-;8255:44;;8247:75;;;::::0;-1:-1:-1;;;8247:75:11;;23208:2:15;8247:75:11::1;::::0;::::1;23190:21:15::0;23247:2;23227:18;;;23220:30;23286:20;23266:18;;;23259:48;23324:18;;8247:75:11::1;23006:342:15::0;8247:75:11::1;8351:10;8341:21;::::0;;;:9:::1;:21;::::0;;;;;8381:9;;8341:36:::1;::::0;8365:12;;8341:36:::1;:::i;:::-;:49;;8333:80;;;::::0;-1:-1:-1;;;8333:80:11;;23555:2:15;8333:80:11::1;::::0;::::1;23537:21:15::0;23594:2;23574:18;;;23567:30;23633:20;23613:18;;;23606:48;23671:18;;8333:80:11::1;23353:342:15::0;8333:80:11::1;8434:10;8424:21;::::0;;;:9:::1;:21;::::0;;;;:37;;8449:12;;8424:21;:37:::1;::::0;8449:12;;8424:37:::1;:::i;:::-;::::0;;;-1:-1:-1;8477:9:11::1;::::0;-1:-1:-1;8472:94:11::1;8496:12;8492:1;:16;8472:94;;;8530:24;8536:10;8548:5;8552:1:::0;8548;:5:::1;:::i;:::-;8530;:24::i;:::-;8510:3;::::0;::::1;:::i;:::-;;;8472:94;;;-1:-1:-1::0;;1701:1:13;2628:7;:22;-1:-1:-1;;;;7147:1445:11:o;1229:518:4:-;1346:7;1393:19;;;1371:111;;;;-1:-1:-1;;;1371:111:4;;23902:2:15;1371:111:4;;;23884:21:15;23941:2;23921:18;;;23914:30;23980:34;23960:18;;;23953:62;24051:12;24031:18;;;24024:40;24081:19;;1371:111:4;23700:406:15;1371:111:4;1538:7;:14;1493:13;;;1563:130;1587:6;1583:1;:10;1563:130;;;1628:7;1636:1;1628:10;;;;;;;;:::i;:::-;;;;;;;;;;;;1619:19;;;1628:10;;1619:19;1615:67;;;1659:7;;;:::i;:::-;;;1615:67;1595:3;;;:::i;:::-;;;1563:130;;;-1:-1:-1;1734:5:4;;1229:518;-1:-1:-1;;;1229:518:4:o;1661:101:12:-;1101:6;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3909:109:11:-;3963:7;4002:8;;3990:9;;:20;;;;:::i;:::-;3983:27;;3909:109;:::o;13317:90::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;13382:10:11::1;:17:::0;13317:90::o;16012:353::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;16180:56:11::1;16205:15;16222:13;16180:24;:56::i;:::-;16247:22;16259:9;16247:11;:22::i;:::-;16280:42;16302:19;16280:21;:42::i;:::-;16333:24;16346:10;16333:12;:24::i;1012:450:3:-:0;1098:16;1144:24;1162:5;1144:17;:24::i;:::-;1140:1;:28;1132:63;;;;-1:-1:-1;;;1132:63:3;;16899:2:15;1132:63:3;;;16881:21:15;16938:2;16918:18;;;16911:30;16977:24;16957:18;;;16950:52;17019:18;;1132:63:3;16697:346:15;1132:63:3;1206:18;1227:16;1237:5;1227:9;:16::i;:::-;1206:37;;1254:25;1296:10;1282:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1282:25:3;;1254:53;;1323:9;1318:111;1342:10;1338:1;:14;1318:111;;;1388:29;1408:5;1415:1;1388:19;:29::i;:::-;1374:8;1383:1;1374:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;1354:3;;;;:::i;:::-;;;;1318:111;;;-1:-1:-1;1446:8:3;1012:450;-1:-1:-1;;;1012:450:3:o;8668:765:11:-;1744:1:13;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:13;;20409:2:15;2317:63:13;;;20391:21:15;20448:2;20428:18;;;20421:30;20487:33;20467:18;;;20460:61;20538:18;;2317:63:13;20207:355:15;2317:63:13;1744:1;2455:7;:18;8789:10:11::1;::::0;::::1;::::0;::::1;;;8788:11;:35:::0;::::1;;;-1:-1:-1::0;8803:20:11::1;::::0;;;::::1;;;8788:35;8780:59;;;::::0;-1:-1:-1;;;8780:59:11;;20769:2:15;8780:59:11::1;::::0;::::1;20751:21:15::0;20808:2;20788:18;;;20781:30;20847:13;20827:18;;;20820:41;20878:18;;8780:59:11::1;20567:335:15::0;8780:59:11::1;8858:36;8872:10;8884:9;8858:13;:36::i;:::-;8850:72;;;::::0;-1:-1:-1;;;8850:72:11;;22377:2:15;8850:72:11::1;::::0;::::1;22359:21:15::0;22416:2;22396:18;;;22389:30;22455:25;22435:18;;;22428:53;22498:18;;8850:72:11::1;22175:347:15::0;8850:72:11::1;8945:7;:14:::0;8978:16;;;;;:44:::1;;;9014:8;;8998:12;:24;;8978:44;8970:77;;;::::0;-1:-1:-1;;;8970:77:11;;22729:2:15;8970:77:11::1;::::0;::::1;22711:21:15::0;22768:2;22748:18;;;22741:30;22807:22;22787:18;;;22780:50;22847:18;;8970:77:11::1;22527:344:15::0;8970:77:11::1;9101:8;;9089:9;;:20;;;;:::i;:::-;9067:16;9071:12:::0;9067:1;:16:::1;:::i;:::-;9066:44;;9058:75;;;::::0;-1:-1:-1;;;9058:75:11;;23208:2:15;9058:75:11::1;::::0;::::1;23190:21:15::0;23247:2;23227:18;;;23220:30;23286:20;23266:18;;;23259:48;23324:18;;9058:75:11::1;23006:342:15::0;9058:75:11::1;9202:19;::::0;9172:10:::1;9152:31;::::0;;;:19:::1;:31;::::0;;;;;:46:::1;::::0;9186:12;;9152:46:::1;:::i;:::-;:69;;9144:100;;;::::0;-1:-1:-1;;;9144:100:11;;23555:2:15;9144:100:11::1;::::0;::::1;23537:21:15::0;23594:2;23574:18;;;23567:30;23633:20;23613:18;;;23606:48;23671:18;;9144:100:11::1;23353:342:15::0;9144:100:11::1;9275:10;9255:31;::::0;;;:19:::1;:31;::::0;;;;:47;;9290:12;;9255:31;:47:::1;::::0;9290:12;;9255:47:::1;:::i;:::-;::::0;;;-1:-1:-1;9318:9:11::1;::::0;-1:-1:-1;9313:94:11::1;9337:12;9333:1;:16;9313:94;;;9371:24;9377:10;9389:5;9393:1:::0;9389;:5:::1;:::i;9371:24::-;9351:3;::::0;::::1;:::i;:::-;;;9313:94;;;-1:-1:-1::0;;1701:1:13;2628:7;:22;-1:-1:-1;;8668:765:11:o;14912:101::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;14981:10:11::1;:24:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;14912:101::o;11511:621::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;11660:19:11::1;::::0;11615:30:::1;::::0;::::1;;::::0;;;:19:::1;:30;::::0;;;;;:41:::1;::::0;11648:8;;11615:41:::1;:::i;:::-;:64;;11607:105;;;::::0;-1:-1:-1;;;11607:105:11;;24313:2:15;11607:105:11::1;::::0;::::1;24295:21:15::0;24352:2;24332:18;;;24325:30;24391;24371:18;;;24364:58;24439:18;;11607:105:11::1;24111:352:15::0;11607:105:11::1;11735:7;:14:::0;11784:9:::1;::::0;11768:12:::1;11772:8:::0;11735:14;11768:12:::1;:::i;:::-;:25;;11760:56;;;::::0;-1:-1:-1;;;11760:56:11;;23208:2:15;11760:56:11::1;::::0;::::1;23190:21:15::0;23247:2;23227:18;;;23220:30;23286:20;23266:18;;;23259:48;23324:18;;11760:56:11::1;23006:342:15::0;11760:56:11::1;11847:8;;11835;:20;;11827:53;;;::::0;-1:-1:-1;;;11827:53:11;;24670:2:15;11827:53:11::1;::::0;::::1;24652:21:15::0;24709:2;24689:18;;;24682:30;24748:22;24728:18;;;24721:50;24788:18;;11827:53:11::1;24468:344:15::0;11827:53:11::1;11947:8;11935;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;11966:30:11::1;::::0;::::1;;::::0;;;:19:::1;:30;::::0;;;;:42;;12000:8;;11966:30;:42:::1;::::0;12000:8;;11966:42:::1;:::i;:::-;::::0;;;-1:-1:-1;12024:9:11::1;::::0;-1:-1:-1;12019:87:11::1;12043:8;12039:1;:12;12019:87;;;12073:21;12079:9:::0;12090:3;::::1;::::0;::::1;:::i;:::-;;;12073:5;:21::i;:::-;12053:3;::::0;::::1;:::i;:::-;;;12019:87;;;-1:-1:-1::0;;;;11511:621:11:o;13695:90::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;13760:5:11::1;:17:::0;13695:90::o;6198:874::-;1744:1:13;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:13;;20409:2:15;2317:63:13;;;20391:21:15;20448:2;20428:18;;;20421:30;20487:33;20467:18;;;20460:61;20538:18;;2317:63:13;20207:355:15;2317:63:13;1744:1;2455:7;:18;6285:10:11::1;::::0;::::1;::::0;::::1;;;6284:11;:31:::0;::::1;;;-1:-1:-1::0;6299:16:11::1;::::0;;;::::1;;;6284:31;6276:79;;;::::0;-1:-1:-1;;;6276:79:11;;25019:2:15;6276:79:11::1;::::0;::::1;25001:21:15::0;25058:2;25038:18;;;25031:30;25097:34;25077:18;;;25070:62;25168:5;25148:18;;;25141:33;25191:19;;6276:79:11::1;24817:399:15::0;6276:79:11::1;6392:20;;6374:15;:38;6366:71;;;::::0;-1:-1:-1;;;6366:71:11;;21109:2:15;6366:71:11::1;::::0;::::1;21091:21:15::0;21148:2;21128:18;;;21121:30;21187:22;21167:18;;;21160:50;21227:18;;6366:71:11::1;20907:344:15::0;6366:71:11::1;6474:18;;6456:15;:36;6448:63;;;::::0;-1:-1:-1;;;6448:63:11;;21458:2:15;6448:63:11::1;::::0;::::1;21440:21:15::0;21497:2;21477:18;;;21470:30;21536:16;21516:18;;;21509:44;21570:18;;6448:63:11::1;21256:338:15::0;6448:63:11::1;6534:7;:14:::0;6567:16;;;;;:44:::1;;;6603:8;;6587:12;:24;;6567:44;6559:77;;;::::0;-1:-1:-1;;;6559:77:11;;22729:2:15;6559:77:11::1;::::0;::::1;22711:21:15::0;22768:2;22748:18;;;22741:30;22807:22;22787:18;;;22780:50;22847:18;;6559:77:11::1;22527:344:15::0;6559:77:11::1;6690:8;;6678:9;;:20;;;;:::i;:::-;6656:16;6660:12:::0;6656:1;:16:::1;:::i;:::-;6655:44;;6647:75;;;::::0;-1:-1:-1;;;6647:75:11;;23208:2:15;6647:75:11::1;::::0;::::1;23190:21:15::0;23247:2;23227:18;;;23220:30;23286:20;23266:18;;;23259:48;23324:18;;6647:75:11::1;23006:342:15::0;6647:75:11::1;6762:12;6754:5;;:20;;;;:::i;:::-;6741:9;:33;;6733:60;;;::::0;-1:-1:-1;;;6733:60:11;;22034:2:15;6733:60:11::1;::::0;::::1;22016:21:15::0;22073:2;22053:18;;;22046:30;22112:16;22092:18;;;22085:44;22146:18;;6733:60:11::1;21832:338:15::0;6733:60:11::1;6852:18;::::0;6822:10:::1;6812:21;::::0;;;:9:::1;:21;::::0;;;;;:36:::1;::::0;6836:12;;6812:36:::1;:::i;:::-;:58;;6804:89;;;::::0;-1:-1:-1;;;6804:89:11;;23555:2:15;6804:89:11::1;::::0;::::1;23537:21:15::0;23594:2;23574:18;;;23567:30;23633:20;23613:18;;;23606:48;23671:18;;6804:89:11::1;23353:342:15::0;6804:89:11::1;6914:10;6904:21;::::0;;;:9:::1;:21;::::0;;;;:37;;6929:12;;6904:21;:37:::1;::::0;6929:12;;6904:37:::1;:::i;:::-;::::0;;;-1:-1:-1;6957:9:11::1;::::0;-1:-1:-1;6952:94:11::1;6976:12;6972:1;:16;6952:94;;;7010:24;7016:10;7028:5;7032:1:::0;7028;:5:::1;:::i;7010:24::-;6990:3;::::0;::::1;:::i;:::-;;;6952:94;;;-1:-1:-1::0;;1701:1:13;2628:7;:22;-1:-1:-1;6198:874:11:o;15154:137::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;15241:19:11::1;:42:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;15154:137::o;2197:104:4:-;2253:13;2286:7;2279:14;;;;;:::i;10495:914:11:-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;10618:35:11;;::::1;10610:99;;;::::0;-1:-1:-1;;;10610:99:11;;25423:2:15;10610:99:11::1;::::0;::::1;25405:21:15::0;25462:2;25442:18;;;25435:30;25501:34;25481:18;;;25474:62;25572:21;25552:18;;;25545:49;25611:19;;10610:99:11::1;25221:415:15::0;10610:99:11::1;10768:7;:14:::0;10720:21:::1;::::0;;10793:101:::1;10813:19:::0;;::::1;10793:101;;;10871:8;;10880:1;10871:11;;;;;;;:::i;:::-;;;;;;;10854:28;;;;;:::i;:::-;::::0;-1:-1:-1;10834:3:11::1;::::0;::::1;:::i;:::-;;;10793:101;;;-1:-1:-1::0;10933:9:11::1;::::0;10912:17:::1;10916:13:::0;10912:1;:17:::1;:::i;:::-;:30;;10904:61;;;::::0;-1:-1:-1;;;10904:61:11;;23208:2:15;10904:61:11::1;::::0;::::1;23190:21:15::0;23247:2;23227:18;;;23220:30;23286:20;23266:18;;;23259:48;23324:18;;10904:61:11::1;23006:342:15::0;10904:61:11::1;11001:8;;10984:13;:25;;10976:58;;;::::0;-1:-1:-1;;;10976:58:11;;24670:2:15;10976:58:11::1;::::0;::::1;24652:21:15::0;24709:2;24689:18;;;24682:30;24748:22;24728:18;;;24721:50;24788:18;;10976:58:11::1;24468:344:15::0;10976:58:11::1;11101:13;11089:8;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;11125:20:11::1;::::0;-1:-1:-1;11125:20:11;;-1:-1:-1;11156:227:11::1;11176:20:::0;;::::1;11156:227;;;11245:8;;11254:1;11245:11;;;;;;;:::i;:::-;;;;;;;11218:9;:23;11228:9;;11238:1;11228:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;11218:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;11276:9:11::1;::::0;-1:-1:-1;11271:101:11::1;11295:8;;11304:1;11295:11;;;;;;;:::i;:::-;;;;;;;11291:1;:15;11271:101;;;11332:24;11338:9;;11348:1;11338:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;11352:3:::0;::::1;::::0;::::1;:::i;:::-;;;11332:5;:24::i;:::-;11308:3;::::0;::::1;:::i;:::-;;;11271:101;;;-1:-1:-1::0;11198:3:11::1;::::0;::::1;:::i;:::-;;;11156:227;;;-1:-1:-1::0;;;;;;;10495:914:11:o;16673:121::-;16720:7;16636:21;16531:14;;16747:39;;;;:::i;763:95:4:-;807:16;843:7;836:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;763:95;:::o;3045:327::-;3180:24;;;719:10:1;3180:24:4;;3172:62;;;;-1:-1:-1;;;3172:62:4;;25843:2:15;3172:62:4;;;25825:21:15;25882:2;25862:18;;;25855:30;25921:27;25901:18;;;25894:55;25966:18;;3172:62:4;25641:349:15;3172:62:4;719:10:1;3247:32:4;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;3316:48;;586:41:15;;;3247:42:4;;719:10:1;3316:48:4;;559:18:15;3316:48:4;;;;;;;3045:327;;:::o;15679:116:11:-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;15756:18:11::1;:31:::0;15679:116::o;14605:187::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;14697:9:11::1;;14683:10;:23;;14675:65;;;::::0;-1:-1:-1;;;14675:65:11;;26197:2:15;14675:65:11::1;::::0;::::1;26179:21:15::0;26236:2;26216:18;;;26209:30;26275:31;26255:18;;;26248:59;26324:18;;14675:65:11::1;25995:353:15::0;14675:65:11::1;14774:10;14762:9;;:22;;;;:::i;:::-;14751:8;:33:::0;-1:-1:-1;14605:187:11:o;4179:365:4:-;4368:41;719:10:1;4401:7:4;4368:18;:41::i;:::-;4346:140;;;;-1:-1:-1;;;4346:140:4;;16481:2:15;4346:140:4;;;16463:21:15;16520:2;16500:18;;;16493:30;16559:34;16539:18;;;16532:62;16630:19;16610:18;;;16603:47;16667:19;;4346:140:4;16279:413:15;4346:140:4;4497:39;4511:4;4517:2;4521:7;4530:5;4497:13;:39::i;15803:201:11:-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;15913:38:11::1;15935:15;15913:21;:38::i;:::-;15962:34;15982:13;15962:19;:34::i;3406:142::-:0;3515:25;;;3470:7;3515:25;;;:19;:25;;;;;;;;;3497:9;:15;;;;;;:43;;3515:25;3497:43;:::i;9524:852::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;9638:35:11;;::::1;9630:99;;;::::0;-1:-1:-1;;;9630:99:11;;25423:2:15;9630:99:11::1;::::0;::::1;25405:21:15::0;25462:2;25442:18;;;25435:30;25501:34;25481:18;;;25474:62;25572:21;25552:18;;;25545:49;25611:19;;9630:99:11::1;25221:415:15::0;9630:99:11::1;9788:7;:14:::0;9740:21:::1;::::0;;9813:101:::1;9833:19:::0;;::::1;9813:101;;;9891:8;;9900:1;9891:11;;;;;;;:::i;:::-;;;;;;;9874:28;;;;;:::i;:::-;::::0;-1:-1:-1;9854:3:11::1;::::0;::::1;:::i;:::-;;;9813:101;;;-1:-1:-1::0;9953:9:11::1;::::0;9932:17:::1;9936:13:::0;9932:1;:17:::1;:::i;:::-;:30;;9924:61;;;::::0;-1:-1:-1;;;9924:61:11;;23208:2:15;9924:61:11::1;::::0;::::1;23190:21:15::0;23247:2;23227:18;;;23220:30;23286:20;23266:18;;;23259:48;23324:18;;9924:61:11::1;23006:342:15::0;9924:61:11::1;10021:8;;10004:13;:25;;9996:58;;;::::0;-1:-1:-1;;;9996:58:11;;24670:2:15;9996:58:11::1;::::0;::::1;24652:21:15::0;24709:2;24689:18;;;24682:30;24748:22;24728:18;;;24721:50;24788:18;;9996:58:11::1;24468:344:15::0;9996:58:11::1;10121:13;10109:8;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10145:20:11::1;::::0;-1:-1:-1;10145:20:11;;-1:-1:-1;10176:174:11::1;10196:20:::0;;::::1;10176:174;;;10243:9;10238:101;10262:8;;10271:1;10262:11;;;;;;;:::i;:::-;;;;;;;10258:1;:15;10238:101;;;10299:24;10305:9;;10315:1;10305:12;;;;;;;:::i;10299:24::-;10275:3;::::0;::::1;:::i;:::-;;;10238:101;;;-1:-1:-1::0;10218:3:11::1;::::0;::::1;:::i;:::-;;;10176:174;;13897:96:::0;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;13965:8:11::1;:20:::0;13897:96::o;12970:339::-;13043:13;13077:16;13085:7;13077;:16::i;:::-;13069:62;;;;-1:-1:-1;;;13069:62:11;;26555:2:15;13069:62:11;;;26537:21:15;26594:2;26574:18;;;26567:30;26633:34;26613:18;;;26606:62;26704:3;26684:18;;;26677:31;26725:19;;13069:62:11;26353:397:15;13069:62:11;13142:28;13173:10;:8;:10::i;:::-;13142:41;;13232:1;13207:14;13201:28;:32;:100;;;;;;;;;;;;;;;;;13260:14;13276:18;:7;:16;:18::i;:::-;13243:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13201:100;13194:107;12970:339;-1:-1:-1;;;12970:339:11:o;14135:136::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;14223:18:11::1;:40:::0;14135:136::o;17258:401::-;17470:20;;17514:28;;;;;17470:20;1797:55:15;;;17514:28:11;;;1779:74:15;17347:4:11;;17470:20;;;17506:49;;;;17470:20;;17514:21;;1752:18:15;;17514:28:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17506:49;;;17502:93;;;17579:4;17572:11;;;;;17502:93;3551:25:4;;;;3522:4;3551:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;17612:39:11;17605:46;17258:401;-1:-1:-1;;;;17258:401:11:o;1911:198:12:-;1101:6;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;1999:22:::1;::::0;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:12;;27717:2:15;1991:73:12::1;::::0;::::1;27699:21:15::0;27756:2;27736:18;;;27729:30;27795:34;27775:18;;;27768:62;27866:8;27846:18;;;27839:36;27892:19;;1991:73:12::1;27515:402:15::0;1991:73:12::1;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;12306:220:11:-;12412:9;12407:112;12431:9;:16;12427:1;:20;12407:112;;;12469:38;12482:5;12489:3;12494:9;12504:1;12494:12;;;;;;;;:::i;:::-;;;;;;;12469;:38::i;:::-;12449:3;;;;:::i;:::-;;;;12407:112;;15021:125;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;15102:16:11::1;:36:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;15021:125::o;14001:126::-;1101:6:12;;1241:23;1101:6;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;16120:2:15;1233:68:12;;;16102:21:15;;;16139:18;;;16132:30;16198:34;16178:18;;;16171:62;16250:18;;1233:68:12;15918:356:15;1233:68:12;14084:19:11::1;:35:::0;14001:126::o;866:355:4:-;1013:4;1055:40;;;1070:25;1055:40;;:105;;-1:-1:-1;1112:48:4;;;1127:33;1112:48;1055:105;:158;;;-1:-1:-1;952:25:2;937:40;;;;1177:36:4;829:155:2;4912::4;5011:7;:14;4977:4;;5001:24;;:58;;;;;5057:1;5029:30;;:7;5037;5029:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;:30;;4994:65;4912:155;-1:-1:-1;;4912:155:4:o;7240:175::-;7315:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;7369;7315;7369:15;:24::i;:::-;7360:47;;;;;;;;;;;;7240:175;;:::o;5075:453::-;5204:4;5248:16;5256:7;5248;:16::i;:::-;5226:110;;;;-1:-1:-1;;;5226:110:4;;28124:2:15;5226:110:4;;;28106:21:15;28163:2;28143:18;;;28136:30;28202:34;28182:18;;;28175:62;28273:14;28253:18;;;28246:42;28305:19;;5226:110:4;27922:408:15;5226:110:4;5347:13;5363:24;5379:7;5363:15;:24::i;:::-;5347:40;;5417:5;5406:16;;:7;:16;;;:64;;;;5463:7;5439:31;;:20;5451:7;5439:11;:20::i;:::-;:31;;;5406:64;:113;;;;5487:32;5504:5;5511:7;5487:16;:32::i;6678:554::-;6852:4;6824:32;;:24;6840:7;6824:15;:24::i;:::-;:32;;;6802:123;;;;-1:-1:-1;;;6802:123:4;;28537:2:15;6802:123:4;;;28519:21:15;28576:2;28556:18;;;28549:30;28615:34;28595:18;;;28588:62;28686:11;28666:18;;;28659:39;28715:19;;6802:123:4;28335:405:15;6802:123:4;6944:16;;;6936:65;;;;-1:-1:-1;;;6936:65:4;;28947:2:15;6936:65:4;;;28929:21:15;28986:2;28966:18;;;28959:30;29025:34;29005:18;;;28998:62;29096:6;29076:18;;;29069:34;29120:19;;6936:65:4;28745:400:15;6936:65:4;7118:29;7135:1;7139:7;7118:8;:29::i;:::-;7177:2;7158:7;7166;7158:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;;;;;;;;7197:27;;7216:7;;7197:27;;;;;;;;;;7158:16;7197:27;6678:554;;;:::o;4882:248:11:-;4983:7;5004:9;5015;5026:7;5037:26;5052:10;5037:14;:26::i;:::-;5081:41;;;;;;;;;;;;29377:25:15;;;29450:4;29438:17;;29418:18;;;29411:45;;;;29472:18;;;29465:34;;;29515:18;;;29508:34;;;5003:60:11;;-1:-1:-1;5003:60:11;;-1:-1:-1;5003:60:11;-1:-1:-1;5081:41:11;;29349:19:15;;5081:41:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5081:41:11;;;;;;4882:248;-1:-1:-1;;;;;;;4882:248:11:o;5471:168::-;5557:7;5611;5620:9;5594:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5584:47;;;;;;5577:54;;5471:168;;;;:::o;5647:153::-;5725:4;5749:43;5768:5;5775:10;;5787:4;5749:18;:43::i;328:703:14:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:14;;;;;;;;;;;;;;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:14;;-1:-1:-1;773:2:14;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:14;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:14;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;972:11:14;981:2;972:11;;:::i;:::-;;;844:150;;12144:154:11;12225:7;:16;;;;;;;-1:-1:-1;12225:16:11;;;;;;;;;;;;;;;;;;12257:33;;12282:7;;-1:-1:-1;12257:33:11;;-1:-1:-1;;12257:33:11;12144:154;;:::o;2263:187:12:-;2355:6;;;;2371:17;;;;;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;4552:352:4:-;4709:28;4719:4;4725:2;4729:7;4709:9;:28::i;:::-;4770:48;4793:4;4799:2;4803:7;4812:5;4770:22;:48::i;:::-;4748:148;;;;-1:-1:-1;;;4748:148:4;;30186:2:15;4748:148:4;;;30168:21:15;30225:2;30205:18;;;30198:30;30264:34;30244:18;;;30237:62;30335:20;30315:18;;;30308:48;30373:19;;4748:148:4;29984:414:15;3045:99:11;3096:13;3129:7;3122:14;;;;;:::i;5142:321::-;5206:9;5217;5228:7;5256:3;:10;5270:2;5256:16;5248:53;;;;-1:-1:-1;;;5248:53:11;;30605:2:15;5248:53:11;;;30587:21:15;30644:2;30624:18;;;30617:30;30683:26;30663:18;;;30656:54;30727:18;;5248:53:11;30403:348:15;5248:53:11;-1:-1:-1;;;5356:2:11;5347:12;;5341:19;5394:2;5385:12;;5379:19;5440:2;5431:12;;;5425:19;5341;;5422:1;5417:28;;;;;5142:321::o;862:184:10:-;983:4;1035;1006:25;1019:5;1026:4;1006:12;:25::i;:::-;:33;;862:184;-1:-1:-1;;;;862:184:10:o;7423:980:4:-;7578:4;7599:13;;;1087:20:0;1133:8;7595:801:4;;7652:175;;;;;:36;;;;;;:175;;719:10:1;;7746:4:4;;7773:7;;7803:5;;7652:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7652:175:4;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7631:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8010:13:4;;8006:320;;8053:108;;-1:-1:-1;;;8053:108:4;;30186:2:15;8053:108:4;;;30168:21:15;30225:2;30205:18;;;30198:30;30264:34;30244:18;;;30237:62;30335:20;30315:18;;;30308:48;30373:19;;8053:108:4;29984:414:15;8006:320:4;8276:6;8270:13;8261:6;8257:2;8253:15;8246:38;7631:710;7891:51;;7901:41;7891:51;;-1:-1:-1;7884:58:4;;7595:801;-1:-1:-1;8380:4:4;7423:980;;;;;;:::o;1398:662:10:-;1481:7;1523:4;1481:7;1537:488;1561:5;:12;1557:1;:16;1537:488;;;1594:20;1617:5;1623:1;1617:8;;;;;;;;:::i;:::-;;;;;;;1594:31;;1659:12;1643;:28;1639:376;;2134:13;2182:15;;;2217:4;2210:15;;;2263:4;2247:21;;1769:57;;1639:376;;;2134:13;2182:15;;;2217:4;2210:15;;;2263:4;2247:21;;1943:57;;1639:376;-1:-1:-1;1575:3:10;;;;:::i;:::-;;;;1537:488;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:177:15;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:15;868:16;;861:27;638:258::o;901:317::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1132:2;1120:15;1137:66;1116:88;1107:98;;;;1207:4;1103:109;;901:317;-1:-1:-1;;901:317:15:o;1223:220::-;1372:2;1361:9;1354:21;1335:4;1392:45;1433:2;1422:9;1418:18;1410:6;1392:45;:::i;1448:180::-;1507:6;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;-1:-1:-1;1599:23:15;;1448:180;-1:-1:-1;1448:180:15:o;1864:154::-;1950:42;1943:5;1939:54;1932:5;1929:65;1919:93;;2008:1;2005;1998:12;2023:315;2091:6;2099;2152:2;2140:9;2131:7;2127:23;2123:32;2120:52;;;2168:1;2165;2158:12;2120:52;2207:9;2194:23;2226:31;2251:5;2226:31;:::i;:::-;2276:5;2328:2;2313:18;;;;2300:32;;-1:-1:-1;;;2023:315:15:o;2525:456::-;2602:6;2610;2618;2671:2;2659:9;2650:7;2646:23;2642:32;2639:52;;;2687:1;2684;2677:12;2639:52;2726:9;2713:23;2745:31;2770:5;2745:31;:::i;:::-;2795:5;-1:-1:-1;2852:2:15;2837:18;;2824:32;2865:33;2824:32;2865:33;:::i;:::-;2525:456;;2917:7;;-1:-1:-1;;;2971:2:15;2956:18;;;;2943:32;;2525:456::o;2986:367::-;3049:8;3059:6;3113:3;3106:4;3098:6;3094:17;3090:27;3080:55;;3131:1;3128;3121:12;3080:55;-1:-1:-1;3154:20:15;;3197:18;3186:30;;3183:50;;;3229:1;3226;3219:12;3183:50;3266:4;3258:6;3254:17;3242:29;;3326:3;3319:4;3309:6;3306:1;3302:14;3294:6;3290:27;3286:38;3283:47;3280:67;;;3343:1;3340;3333:12;3280:67;2986:367;;;;;:::o;3358:773::-;3480:6;3488;3496;3504;3557:2;3545:9;3536:7;3532:23;3528:32;3525:52;;;3573:1;3570;3563:12;3525:52;3613:9;3600:23;3642:18;3683:2;3675:6;3672:14;3669:34;;;3699:1;3696;3689:12;3669:34;3738:70;3800:7;3791:6;3780:9;3776:22;3738:70;:::i;:::-;3827:8;;-1:-1:-1;3712:96:15;-1:-1:-1;3915:2:15;3900:18;;3887:32;;-1:-1:-1;3931:16:15;;;3928:36;;;3960:1;3957;3950:12;3928:36;;3999:72;4063:7;4052:8;4041:9;4037:24;3999:72;:::i;:::-;3358:773;;;;-1:-1:-1;4090:8:15;-1:-1:-1;;;;3358:773:15:o;4136:160::-;4201:20;;4257:13;;4250:21;4240:32;;4230:60;;4286:1;4283;4276:12;4230:60;4136:160;;;:::o;4301:180::-;4357:6;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;4449:26;4465:9;4449:26;:::i;4486:184::-;4538:77;4535:1;4528:88;4635:4;4632:1;4625:15;4659:4;4656:1;4649:15;4675:334;4746:2;4740:9;4802:2;4792:13;;4807:66;4788:86;4776:99;;4905:18;4890:34;;4926:22;;;4887:62;4884:88;;;4952:18;;:::i;:::-;4988:2;4981:22;4675:334;;-1:-1:-1;4675:334:15:o;5014:589::-;5056:5;5109:3;5102:4;5094:6;5090:17;5086:27;5076:55;;5127:1;5124;5117:12;5076:55;5163:6;5150:20;5189:18;5185:2;5182:26;5179:52;;;5211:18;;:::i;:::-;5255:114;5363:4;5294:66;5287:4;5283:2;5279:13;5275:86;5271:97;5255:114;:::i;:::-;5394:2;5385:7;5378:19;5440:3;5433:4;5428:2;5420:6;5416:15;5412:26;5409:35;5406:55;;;5457:1;5454;5447:12;5406:55;5522:2;5515:4;5507:6;5503:17;5496:4;5487:7;5483:18;5470:55;5570:1;5545:16;;;5563:4;5541:27;5534:38;;;;5549:7;5014:589;-1:-1:-1;;;5014:589:15:o;5608:455::-;5685:6;5693;5746:2;5734:9;5725:7;5721:23;5717:32;5714:52;;;5762:1;5759;5752:12;5714:52;5801:9;5788:23;5820:31;5845:5;5820:31;:::i;:::-;5870:5;-1:-1:-1;5926:2:15;5911:18;;5898:32;5953:18;5942:30;;5939:50;;;5985:1;5982;5975:12;5939:50;6008:49;6049:7;6040:6;6029:9;6025:22;6008:49;:::i;:::-;5998:59;;;5608:455;;;;;:::o;6068:321::-;6137:6;6190:2;6178:9;6169:7;6165:23;6161:32;6158:52;;;6206:1;6203;6196:12;6158:52;6246:9;6233:23;6279:18;6271:6;6268:30;6265:50;;;6311:1;6308;6301:12;6265:50;6334:49;6375:7;6366:6;6355:9;6351:22;6334:49;:::i;6394:657::-;6499:6;6507;6515;6568:2;6556:9;6547:7;6543:23;6539:32;6536:52;;;6584:1;6581;6574:12;6536:52;6624:9;6611:23;6653:18;6694:2;6686:6;6683:14;6680:34;;;6710:1;6707;6700:12;6680:34;6733:49;6774:7;6765:6;6754:9;6750:22;6733:49;:::i;:::-;6723:59;;6835:2;6824:9;6820:18;6807:32;6791:48;;6864:2;6854:8;6851:16;6848:36;;;6880:1;6877;6870:12;6848:36;;6919:72;6983:7;6972:8;6961:9;6957:24;6919:72;:::i;:::-;6394:657;;7010:8;;-1:-1:-1;6893:98:15;;-1:-1:-1;;;;6394:657:15:o;7056:183::-;7116:4;7149:18;7141:6;7138:30;7135:56;;;7171:18;;:::i;:::-;-1:-1:-1;7216:1:15;7212:14;7228:4;7208:25;;7056:183::o;7244:1247::-;7364:6;7372;7380;7388;7441:3;7429:9;7420:7;7416:23;7412:33;7409:53;;;7458:1;7455;7448:12;7409:53;7494:9;7481:23;7471:33;;7523:2;7572;7561:9;7557:18;7544:32;7534:42;;7627:2;7616:9;7612:18;7599:32;7650:18;7691:2;7683:6;7680:14;7677:34;;;7707:1;7704;7697:12;7677:34;7745:6;7734:9;7730:22;7720:32;;7790:7;7783:4;7779:2;7775:13;7771:27;7761:55;;7812:1;7809;7802:12;7761:55;7848:2;7835:16;7871:60;7887:43;7927:2;7887:43;:::i;:::-;7871:60;:::i;:::-;7965:15;;;8047:1;8043:10;;;;8035:19;;8031:28;;;7996:12;;;;8071:19;;;8068:39;;;8103:1;8100;8093:12;8068:39;8127:11;;;;8147:142;8163:6;8158:3;8155:15;8147:142;;;8229:17;;8217:30;;8180:12;;;;8267;;;;8147:142;;;8308:5;-1:-1:-1;;;8366:2:15;8351:18;;8338:32;;-1:-1:-1;8382:16:15;;;8379:36;;;8411:1;8408;8401:12;8379:36;;;8434:51;8477:7;8466:8;8455:9;8451:24;8434:51;:::i;:::-;8424:61;;;7244:1247;;;;;;;:::o;8496:247::-;8555:6;8608:2;8596:9;8587:7;8583:23;8579:32;8576:52;;;8624:1;8621;8614:12;8576:52;8663:9;8650:23;8682:31;8707:5;8682:31;:::i;8933:454::-;9028:6;9036;9044;9052;9060;9113:3;9101:9;9092:7;9088:23;9084:33;9081:53;;;9130:1;9127;9120:12;9081:53;-1:-1:-1;;9153:23:15;;;9223:2;9208:18;;9195:32;;-1:-1:-1;9274:2:15;9259:18;;9246:32;;9325:2;9310:18;;9297:32;;-1:-1:-1;9376:3:15;9361:19;9348:33;;-1:-1:-1;8933:454:15;-1:-1:-1;8933:454:15:o;9392:632::-;9563:2;9615:21;;;9685:13;;9588:18;;;9707:22;;;9534:4;;9563:2;9786:15;;;;9760:2;9745:18;;;9534:4;9829:169;9843:6;9840:1;9837:13;9829:169;;;9904:13;;9892:26;;9973:15;;;;9938:12;;;;9865:1;9858:9;9829:169;;;-1:-1:-1;10015:3:15;;9392:632;-1:-1:-1;;;;;;9392:632:15:o;10029:388::-;10106:6;10114;10167:2;10155:9;10146:7;10142:23;10138:32;10135:52;;;10183:1;10180;10173:12;10135:52;10219:9;10206:23;10196:33;;10280:2;10269:9;10265:18;10252:32;10307:18;10299:6;10296:30;10293:50;;;10339:1;10336;10329:12;10422:315;10490:6;10498;10551:2;10539:9;10530:7;10526:23;10522:32;10519:52;;;10567:1;10564;10557:12;10519:52;10603:9;10590:23;10580:33;;10663:2;10652:9;10648:18;10635:32;10676:31;10701:5;10676:31;:::i;:::-;10726:5;10716:15;;;10422:315;;;;;:::o;10742:681::-;10913:2;10965:21;;;11035:13;;10938:18;;;11057:22;;;10884:4;;10913:2;11136:15;;;;11110:2;11095:18;;;10884:4;11179:218;11193:6;11190:1;11187:13;11179:218;;;11258:13;;11273:42;11254:62;11242:75;;11372:15;;;;11337:12;;;;11215:1;11208:9;11179:218;;11428:315;11493:6;11501;11554:2;11542:9;11533:7;11529:23;11525:32;11522:52;;;11570:1;11567;11560:12;11522:52;11609:9;11596:23;11628:31;11653:5;11628:31;:::i;:::-;11678:5;-1:-1:-1;11702:35:15;11733:2;11718:18;;11702:35;:::i;:::-;11692:45;;11428:315;;;;;:::o;11748:665::-;11843:6;11851;11859;11867;11920:3;11908:9;11899:7;11895:23;11891:33;11888:53;;;11937:1;11934;11927:12;11888:53;11976:9;11963:23;11995:31;12020:5;11995:31;:::i;:::-;12045:5;-1:-1:-1;12102:2:15;12087:18;;12074:32;12115:33;12074:32;12115:33;:::i;:::-;12167:7;-1:-1:-1;12221:2:15;12206:18;;12193:32;;-1:-1:-1;12276:2:15;12261:18;;12248:32;12303:18;12292:30;;12289:50;;;12335:1;12332;12325:12;12289:50;12358:49;12399:7;12390:6;12379:9;12375:22;12358:49;:::i;12418:248::-;12486:6;12494;12547:2;12535:9;12526:7;12522:23;12518:32;12515:52;;;12563:1;12560;12553:12;12515:52;-1:-1:-1;;12586:23:15;;;12656:2;12641:18;;;12628:32;;-1:-1:-1;12418:248:15:o;12671:388::-;12739:6;12747;12800:2;12788:9;12779:7;12775:23;12771:32;12768:52;;;12816:1;12813;12806:12;12768:52;12855:9;12842:23;12874:31;12899:5;12874:31;:::i;:::-;12924:5;-1:-1:-1;12981:2:15;12966:18;;12953:32;12994:33;12953:32;12994:33;:::i;13064:1167::-;13166:6;13174;13182;13235:2;13223:9;13214:7;13210:23;13206:32;13203:52;;;13251:1;13248;13241:12;13203:52;13290:9;13277:23;13309:31;13334:5;13309:31;:::i;:::-;13359:5;-1:-1:-1;13383:2:15;13422:18;;;13409:32;13450:33;13409:32;13450:33;:::i;:::-;13502:7;-1:-1:-1;13560:2:15;13545:18;;13532:32;13587:18;13576:30;;13573:50;;;13619:1;13616;13609:12;13573:50;13642:22;;13695:4;13687:13;;13683:27;-1:-1:-1;13673:55:15;;13724:1;13721;13714:12;13673:55;13760:2;13747:16;13783:60;13799:43;13839:2;13799:43;:::i;13783:60::-;13877:15;;;13959:1;13955:10;;;;13947:19;;13943:28;;;13908:12;;;;13983:19;;;13980:39;;;14015:1;14012;14005:12;13980:39;14039:11;;;;14059:142;14075:6;14070:3;14067:15;14059:142;;;14141:17;;14129:30;;14092:12;;;;14179;;;;14059:142;;;14220:5;14210:15;;;;;;;13064:1167;;;;;:::o;14236:437::-;14315:1;14311:12;;;;14358;;;14379:61;;14433:4;14425:6;14421:17;14411:27;;14379:61;14486:2;14478:6;14475:14;14455:18;14452:38;14449:218;;;14523:77;14520:1;14513:88;14624:4;14621:1;14614:15;14652:4;14649:1;14642:15;14449:218;;14236:437;;;:::o;17048:184::-;17100:77;17097:1;17090:88;17197:4;17194:1;17187:15;17221:4;17218:1;17211:15;17237:184;17289:77;17286:1;17279:88;17386:4;17383:1;17376:15;17410:4;17407:1;17400:15;17426:195;17465:3;17496:66;17489:5;17486:77;17483:103;;;17566:18;;:::i;:::-;-1:-1:-1;17613:1:15;17602:13;;17426:195::o;18254:128::-;18294:3;18325:1;18321:6;18318:1;18315:13;18312:39;;;18331:18;;:::i;:::-;-1:-1:-1;18367:9:15;;18254:128::o;21599:228::-;21639:7;21765:1;21697:66;21693:74;21690:1;21687:81;21682:1;21675:9;21668:17;21664:105;21661:131;;;21772:18;;:::i;:::-;-1:-1:-1;21812:9:15;;21599:228::o;22876:125::-;22916:4;22944:1;22941;22938:8;22935:34;;;22949:18;;:::i;:::-;-1:-1:-1;22986:9:15;;22876:125::o;26755:470::-;26934:3;26972:6;26966:13;26988:53;27034:6;27029:3;27022:4;27014:6;27010:17;26988:53;:::i;:::-;27104:13;;27063:16;;;;27126:57;27104:13;27063:16;27160:4;27148:17;;27126:57;:::i;:::-;27199:20;;26755:470;-1:-1:-1;;;;26755:470:15:o;27230:280::-;27329:6;27382:2;27370:9;27361:7;27357:23;27353:32;27350:52;;;27398:1;27395;27388:12;27350:52;27430:9;27424:16;27449:31;27474:5;27449:31;:::i;29553:184::-;29605:77;29602:1;29595:88;29702:4;29699:1;29692:15;29726:4;29723:1;29716:15;29742:120;29782:1;29808;29798:35;;29813:18;;:::i;:::-;-1:-1:-1;29847:9:15;;29742:120::o;29867:112::-;29899:1;29925;29915:35;;29930:18;;:::i;:::-;-1:-1:-1;29964:9:15;;29867:112::o;30756:512::-;30950:4;30979:42;31060:2;31052:6;31048:15;31037:9;31030:34;31112:2;31104:6;31100:15;31095:2;31084:9;31080:18;31073:43;;31152:6;31147:2;31136:9;31132:18;31125:34;31195:3;31190:2;31179:9;31175:18;31168:31;31216:46;31257:3;31246:9;31242:19;31234:6;31216:46;:::i;:::-;31208:54;30756:512;-1:-1:-1;;;;;;30756:512:15:o;31273:249::-;31342:6;31395:2;31383:9;31374:7;31370:23;31366:32;31363:52;;;31411:1;31408;31401:12;31363:52;31443:9;31437:16;31462:30;31486:5;31462:30;:::i
Swarm Source
ipfs://c3e6651d8a507b796c46e777d6e640a0336a626ff24f6d44c4ef3fff58398051
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.