Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
10,000 CCNFT
Holders
2,836
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CCNFTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Chameleon
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-03 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* Fully commented standard ERC721 Distilled from OpenZeppelin Docs Base for Building ERC721 by Martin McConnell All the utility without the fluff. */ interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } 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`. 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; } 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); } 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); } 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract Functional { function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } bool private _reentryKey = false; modifier reentryLock { require(!_reentryKey, "attempt to reenter a locked function"); _reentryKey = true; _; _reentryKey = false; } } contract ERC721 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance){} function ownerOf(uint256 tokenId) external view returns (address owner){} function safeTransferFrom(address from,address to,uint256 tokenId) external{} function transferFrom(address from, address to, uint256 tokenId) external{} function approve(address to, uint256 tokenId) external{} function getApproved(uint256 tokenId) external view returns (address operator){} function setApprovalForAll(address operator, bool _approved) external{} function isApprovedForAll(address owner, address operator) external view returns (bool){} function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external{} } // ****************************************************************************************************************************** // ************************************************** Start of Main Contract *************************************************** // ****************************************************************************************************************************** contract Chameleon is IERC721, Ownable, Functional { using Address for address; // Token name string private _name; // Token symbol string private _symbol; // URI Root Location for Json Files string private _baseURI; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Specific Functionality bool public mintActive; bool public whitelistActive; bool public discountMintActive; bool private _hideTokens; //for URI redirects uint256 public price; uint256 public totalTokens; uint256 public numberMinted; uint256 public maxPerWallet; uint256 public whitelistMax; uint256 public reservedTokens; uint256 public discountPrice; uint256 public whitelistPrice; ERC721[] private _contractList; mapping(address => uint256) private _tokensMintedby; mapping(address => bool) private _whitelist; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor() { _name = "Chameleon Collective"; _symbol = "CCNFT"; _baseURI = "https://chameleoncollective.io/metadata/"; _hideTokens = true; totalTokens = 10000; // 0-9999 price = 45 * (10 ** 15); // Replace leading value with price in finney whitelistPrice = 40 * (10 ** 15); discountPrice = 35 * (10 ** 15); maxPerWallet = 100; whitelistMax = 100; reservedTokens = 300; // reserved for giveaways and such } //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC165).interfaceId || interfaceId == Chameleon.onERC721Received.selector; } // Standard Withdraw function for the owner to pull the contract function withdraw() external onlyOwner { uint256 sendAmount = address(this).balance; address cmanager = payable(0x543874CeA651a5Dd4CDF88B2Ed9B92aF57b8507E); address founder = payable(0xF561266D093c73F67c7CAA2Ab74CC71a43554e57); address coo = payable(0xa4D4FeA9799cd5015955f248994D445C6bEB9436); address marketing = payable(0x17895988aB2B64f041813936bF46Fb9133a6B160); address dev = payable(0x2496286BDB820d40C402802F828ae265b244188A); address community = payable(0x855bFE65652868920729b9d92D8d6030D01e3bFF); bool success; (success, ) = cmanager.call{value: ((sendAmount * 35)/1000)}(""); require(success, "Transaction Unsuccessful"); (success, ) = founder.call{value: ((sendAmount * 175)/1000)}(""); require(success, "Transaction Unsuccessful"); (success, ) = coo.call{value: ((sendAmount * 5)/100)}(""); require(success, "Transaction Unsuccessful"); (success, ) = marketing.call{value: ((sendAmount * 5)/100)}(""); require(success, "Transaction Unsuccessful"); (success, ) = dev.call{value: ((sendAmount * 5)/100)}(""); require(success, "Transaction Unsuccessful"); (success, ) = community.call{value: ((sendAmount * 64)/100)}(""); require(success, "Transaction Unsuccessful"); } // Improved Withdraw function that implements approved wallets /* function withdraw() external { require (approvedRecipients) sendAmount = whatever was calculated (bool success, ) = msg.sender.call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); } */ function ownerMint(address _to, uint256 qty) external onlyOwner { require((numberMinted + qty) > numberMinted, "Math overflow error"); require((numberMinted + qty) < totalTokens, "Cannot fill order"); uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch if (reservedTokens >= qty) { reservedTokens -= qty; } else { reservedTokens = 0; } for(uint256 i = 0; i < qty; i++) { _safeMint(_to, mintSeedValue + i); numberMinted ++; //reservedTokens can be reset, numberMinted can not } } function airDrop(address[] memory _to) external onlyOwner { uint256 qty = _to.length; require((numberMinted + qty) > numberMinted, "Math overflow error"); require((numberMinted + qty) < totalTokens, "Cannot fill order"); uint256 mintSeedValue = numberMinted; if (reservedTokens >= qty) { reservedTokens -= qty; } else { reservedTokens = 0; } for(uint256 i = 0; i < qty; i++) { _safeMint(_to[i], mintSeedValue + i); numberMinted ++; //reservedTokens can be reset, numberMinted can not } } function discountMint(uint256 qty) external payable reentryLock { require(msg.value >= qty * discountPrice, "Mint: Insufficient Funds"); require((qty + reservedTokens + numberMinted) < totalTokens, "Mint: Not enough avaialability"); require((_tokensMintedby[_msgSender()] + qty) <= maxPerWallet, "Mint: Max tokens per wallet exceeded"); require(checkForDiscount(_msgSender()), "Discount Not Active"); //check for holders require(discountMintActive); uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch //Handle ETH transactions uint256 cashIn = msg.value; uint256 cashChange = cashIn - (qty * discountPrice); //send tokens for(uint256 i = 0; i < qty; i++) { _safeMint(_msgSender(), mintSeedValue + i); numberMinted ++; _tokensMintedby[_msgSender()] ++; } if (cashChange > 0){ (bool success, ) = msg.sender.call{value: cashChange}(""); require(success, "Mint: unable to send change to user"); } } function checkForDiscount(address toValidate) public view returns(bool) { for (uint256 i; i < _contractList.length; i++){ if (_contractList[i].balanceOf(toValidate) > 0){ return true; } } return false; } function mint(uint256 qty) external payable reentryLock { require((qty + reservedTokens + numberMinted) < totalTokens, "Mint: Not enough avaialability"); require((_tokensMintedby[_msgSender()] + qty) <= maxPerWallet, "Mint: Max tokens per wallet exceeded"); uint256 mintPrice; if(!mintActive){ mintPrice = whitelistPrice; require((_tokensMintedby[_msgSender()] + qty) <= whitelistMax, "Mint: Cannot mint more at this time"); require(_whitelist[_msgSender()], "Mint: Unauthorized Access"); require(whitelistActive, "Mint: Whitelist Mint not Open"); } else { mintPrice = price; } require(msg.value >= qty * mintPrice, "Mint: Insufficient Funds"); uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch //Handle ETH transactions uint256 cashIn = msg.value; uint256 cashChange = cashIn - (qty * mintPrice); //send tokens for(uint256 i = 0; i < qty; i++) { _safeMint(_msgSender(), mintSeedValue + i); numberMinted ++; _tokensMintedby[_msgSender()] ++; } if (cashChange > 0){ (bool success, ) = msg.sender.call{value: cashChange}(""); require(success, "Mint: unable to send change to user"); } } // allows holders to burn their own tokens if desired /* function burn(uint256 tokenID) external { require(_msgSender() == ownerOf(tokenID)); _burn(tokenID); } */ ////////////////////////////////////////////////////////////// //////////////////// Setters and Getters ///////////////////// ////////////////////////////////////////////////////////////// function addDiscountContract(address newContract) external onlyOwner { _contractList.push(ERC721(newContract)); } function setDiscountPrice(uint256 newPrice) external onlyOwner { discountPrice = newPrice; } function setWhitelistPrice(uint256 newPrice) external onlyOwner { whitelistPrice = newPrice; } function setMaxPerWallet(uint256 maxWallet) external onlyOwner { maxPerWallet = maxWallet; } function setWhitelistMax(uint256 maxWhitelist) external onlyOwner { whitelistMax = maxWhitelist; } function setBaseURI(string memory newURI) public onlyOwner { _baseURI = newURI; } function activateMint() public onlyOwner { mintActive = true; } function activateWhitelist() public onlyOwner { whitelistActive = true; } function activateDiscountMint() public onlyOwner { discountMintActive = true; } function deactivateMint() public onlyOwner { mintActive = false; } function deactivateWhitelist() public onlyOwner { whitelistActive = false; } function deactivateDiscountMint() public onlyOwner { discountMintActive = false; } function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } function whiteList(address account) external onlyOwner { _whitelist[account] = true; } function whiteListMany(address[] memory accounts) external onlyOwner { for (uint256 i; i < accounts.length; i++) { _whitelist[accounts[i]] = true; } } function checkWhitelist(address testAddress) external view returns (bool) { if (_whitelist[testAddress] == true) { return true; } return false; } function setTotalTokens(uint256 numTokens) public onlyOwner { totalTokens = numTokens; } function totalSupply() external view returns (uint256) { return numberMinted; //stupid bs for etherscan's call } function hideTokens() external onlyOwner { _hideTokens = true; } function revealTokens() external onlyOwner { _hideTokens = false; } function getBalance(address tokenAddress) view external returns (uint256) { //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != msg.sender, "ERC721: approve to caller"); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).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; } } // *********************** ERC721 Token Receiver ********************** /** * @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) { //InterfaceID=0x150b7a02 return this.onERC721Received.selector; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} // **************************************** Metadata Standard Functions ********** //@dev Returns the token collection name. function name() external view returns (string memory){ return _name; } //@dev Returns the token collection symbol. function symbol() external view returns (string memory){ return _symbol; } //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. function tokenURI(uint256 tokenId) external view returns (string memory){ require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory tokenuri; if (_hideTokens) { //redirect to mystery box tokenuri = string(abi.encodePacked(_baseURI, "mystery.json")); } else { //Input flag data here to send to reveal URI tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json")); /// 0.json 135.json } return tokenuri; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(_baseURI,"contract.json")); } // ******************************************************************************* receive() external payable {} fallback() external payable {} }
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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"activateDiscountMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newContract","type":"address"}],"name":"addDiscountContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toValidate","type":"address"}],"name":"checkForDiscount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateDiscountMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"discountMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"discountMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","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":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setDiscountPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWhitelist","type":"uint256"}],"name":"setWhitelistMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"whiteListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c620000406200018760201b60201c565b6200018f60201b60201c565b6040518060400160405280601481526020017f4368616d656c656f6e20436f6c6c656374697665000000000000000000000000815250600190805190602001906200009992919062000253565b506040518060400160405280600581526020017f43434e465400000000000000000000000000000000000000000000000000000081525060029080519060200190620000e792919062000253565b506040518060600160405280602881526020016200635a60289139600390805190602001906200011992919062000253565b506001600860036101000a81548160ff021916908315150217905550612710600a81905550669fdf42f6e48000600981905550668e1bc9bf040000601081905550667c585087238000600f819055506064600c819055506064600d8190555061012c600e8190555062000368565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002619062000303565b90600052602060002090601f016020900481019282620002855760008555620002d1565b82601f10620002a057805160ff1916838001178555620002d1565b82800160010185558215620002d1579182015b82811115620002d0578251825591602001919060010190620002b3565b5b509050620002e09190620002e4565b5090565b5b80821115620002ff576000816000905550600101620002e5565b5090565b600060028204905060018216806200031c57607f821691505b6020821081141562000333576200033262000339565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615fe280620003786000396000f3fe60806040526004361061036e5760003560e01c8063715018a6116101c6578063b5b3e214116100f7578063e740116811610095578063f2fde38b1161006f578063f2fde38b14610be1578063f64b77d414610c0a578063f8b2cb4f14610c21578063fc1a1c3614610c5e57610375565b8063e740116814610b4e578063e8a3d48514610b79578063e985e9c514610ba457610375565b8063c87b56dd116100d1578063c87b56dd14610aa8578063c91c046214610ae5578063d331205114610afc578063e268e4d314610b2557610375565b8063b5b3e21414610a3d578063b88d4fde14610a54578063bc629bf514610a7d57610375565b80638da5cb5b11610164578063a035b1fe1161013e578063a035b1fe146109a4578063a0712d68146109cf578063a22cb465146109eb578063b0b9226314610a1457610375565b80638da5cb5b1461092557806391b7f5ed1461095057806395d89b411461097957610375565b80637e1c0c09116101a05780637e1c0c091461088f57806384ad8e8f146108ba57806389e877a3146108e55780638b78c116146108fc57610375565b8063715018a614610812578063717d57d3146108295780637a7f36fe1461085257610375565b80633597d7f3116102a057806343d675651161023e57806349a772b51161021857806349a772b51461074457806355f804b31461076f5780636352211e1461079857806370a08231146107d557610375565b806343d67565146106c7578063453c2310146106f0578063484b973c1461071b57610375565b80633c68fede1161027a5780633c68fede146106545780633ccfd60b1461066b57806341de890e1461068257806342842e0e1461069e57610375565b80633597d7f3146105fd578063372c12b1146106145780633ba5939d1461063d57610375565b8063150b7a021161030d5780631950c218116102e75780631950c2181461055557806323b872dd1461059257806325fd90f3146105bb5780632e56f71e146105e657610375565b8063150b7a02146104c257806315a55347146104ff57806318160ddd1461052a57610375565b806306fdde031161034957806306fdde0314610408578063081812fc14610433578063095ea7b3146104705780630be9396e1461049957610375565b8062b6849f1461037757806301ffc9a7146103a057806302ce5813146103dd57610375565b3661037557005b005b34801561038357600080fd5b5061039e60048036038101906103999190614738565b610c89565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190614781565b610e4f565b6040516103d49190614f2b565b60405180910390f35b3480156103e957600080fd5b506103f2610fd8565b6040516103ff9190614f2b565b60405180910390f35b34801561041457600080fd5b5061041d610feb565b60405161042a9190614f61565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190614824565b61107d565b6040516104679190614ec4565b60405180910390f35b34801561047c57600080fd5b50610497600480360381019061049291906146f8565b611102565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190614824565b61120c565b005b3480156104ce57600080fd5b506104e960048036038101906104e491906145ad565b611292565b6040516104f69190614f46565b60405180910390f35b34801561050b57600080fd5b506105146112a7565b6040516105219190615303565b60405180910390f35b34801561053657600080fd5b5061053f6112ad565b60405161054c9190615303565b60405180910390f35b34801561056157600080fd5b5061057c600480360381019061057791906144ed565b6112b7565b6040516105899190614f2b565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b4919061455a565b611325565b005b3480156105c757600080fd5b506105d061137e565b6040516105dd9190614f2b565b60405180910390f35b3480156105f257600080fd5b506105fb611391565b005b34801561060957600080fd5b5061061261142a565b005b34801561062057600080fd5b5061063b600480360381019061063691906144ed565b6114c3565b005b34801561064957600080fd5b5061065261159a565b005b34801561066057600080fd5b50610669611633565b005b34801561067757600080fd5b506106806116cc565b005b61069c60048036038101906106979190614824565b611c89565b005b3480156106aa57600080fd5b506106c560048036038101906106c0919061455a565b61204f565b005b3480156106d357600080fd5b506106ee60048036038101906106e99190614738565b61206f565b005b3480156106fc57600080fd5b50610705612180565b6040516107129190615303565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d91906146f8565b612186565b005b34801561075057600080fd5b5061075961232c565b6040516107669190615303565b60405180910390f35b34801561077b57600080fd5b50610796600480360381019061079191906147db565b612332565b005b3480156107a457600080fd5b506107bf60048036038101906107ba9190614824565b6123c8565b6040516107cc9190614ec4565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906144ed565b61247a565b6040516108099190615303565b60405180910390f35b34801561081e57600080fd5b50610827612532565b005b34801561083557600080fd5b50610850600480360381019061084b9190614824565b6125ba565b005b34801561085e57600080fd5b50610879600480360381019061087491906144ed565b612640565b6040516108869190614f2b565b60405180910390f35b34801561089b57600080fd5b506108a4612748565b6040516108b19190615303565b60405180910390f35b3480156108c657600080fd5b506108cf61274e565b6040516108dc9190615303565b60405180910390f35b3480156108f157600080fd5b506108fa612754565b005b34801561090857600080fd5b50610923600480360381019061091e9190614824565b6127ed565b005b34801561093157600080fd5b5061093a612873565b6040516109479190614ec4565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190614824565b61289c565b005b34801561098557600080fd5b5061098e612922565b60405161099b9190614f61565b60405180910390f35b3480156109b057600080fd5b506109b96129b4565b6040516109c69190615303565b60405180910390f35b6109e960048036038101906109e49190614824565b6129ba565b005b3480156109f757600080fd5b50610a126004803603810190610a0d91906146b8565b612eb3565b005b348015610a2057600080fd5b50610a3b6004803603810190610a369190614824565b61301f565b005b348015610a4957600080fd5b50610a526130a5565b005b348015610a6057600080fd5b50610a7b6004803603810190610a769190614635565b61313e565b005b348015610a8957600080fd5b50610a92613199565b604051610a9f9190615303565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190614824565b61319f565b604051610adc9190614f61565b60405180910390f35b348015610af157600080fd5b50610afa61325f565b005b348015610b0857600080fd5b50610b236004803603810190610b1e91906144ed565b6132f8565b005b348015610b3157600080fd5b50610b4c6004803603810190610b479190614824565b6133da565b005b348015610b5a57600080fd5b50610b63613460565b604051610b709190614f2b565b60405180910390f35b348015610b8557600080fd5b50610b8e613473565b604051610b9b9190614f61565b60405180910390f35b348015610bb057600080fd5b50610bcb6004803603810190610bc6919061451a565b61349b565b604051610bd89190614f2b565b60405180910390f35b348015610bed57600080fd5b50610c086004803603810190610c0391906144ed565b61352f565b005b348015610c1657600080fd5b50610c1f613627565b005b348015610c2d57600080fd5b50610c486004803603810190610c4391906144ed565b6136c0565b604051610c559190615303565b60405180910390f35b348015610c6a57600080fd5b50610c7361371b565b604051610c809190615303565b60405180910390f35b610c91613721565b73ffffffffffffffffffffffffffffffffffffffff16610caf612873565b73ffffffffffffffffffffffffffffffffffffffff1614610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90615223565b60405180910390fd5b600081519050600b5481600b54610d1c9190615434565b11610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53906152e3565b60405180910390fd5b600a5481600b54610d6d9190615434565b10610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490615183565b60405180910390fd5b6000600b54905081600e5410610ddb5781600e6000828254610dcf9190615515565b92505081905550610de4565b6000600e819055505b60005b82811015610e4957610e1e848281518110610e0557610e04615769565b5b60200260200101518284610e199190615434565b613729565b600b6000815480929190610e3190615662565b91905055508080610e4190615662565b915050610de7565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f1a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f8257507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fd1575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600860019054906101000a900460ff1681565b606060018054610ffa906155ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611026906155ff565b80156110735780601f1061104857610100808354040283529160200191611073565b820191906000526020600020905b81548152906001019060200180831161105657829003601f168201915b5050505050905090565b600061108882613747565b6110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90615203565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061110d826123c8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906152a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111be57506111bd813361349b565b5b6111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f490615103565b60405180910390fd5b61120783836137b3565b505050565b611214613721565b73ffffffffffffffffffffffffffffffffffffffff16611232612873565b73ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90615223565b60405180910390fd5b80600d8190555050565b600063150b7a0260e01b905095945050505050565b600e5481565b6000600b54905090565b600060011515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561131b5760019050611320565b600090505b919050565b61132f338261386c565b61136e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611365906152c3565b60405180910390fd5b61137983838361394a565b505050565b600860009054906101000a900460ff1681565b611399613721565b73ffffffffffffffffffffffffffffffffffffffff166113b7612873565b73ffffffffffffffffffffffffffffffffffffffff161461140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490615223565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611432613721565b73ffffffffffffffffffffffffffffffffffffffff16611450612873565b73ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90615223565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6114cb613721565b73ffffffffffffffffffffffffffffffffffffffff166114e9612873565b73ffffffffffffffffffffffffffffffffffffffff161461153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690615223565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115a2613721565b73ffffffffffffffffffffffffffffffffffffffff166115c0612873565b73ffffffffffffffffffffffffffffffffffffffff1614611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d90615223565b60405180910390fd5b6000600860036101000a81548160ff021916908315150217905550565b61163b613721565b73ffffffffffffffffffffffffffffffffffffffff16611659612873565b73ffffffffffffffffffffffffffffffffffffffff16146116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690615223565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b6116d4613721565b73ffffffffffffffffffffffffffffffffffffffff166116f2612873565b73ffffffffffffffffffffffffffffffffffffffff1614611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f90615223565b60405180910390fd5b6000479050600073543874cea651a5dd4cdf88b2ed9b92af57b8507e9050600073f561266d093c73f67c7caa2ab74cc71a43554e579050600073a4d4fea9799cd5015955f248994d445c6beb9436905060007317895988ab2b64f041813936bf46fb9133a6b16090506000732496286bdb820d40c402802f828ae265b244188a9050600073855bfe65652868920729b9d92d8d6030d01e3bff905060008673ffffffffffffffffffffffffffffffffffffffff166103e860238a61180c91906154bb565b611816919061548a565b60405161182290614eaf565b60006040518083038185875af1925050503d806000811461185f576040519150601f19603f3d011682016040523d82523d6000602084013e611864565b606091505b505080915050806118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a190615063565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166103e860af8a6118d191906154bb565b6118db919061548a565b6040516118e790614eaf565b60006040518083038185875af1925050503d8060008114611924576040519150601f19603f3d011682016040523d82523d6000602084013e611929565b606091505b5050809150508061196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690615063565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16606460058a61199591906154bb565b61199f919061548a565b6040516119ab90614eaf565b60006040518083038185875af1925050503d80600081146119e8576040519150601f19603f3d011682016040523d82523d6000602084013e6119ed565b606091505b50508091505080611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90615063565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16606460058a611a5991906154bb565b611a63919061548a565b604051611a6f90614eaf565b60006040518083038185875af1925050503d8060008114611aac576040519150601f19603f3d011682016040523d82523d6000602084013e611ab1565b606091505b50508091505080611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee90615063565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16606460058a611b1d91906154bb565b611b27919061548a565b604051611b3390614eaf565b60006040518083038185875af1925050503d8060008114611b70576040519150601f19603f3d011682016040523d82523d6000602084013e611b75565b606091505b50508091505080611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290615063565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16606460408a611be191906154bb565b611beb919061548a565b604051611bf790614eaf565b60006040518083038185875af1925050503d8060008114611c34576040519150601f19603f3d011682016040523d82523d6000602084013e611c39565b606091505b50508091505080611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690615063565b60405180910390fd5b5050505050505050565b600060149054906101000a900460ff1615611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd0906150e3565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600f5481611d0291906154bb565b341015611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90615243565b60405180910390fd5b600a54600b54600e5483611d589190615434565b611d629190615434565b10611da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9990614f83565b60405180910390fd5b600c548160126000611db2613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df79190615434565b1115611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90615023565b60405180910390fd5b611e48611e43613721565b612640565b611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e906151e3565b60405180910390fd5b600860029054906101000a900460ff16611ea057600080fd5b6000600b54905060003490506000600f5484611ebc91906154bb565b82611ec79190615515565b905060005b84811015611f7757611ef0611edf613721565b8286611eeb9190615434565b613729565b600b6000815480929190611f0390615662565b919050555060126000611f14613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f5f90615662565b91905055508080611f6f90615662565b915050611ecc565b50600081111561202f5760003373ffffffffffffffffffffffffffffffffffffffff1682604051611fa790614eaf565b60006040518083038185875af1925050503d8060008114611fe4576040519150601f19603f3d011682016040523d82523d6000602084013e611fe9565b606091505b505090508061202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614fa3565b60405180910390fd5b505b50505060008060146101000a81548160ff02191690831515021790555050565b61206a8383836040518060200160405280600081525061313e565b505050565b612077613721565b73ffffffffffffffffffffffffffffffffffffffff16612095612873565b73ffffffffffffffffffffffffffffffffffffffff16146120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290615223565b60405180910390fd5b60005b815181101561217c576001601360008484815181106121105761210f615769565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061217490615662565b9150506120ee565b5050565b600c5481565b61218e613721565b73ffffffffffffffffffffffffffffffffffffffff166121ac612873565b73ffffffffffffffffffffffffffffffffffffffff1614612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990615223565b60405180910390fd5b600b5481600b546122139190615434565b11612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906152e3565b60405180910390fd5b600a5481600b546122649190615434565b106122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90615183565b60405180910390fd5b6000600b54905081600e54106122d25781600e60008282546122c69190615515565b925050819055506122db565b6000600e819055505b60005b82811015612326576122fb8482846122f69190615434565b613729565b600b600081548092919061230e90615662565b9190505550808061231e90615662565b9150506122de565b50505050565b600b5481565b61233a613721565b73ffffffffffffffffffffffffffffffffffffffff16612358612873565b73ffffffffffffffffffffffffffffffffffffffff16146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590615223565b60405180910390fd5b80600390805190602001906123c49291906141f8565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890615143565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290615123565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61253a613721565b73ffffffffffffffffffffffffffffffffffffffff16612558612873565b73ffffffffffffffffffffffffffffffffffffffff16146125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590615223565b60405180910390fd5b6125b86000613ba6565b565b6125c2613721565b73ffffffffffffffffffffffffffffffffffffffff166125e0612873565b73ffffffffffffffffffffffffffffffffffffffff1614612636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d90615223565b60405180910390fd5b8060108190555050565b6000805b60118054905081101561273d5760006011828154811061266757612666615769565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016126ca9190614ec4565b60206040518083038186803b1580156126e257600080fd5b505afa1580156126f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271a9190614851565b111561272a576001915050612743565b808061273590615662565b915050612644565b50600090505b919050565b600a5481565b600f5481565b61275c613721565b73ffffffffffffffffffffffffffffffffffffffff1661277a612873565b73ffffffffffffffffffffffffffffffffffffffff16146127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c790615223565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b6127f5613721565b73ffffffffffffffffffffffffffffffffffffffff16612813612873565b73ffffffffffffffffffffffffffffffffffffffff1614612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286090615223565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6128a4613721565b73ffffffffffffffffffffffffffffffffffffffff166128c2612873565b73ffffffffffffffffffffffffffffffffffffffff1614612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f90615223565b60405180910390fd5b8060098190555050565b606060028054612931906155ff565b80601f016020809104026020016040519081016040528092919081815260200182805461295d906155ff565b80156129aa5780601f1061297f576101008083540402835291602001916129aa565b820191906000526020600020905b81548152906001019060200180831161298d57829003601f168201915b5050505050905090565b60095481565b600060149054906101000a900460ff1615612a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a01906150e3565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600a54600b54600e5483612a399190615434565b612a439190615434565b10612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a90614f83565b60405180910390fd5b600c548160126000612a93613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad89190615434565b1115612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1090615023565b60405180910390fd5b6000600860009054906101000a900460ff16612cb1576010549050600d548260126000612b44613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b899190615434565b1115612bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc190615043565b60405180910390fd5b60136000612bd6613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c54906151a3565b60405180910390fd5b600860019054906101000a900460ff16612cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca390615163565b60405180910390fd5b612cb7565b60095490505b8082612cc391906154bb565b341015612d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfc90615243565b60405180910390fd5b6000600b549050600034905060008385612d1f91906154bb565b82612d2a9190615515565b905060005b85811015612dda57612d53612d42613721565b8286612d4e9190615434565b613729565b600b6000815480929190612d6690615662565b919050555060126000612d77613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612dc290615662565b91905055508080612dd290615662565b915050612d2f565b506000811115612e925760003373ffffffffffffffffffffffffffffffffffffffff1682604051612e0a90614eaf565b60006040518083038185875af1925050503d8060008114612e47576040519150601f19603f3d011682016040523d82523d6000602084013e612e4c565b606091505b5050905080612e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8790614fa3565b60405180910390fd5b505b5050505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f19906150a3565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516130139190614f2b565b60405180910390a35050565b613027613721565b73ffffffffffffffffffffffffffffffffffffffff16613045612873565b73ffffffffffffffffffffffffffffffffffffffff161461309b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309290615223565b60405180910390fd5b80600a8190555050565b6130ad613721565b73ffffffffffffffffffffffffffffffffffffffff166130cb612873565b73ffffffffffffffffffffffffffffffffffffffff1614613121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311890615223565b60405180910390fd5b6001600860036101000a81548160ff021916908315150217905550565b613148338361386c565b613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e906152c3565b60405180910390fd5b61319384848484613c6a565b50505050565b600d5481565b60606131aa82613747565b6131e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e090615283565b60405180910390fd5b6060600860039054906101000a900460ff16156132285760036040516020016132129190614e8d565b6040516020818303038152906040529050613256565b600361323384613cc6565b604051602001613244929190614e3c565b60405160208183030381529060405290505b80915050919050565b613267613721565b73ffffffffffffffffffffffffffffffffffffffff16613285612873565b73ffffffffffffffffffffffffffffffffffffffff16146132db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d290615223565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b613300613721565b73ffffffffffffffffffffffffffffffffffffffff1661331e612873565b73ffffffffffffffffffffffffffffffffffffffff1614613374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336b90615223565b60405180910390fd5b6011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6133e2613721565b73ffffffffffffffffffffffffffffffffffffffff16613400612873565b73ffffffffffffffffffffffffffffffffffffffff1614613456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344d90615223565b60405180910390fd5b80600c8190555050565b600860029054906101000a900460ff1681565b606060036040516020016134879190614e6b565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613537613721565b73ffffffffffffffffffffffffffffffffffffffff16613555612873565b73ffffffffffffffffffffffffffffffffffffffff16146135ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a290615223565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561361b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361290614fe3565b60405180910390fd5b61362481613ba6565b50565b61362f613721565b73ffffffffffffffffffffffffffffffffffffffff1661364d612873565b73ffffffffffffffffffffffffffffffffffffffff16146136a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369a90615223565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613714919061548a565b9050919050565b60105481565b600033905090565b613743828260405180602001604052806000815250613e27565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613826836123c8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061387782613747565b6138b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ad906150c3565b60405180910390fd5b60006138c1836123c8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061393057508373ffffffffffffffffffffffffffffffffffffffff166139188461107d565b73ffffffffffffffffffffffffffffffffffffffff16145b806139415750613940818561349b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661396a826123c8565b73ffffffffffffffffffffffffffffffffffffffff16146139c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139b790615263565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2790615083565b60405180910390fd5b613a3b838383613e82565b613a466000826137b3565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a969190615515565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613aed9190615434565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613c7584848461394a565b613c8184848484613e87565b613cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb790614fc3565b60405180910390fd5b50505050565b60606000821415613d0e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613e22565b600082905060005b60008214613d40578080613d2990615662565b915050600a82613d39919061548a565b9150613d16565b60008167ffffffffffffffff811115613d5c57613d5b615798565b5b6040519080825280601f01601f191660200182016040528015613d8e5781602001600182028036833780820191505090505b5090505b60008514613e1b57600182613da79190615515565b9150600a85613db691906156ab565b6030613dc29190615434565b60f81b818381518110613dd857613dd7615769565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613e14919061548a565b9450613d92565b8093505050505b919050565b613e318383614017565b613e3e6000848484613e87565b613e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7490614fc3565b60405180910390fd5b505050565b505050565b6000613ea88473ffffffffffffffffffffffffffffffffffffffff166141e5565b1561400a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613eec9493929190614edf565b602060405180830381600087803b158015613f0657600080fd5b505af1925050508015613f3757506040513d601f19601f82011682018060405250810190613f3491906147ae565b60015b613fba573d8060008114613f67576040519150601f19603f3d011682016040523d82523d6000602084013e613f6c565b606091505b50600081511415613fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa990614fc3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061400f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407e906151c3565b60405180910390fd5b61409081613747565b156140d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140c790615003565b60405180910390fd5b6140dc60008383613e82565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461412c9190615434565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054614204906155ff565b90600052602060002090601f016020900481019282614226576000855561426d565b82601f1061423f57805160ff191683800117855561426d565b8280016001018555821561426d579182015b8281111561426c578251825591602001919060010190614251565b5b50905061427a919061427e565b5090565b5b8082111561429757600081600090555060010161427f565b5090565b60006142ae6142a984615343565b61531e565b905080838252602082019050828560208602820111156142d1576142d06157d1565b5b60005b8581101561430157816142e7888261438f565b8452602084019350602083019250506001810190506142d4565b5050509392505050565b600061431e6143198461536f565b61531e565b90508281526020810184848401111561433a576143396157d6565b5b6143458482856155bd565b509392505050565b600061436061435b846153a0565b61531e565b90508281526020810184848401111561437c5761437b6157d6565b5b6143878482856155bd565b509392505050565b60008135905061439e81615f50565b92915050565b600082601f8301126143b9576143b86157cc565b5b81356143c984826020860161429b565b91505092915050565b6000813590506143e181615f67565b92915050565b6000813590506143f681615f7e565b92915050565b60008151905061440b81615f7e565b92915050565b60008083601f840112614427576144266157cc565b5b8235905067ffffffffffffffff811115614444576144436157c7565b5b6020830191508360018202830111156144605761445f6157d1565b5b9250929050565b600082601f83011261447c5761447b6157cc565b5b813561448c84826020860161430b565b91505092915050565b600082601f8301126144aa576144a96157cc565b5b81356144ba84826020860161434d565b91505092915050565b6000813590506144d281615f95565b92915050565b6000815190506144e781615f95565b92915050565b600060208284031215614503576145026157e0565b5b60006145118482850161438f565b91505092915050565b60008060408385031215614531576145306157e0565b5b600061453f8582860161438f565b92505060206145508582860161438f565b9150509250929050565b600080600060608486031215614573576145726157e0565b5b60006145818682870161438f565b93505060206145928682870161438f565b92505060406145a3868287016144c3565b9150509250925092565b6000806000806000608086880312156145c9576145c86157e0565b5b60006145d78882890161438f565b95505060206145e88882890161438f565b94505060406145f9888289016144c3565b935050606086013567ffffffffffffffff81111561461a576146196157db565b5b61462688828901614411565b92509250509295509295909350565b6000806000806080858703121561464f5761464e6157e0565b5b600061465d8782880161438f565b945050602061466e8782880161438f565b935050604061467f878288016144c3565b925050606085013567ffffffffffffffff8111156146a05761469f6157db565b5b6146ac87828801614467565b91505092959194509250565b600080604083850312156146cf576146ce6157e0565b5b60006146dd8582860161438f565b92505060206146ee858286016143d2565b9150509250929050565b6000806040838503121561470f5761470e6157e0565b5b600061471d8582860161438f565b925050602061472e858286016144c3565b9150509250929050565b60006020828403121561474e5761474d6157e0565b5b600082013567ffffffffffffffff81111561476c5761476b6157db565b5b614778848285016143a4565b91505092915050565b600060208284031215614797576147966157e0565b5b60006147a5848285016143e7565b91505092915050565b6000602082840312156147c4576147c36157e0565b5b60006147d2848285016143fc565b91505092915050565b6000602082840312156147f1576147f06157e0565b5b600082013567ffffffffffffffff81111561480f5761480e6157db565b5b61481b84828501614495565b91505092915050565b60006020828403121561483a576148396157e0565b5b6000614848848285016144c3565b91505092915050565b600060208284031215614867576148666157e0565b5b6000614875848285016144d8565b91505092915050565b61488781615549565b82525050565b6148968161555b565b82525050565b6148a581615567565b82525050565b60006148b6826153e6565b6148c081856153fc565b93506148d08185602086016155cc565b6148d9816157e5565b840191505092915050565b60006148ef826153f1565b6148f98185615418565b93506149098185602086016155cc565b614912816157e5565b840191505092915050565b6000614928826153f1565b6149328185615429565b93506149428185602086016155cc565b80840191505092915050565b6000815461495b816155ff565b6149658186615429565b945060018216600081146149805760018114614991576149c4565b60ff198316865281860193506149c4565b61499a856153d1565b60005b838110156149bc5781548189015260018201915060208101905061499d565b838801955050505b50505092915050565b60006149da601e83615418565b91506149e5826157f6565b602082019050919050565b60006149fd600d83615429565b9150614a088261581f565b600d82019050919050565b6000614a20602383615418565b9150614a2b82615848565b604082019050919050565b6000614a43603283615418565b9150614a4e82615897565b604082019050919050565b6000614a66602683615418565b9150614a71826158e6565b604082019050919050565b6000614a89601c83615418565b9150614a9482615935565b602082019050919050565b6000614aac602483615418565b9150614ab78261595e565b604082019050919050565b6000614acf602383615418565b9150614ada826159ad565b604082019050919050565b6000614af2601883615418565b9150614afd826159fc565b602082019050919050565b6000614b15602483615418565b9150614b2082615a25565b604082019050919050565b6000614b38601983615418565b9150614b4382615a74565b602082019050919050565b6000614b5b600c83615429565b9150614b6682615a9d565b600c82019050919050565b6000614b7e602c83615418565b9150614b8982615ac6565b604082019050919050565b6000614ba1602483615418565b9150614bac82615b15565b604082019050919050565b6000614bc4603883615418565b9150614bcf82615b64565b604082019050919050565b6000614be7602a83615418565b9150614bf282615bb3565b604082019050919050565b6000614c0a602983615418565b9150614c1582615c02565b604082019050919050565b6000614c2d601d83615418565b9150614c3882615c51565b602082019050919050565b6000614c50601183615418565b9150614c5b82615c7a565b602082019050919050565b6000614c73601983615418565b9150614c7e82615ca3565b602082019050919050565b6000614c96602083615418565b9150614ca182615ccc565b602082019050919050565b6000614cb9601383615418565b9150614cc482615cf5565b602082019050919050565b6000614cdc602c83615418565b9150614ce782615d1e565b604082019050919050565b6000614cff600583615429565b9150614d0a82615d6d565b600582019050919050565b6000614d22602083615418565b9150614d2d82615d96565b602082019050919050565b6000614d45601883615418565b9150614d5082615dbf565b602082019050919050565b6000614d68602983615418565b9150614d7382615de8565b604082019050919050565b6000614d8b602f83615418565b9150614d9682615e37565b604082019050919050565b6000614dae602183615418565b9150614db982615e86565b604082019050919050565b6000614dd160008361540d565b9150614ddc82615ed5565b600082019050919050565b6000614df4603183615418565b9150614dff82615ed8565b604082019050919050565b6000614e17601383615418565b9150614e2282615f27565b602082019050919050565b614e36816155b3565b82525050565b6000614e48828561494e565b9150614e54828461491d565b9150614e5f82614cf2565b91508190509392505050565b6000614e77828461494e565b9150614e82826149f0565b915081905092915050565b6000614e99828461494e565b9150614ea482614b4e565b915081905092915050565b6000614eba82614dc4565b9150819050919050565b6000602082019050614ed9600083018461487e565b92915050565b6000608082019050614ef4600083018761487e565b614f01602083018661487e565b614f0e6040830185614e2d565b8181036060830152614f2081846148ab565b905095945050505050565b6000602082019050614f40600083018461488d565b92915050565b6000602082019050614f5b600083018461489c565b92915050565b60006020820190508181036000830152614f7b81846148e4565b905092915050565b60006020820190508181036000830152614f9c816149cd565b9050919050565b60006020820190508181036000830152614fbc81614a13565b9050919050565b60006020820190508181036000830152614fdc81614a36565b9050919050565b60006020820190508181036000830152614ffc81614a59565b9050919050565b6000602082019050818103600083015261501c81614a7c565b9050919050565b6000602082019050818103600083015261503c81614a9f565b9050919050565b6000602082019050818103600083015261505c81614ac2565b9050919050565b6000602082019050818103600083015261507c81614ae5565b9050919050565b6000602082019050818103600083015261509c81614b08565b9050919050565b600060208201905081810360008301526150bc81614b2b565b9050919050565b600060208201905081810360008301526150dc81614b71565b9050919050565b600060208201905081810360008301526150fc81614b94565b9050919050565b6000602082019050818103600083015261511c81614bb7565b9050919050565b6000602082019050818103600083015261513c81614bda565b9050919050565b6000602082019050818103600083015261515c81614bfd565b9050919050565b6000602082019050818103600083015261517c81614c20565b9050919050565b6000602082019050818103600083015261519c81614c43565b9050919050565b600060208201905081810360008301526151bc81614c66565b9050919050565b600060208201905081810360008301526151dc81614c89565b9050919050565b600060208201905081810360008301526151fc81614cac565b9050919050565b6000602082019050818103600083015261521c81614ccf565b9050919050565b6000602082019050818103600083015261523c81614d15565b9050919050565b6000602082019050818103600083015261525c81614d38565b9050919050565b6000602082019050818103600083015261527c81614d5b565b9050919050565b6000602082019050818103600083015261529c81614d7e565b9050919050565b600060208201905081810360008301526152bc81614da1565b9050919050565b600060208201905081810360008301526152dc81614de7565b9050919050565b600060208201905081810360008301526152fc81614e0a565b9050919050565b60006020820190506153186000830184614e2d565b92915050565b6000615328615339565b90506153348282615631565b919050565b6000604051905090565b600067ffffffffffffffff82111561535e5761535d615798565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561538a57615389615798565b5b615393826157e5565b9050602081019050919050565b600067ffffffffffffffff8211156153bb576153ba615798565b5b6153c4826157e5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061543f826155b3565b915061544a836155b3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561547f5761547e6156dc565b5b828201905092915050565b6000615495826155b3565b91506154a0836155b3565b9250826154b0576154af61570b565b5b828204905092915050565b60006154c6826155b3565b91506154d1836155b3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550a576155096156dc565b5b828202905092915050565b6000615520826155b3565b915061552b836155b3565b92508282101561553e5761553d6156dc565b5b828203905092915050565b600061555482615593565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156155ea5780820151818401526020810190506155cf565b838111156155f9576000848401525b50505050565b6000600282049050600182168061561757607f821691505b6020821081141561562b5761562a61573a565b5b50919050565b61563a826157e5565b810181811067ffffffffffffffff8211171561565957615658615798565b5b80604052505050565b600061566d826155b3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156a05761569f6156dc565b5b600182019050919050565b60006156b6826155b3565b91506156c1836155b3565b9250826156d1576156d061570b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e743a204d617820746f6b656e73207065722077616c6c6574206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e743a2043616e6e6f74206d696e74206d6f72652061742074686973207460008201527f696d650000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e743a2057686974656c697374204d696e74206e6f74204f70656e000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4d696e743a20556e617574686f72697a65642041636365737300000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f446973636f756e74204e6f742041637469766500000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b615f5981615549565b8114615f6457600080fd5b50565b615f708161555b565b8114615f7b57600080fd5b50565b615f8781615567565b8114615f9257600080fd5b50565b615f9e816155b3565b8114615fa957600080fd5b5056fea2646970667358221220252c9952df7d20ce4a510862471ac946e2faaf9f4446c691f3c20d7cf2c3ef9b64736f6c6343000807003368747470733a2f2f6368616d656c656f6e636f6c6c6563746976652e696f2f6d657461646174612f
Deployed Bytecode
0x60806040526004361061036e5760003560e01c8063715018a6116101c6578063b5b3e214116100f7578063e740116811610095578063f2fde38b1161006f578063f2fde38b14610be1578063f64b77d414610c0a578063f8b2cb4f14610c21578063fc1a1c3614610c5e57610375565b8063e740116814610b4e578063e8a3d48514610b79578063e985e9c514610ba457610375565b8063c87b56dd116100d1578063c87b56dd14610aa8578063c91c046214610ae5578063d331205114610afc578063e268e4d314610b2557610375565b8063b5b3e21414610a3d578063b88d4fde14610a54578063bc629bf514610a7d57610375565b80638da5cb5b11610164578063a035b1fe1161013e578063a035b1fe146109a4578063a0712d68146109cf578063a22cb465146109eb578063b0b9226314610a1457610375565b80638da5cb5b1461092557806391b7f5ed1461095057806395d89b411461097957610375565b80637e1c0c09116101a05780637e1c0c091461088f57806384ad8e8f146108ba57806389e877a3146108e55780638b78c116146108fc57610375565b8063715018a614610812578063717d57d3146108295780637a7f36fe1461085257610375565b80633597d7f3116102a057806343d675651161023e57806349a772b51161021857806349a772b51461074457806355f804b31461076f5780636352211e1461079857806370a08231146107d557610375565b806343d67565146106c7578063453c2310146106f0578063484b973c1461071b57610375565b80633c68fede1161027a5780633c68fede146106545780633ccfd60b1461066b57806341de890e1461068257806342842e0e1461069e57610375565b80633597d7f3146105fd578063372c12b1146106145780633ba5939d1461063d57610375565b8063150b7a021161030d5780631950c218116102e75780631950c2181461055557806323b872dd1461059257806325fd90f3146105bb5780632e56f71e146105e657610375565b8063150b7a02146104c257806315a55347146104ff57806318160ddd1461052a57610375565b806306fdde031161034957806306fdde0314610408578063081812fc14610433578063095ea7b3146104705780630be9396e1461049957610375565b8062b6849f1461037757806301ffc9a7146103a057806302ce5813146103dd57610375565b3661037557005b005b34801561038357600080fd5b5061039e60048036038101906103999190614738565b610c89565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190614781565b610e4f565b6040516103d49190614f2b565b60405180910390f35b3480156103e957600080fd5b506103f2610fd8565b6040516103ff9190614f2b565b60405180910390f35b34801561041457600080fd5b5061041d610feb565b60405161042a9190614f61565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190614824565b61107d565b6040516104679190614ec4565b60405180910390f35b34801561047c57600080fd5b50610497600480360381019061049291906146f8565b611102565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190614824565b61120c565b005b3480156104ce57600080fd5b506104e960048036038101906104e491906145ad565b611292565b6040516104f69190614f46565b60405180910390f35b34801561050b57600080fd5b506105146112a7565b6040516105219190615303565b60405180910390f35b34801561053657600080fd5b5061053f6112ad565b60405161054c9190615303565b60405180910390f35b34801561056157600080fd5b5061057c600480360381019061057791906144ed565b6112b7565b6040516105899190614f2b565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b4919061455a565b611325565b005b3480156105c757600080fd5b506105d061137e565b6040516105dd9190614f2b565b60405180910390f35b3480156105f257600080fd5b506105fb611391565b005b34801561060957600080fd5b5061061261142a565b005b34801561062057600080fd5b5061063b600480360381019061063691906144ed565b6114c3565b005b34801561064957600080fd5b5061065261159a565b005b34801561066057600080fd5b50610669611633565b005b34801561067757600080fd5b506106806116cc565b005b61069c60048036038101906106979190614824565b611c89565b005b3480156106aa57600080fd5b506106c560048036038101906106c0919061455a565b61204f565b005b3480156106d357600080fd5b506106ee60048036038101906106e99190614738565b61206f565b005b3480156106fc57600080fd5b50610705612180565b6040516107129190615303565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d91906146f8565b612186565b005b34801561075057600080fd5b5061075961232c565b6040516107669190615303565b60405180910390f35b34801561077b57600080fd5b50610796600480360381019061079191906147db565b612332565b005b3480156107a457600080fd5b506107bf60048036038101906107ba9190614824565b6123c8565b6040516107cc9190614ec4565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906144ed565b61247a565b6040516108099190615303565b60405180910390f35b34801561081e57600080fd5b50610827612532565b005b34801561083557600080fd5b50610850600480360381019061084b9190614824565b6125ba565b005b34801561085e57600080fd5b50610879600480360381019061087491906144ed565b612640565b6040516108869190614f2b565b60405180910390f35b34801561089b57600080fd5b506108a4612748565b6040516108b19190615303565b60405180910390f35b3480156108c657600080fd5b506108cf61274e565b6040516108dc9190615303565b60405180910390f35b3480156108f157600080fd5b506108fa612754565b005b34801561090857600080fd5b50610923600480360381019061091e9190614824565b6127ed565b005b34801561093157600080fd5b5061093a612873565b6040516109479190614ec4565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190614824565b61289c565b005b34801561098557600080fd5b5061098e612922565b60405161099b9190614f61565b60405180910390f35b3480156109b057600080fd5b506109b96129b4565b6040516109c69190615303565b60405180910390f35b6109e960048036038101906109e49190614824565b6129ba565b005b3480156109f757600080fd5b50610a126004803603810190610a0d91906146b8565b612eb3565b005b348015610a2057600080fd5b50610a3b6004803603810190610a369190614824565b61301f565b005b348015610a4957600080fd5b50610a526130a5565b005b348015610a6057600080fd5b50610a7b6004803603810190610a769190614635565b61313e565b005b348015610a8957600080fd5b50610a92613199565b604051610a9f9190615303565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190614824565b61319f565b604051610adc9190614f61565b60405180910390f35b348015610af157600080fd5b50610afa61325f565b005b348015610b0857600080fd5b50610b236004803603810190610b1e91906144ed565b6132f8565b005b348015610b3157600080fd5b50610b4c6004803603810190610b479190614824565b6133da565b005b348015610b5a57600080fd5b50610b63613460565b604051610b709190614f2b565b60405180910390f35b348015610b8557600080fd5b50610b8e613473565b604051610b9b9190614f61565b60405180910390f35b348015610bb057600080fd5b50610bcb6004803603810190610bc6919061451a565b61349b565b604051610bd89190614f2b565b60405180910390f35b348015610bed57600080fd5b50610c086004803603810190610c0391906144ed565b61352f565b005b348015610c1657600080fd5b50610c1f613627565b005b348015610c2d57600080fd5b50610c486004803603810190610c4391906144ed565b6136c0565b604051610c559190615303565b60405180910390f35b348015610c6a57600080fd5b50610c7361371b565b604051610c809190615303565b60405180910390f35b610c91613721565b73ffffffffffffffffffffffffffffffffffffffff16610caf612873565b73ffffffffffffffffffffffffffffffffffffffff1614610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90615223565b60405180910390fd5b600081519050600b5481600b54610d1c9190615434565b11610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53906152e3565b60405180910390fd5b600a5481600b54610d6d9190615434565b10610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490615183565b60405180910390fd5b6000600b54905081600e5410610ddb5781600e6000828254610dcf9190615515565b92505081905550610de4565b6000600e819055505b60005b82811015610e4957610e1e848281518110610e0557610e04615769565b5b60200260200101518284610e199190615434565b613729565b600b6000815480929190610e3190615662565b91905055508080610e4190615662565b915050610de7565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f1a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f8257507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fd1575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600860019054906101000a900460ff1681565b606060018054610ffa906155ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611026906155ff565b80156110735780601f1061104857610100808354040283529160200191611073565b820191906000526020600020905b81548152906001019060200180831161105657829003601f168201915b5050505050905090565b600061108882613747565b6110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90615203565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061110d826123c8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906152a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111be57506111bd813361349b565b5b6111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f490615103565b60405180910390fd5b61120783836137b3565b505050565b611214613721565b73ffffffffffffffffffffffffffffffffffffffff16611232612873565b73ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90615223565b60405180910390fd5b80600d8190555050565b600063150b7a0260e01b905095945050505050565b600e5481565b6000600b54905090565b600060011515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561131b5760019050611320565b600090505b919050565b61132f338261386c565b61136e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611365906152c3565b60405180910390fd5b61137983838361394a565b505050565b600860009054906101000a900460ff1681565b611399613721565b73ffffffffffffffffffffffffffffffffffffffff166113b7612873565b73ffffffffffffffffffffffffffffffffffffffff161461140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490615223565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611432613721565b73ffffffffffffffffffffffffffffffffffffffff16611450612873565b73ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90615223565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6114cb613721565b73ffffffffffffffffffffffffffffffffffffffff166114e9612873565b73ffffffffffffffffffffffffffffffffffffffff161461153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690615223565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115a2613721565b73ffffffffffffffffffffffffffffffffffffffff166115c0612873565b73ffffffffffffffffffffffffffffffffffffffff1614611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d90615223565b60405180910390fd5b6000600860036101000a81548160ff021916908315150217905550565b61163b613721565b73ffffffffffffffffffffffffffffffffffffffff16611659612873565b73ffffffffffffffffffffffffffffffffffffffff16146116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690615223565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b6116d4613721565b73ffffffffffffffffffffffffffffffffffffffff166116f2612873565b73ffffffffffffffffffffffffffffffffffffffff1614611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f90615223565b60405180910390fd5b6000479050600073543874cea651a5dd4cdf88b2ed9b92af57b8507e9050600073f561266d093c73f67c7caa2ab74cc71a43554e579050600073a4d4fea9799cd5015955f248994d445c6beb9436905060007317895988ab2b64f041813936bf46fb9133a6b16090506000732496286bdb820d40c402802f828ae265b244188a9050600073855bfe65652868920729b9d92d8d6030d01e3bff905060008673ffffffffffffffffffffffffffffffffffffffff166103e860238a61180c91906154bb565b611816919061548a565b60405161182290614eaf565b60006040518083038185875af1925050503d806000811461185f576040519150601f19603f3d011682016040523d82523d6000602084013e611864565b606091505b505080915050806118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a190615063565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166103e860af8a6118d191906154bb565b6118db919061548a565b6040516118e790614eaf565b60006040518083038185875af1925050503d8060008114611924576040519150601f19603f3d011682016040523d82523d6000602084013e611929565b606091505b5050809150508061196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690615063565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16606460058a61199591906154bb565b61199f919061548a565b6040516119ab90614eaf565b60006040518083038185875af1925050503d80600081146119e8576040519150601f19603f3d011682016040523d82523d6000602084013e6119ed565b606091505b50508091505080611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90615063565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16606460058a611a5991906154bb565b611a63919061548a565b604051611a6f90614eaf565b60006040518083038185875af1925050503d8060008114611aac576040519150601f19603f3d011682016040523d82523d6000602084013e611ab1565b606091505b50508091505080611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee90615063565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16606460058a611b1d91906154bb565b611b27919061548a565b604051611b3390614eaf565b60006040518083038185875af1925050503d8060008114611b70576040519150601f19603f3d011682016040523d82523d6000602084013e611b75565b606091505b50508091505080611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290615063565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16606460408a611be191906154bb565b611beb919061548a565b604051611bf790614eaf565b60006040518083038185875af1925050503d8060008114611c34576040519150601f19603f3d011682016040523d82523d6000602084013e611c39565b606091505b50508091505080611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690615063565b60405180910390fd5b5050505050505050565b600060149054906101000a900460ff1615611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd0906150e3565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600f5481611d0291906154bb565b341015611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90615243565b60405180910390fd5b600a54600b54600e5483611d589190615434565b611d629190615434565b10611da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9990614f83565b60405180910390fd5b600c548160126000611db2613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df79190615434565b1115611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90615023565b60405180910390fd5b611e48611e43613721565b612640565b611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e906151e3565b60405180910390fd5b600860029054906101000a900460ff16611ea057600080fd5b6000600b54905060003490506000600f5484611ebc91906154bb565b82611ec79190615515565b905060005b84811015611f7757611ef0611edf613721565b8286611eeb9190615434565b613729565b600b6000815480929190611f0390615662565b919050555060126000611f14613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f5f90615662565b91905055508080611f6f90615662565b915050611ecc565b50600081111561202f5760003373ffffffffffffffffffffffffffffffffffffffff1682604051611fa790614eaf565b60006040518083038185875af1925050503d8060008114611fe4576040519150601f19603f3d011682016040523d82523d6000602084013e611fe9565b606091505b505090508061202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614fa3565b60405180910390fd5b505b50505060008060146101000a81548160ff02191690831515021790555050565b61206a8383836040518060200160405280600081525061313e565b505050565b612077613721565b73ffffffffffffffffffffffffffffffffffffffff16612095612873565b73ffffffffffffffffffffffffffffffffffffffff16146120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290615223565b60405180910390fd5b60005b815181101561217c576001601360008484815181106121105761210f615769565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061217490615662565b9150506120ee565b5050565b600c5481565b61218e613721565b73ffffffffffffffffffffffffffffffffffffffff166121ac612873565b73ffffffffffffffffffffffffffffffffffffffff1614612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990615223565b60405180910390fd5b600b5481600b546122139190615434565b11612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906152e3565b60405180910390fd5b600a5481600b546122649190615434565b106122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90615183565b60405180910390fd5b6000600b54905081600e54106122d25781600e60008282546122c69190615515565b925050819055506122db565b6000600e819055505b60005b82811015612326576122fb8482846122f69190615434565b613729565b600b600081548092919061230e90615662565b9190505550808061231e90615662565b9150506122de565b50505050565b600b5481565b61233a613721565b73ffffffffffffffffffffffffffffffffffffffff16612358612873565b73ffffffffffffffffffffffffffffffffffffffff16146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590615223565b60405180910390fd5b80600390805190602001906123c49291906141f8565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890615143565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290615123565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61253a613721565b73ffffffffffffffffffffffffffffffffffffffff16612558612873565b73ffffffffffffffffffffffffffffffffffffffff16146125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590615223565b60405180910390fd5b6125b86000613ba6565b565b6125c2613721565b73ffffffffffffffffffffffffffffffffffffffff166125e0612873565b73ffffffffffffffffffffffffffffffffffffffff1614612636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d90615223565b60405180910390fd5b8060108190555050565b6000805b60118054905081101561273d5760006011828154811061266757612666615769565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016126ca9190614ec4565b60206040518083038186803b1580156126e257600080fd5b505afa1580156126f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271a9190614851565b111561272a576001915050612743565b808061273590615662565b915050612644565b50600090505b919050565b600a5481565b600f5481565b61275c613721565b73ffffffffffffffffffffffffffffffffffffffff1661277a612873565b73ffffffffffffffffffffffffffffffffffffffff16146127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c790615223565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b6127f5613721565b73ffffffffffffffffffffffffffffffffffffffff16612813612873565b73ffffffffffffffffffffffffffffffffffffffff1614612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286090615223565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6128a4613721565b73ffffffffffffffffffffffffffffffffffffffff166128c2612873565b73ffffffffffffffffffffffffffffffffffffffff1614612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f90615223565b60405180910390fd5b8060098190555050565b606060028054612931906155ff565b80601f016020809104026020016040519081016040528092919081815260200182805461295d906155ff565b80156129aa5780601f1061297f576101008083540402835291602001916129aa565b820191906000526020600020905b81548152906001019060200180831161298d57829003601f168201915b5050505050905090565b60095481565b600060149054906101000a900460ff1615612a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a01906150e3565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600a54600b54600e5483612a399190615434565b612a439190615434565b10612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a90614f83565b60405180910390fd5b600c548160126000612a93613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad89190615434565b1115612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1090615023565b60405180910390fd5b6000600860009054906101000a900460ff16612cb1576010549050600d548260126000612b44613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b899190615434565b1115612bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc190615043565b60405180910390fd5b60136000612bd6613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c54906151a3565b60405180910390fd5b600860019054906101000a900460ff16612cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca390615163565b60405180910390fd5b612cb7565b60095490505b8082612cc391906154bb565b341015612d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfc90615243565b60405180910390fd5b6000600b549050600034905060008385612d1f91906154bb565b82612d2a9190615515565b905060005b85811015612dda57612d53612d42613721565b8286612d4e9190615434565b613729565b600b6000815480929190612d6690615662565b919050555060126000612d77613721565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612dc290615662565b91905055508080612dd290615662565b915050612d2f565b506000811115612e925760003373ffffffffffffffffffffffffffffffffffffffff1682604051612e0a90614eaf565b60006040518083038185875af1925050503d8060008114612e47576040519150601f19603f3d011682016040523d82523d6000602084013e612e4c565b606091505b5050905080612e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8790614fa3565b60405180910390fd5b505b5050505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f19906150a3565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516130139190614f2b565b60405180910390a35050565b613027613721565b73ffffffffffffffffffffffffffffffffffffffff16613045612873565b73ffffffffffffffffffffffffffffffffffffffff161461309b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309290615223565b60405180910390fd5b80600a8190555050565b6130ad613721565b73ffffffffffffffffffffffffffffffffffffffff166130cb612873565b73ffffffffffffffffffffffffffffffffffffffff1614613121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311890615223565b60405180910390fd5b6001600860036101000a81548160ff021916908315150217905550565b613148338361386c565b613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e906152c3565b60405180910390fd5b61319384848484613c6a565b50505050565b600d5481565b60606131aa82613747565b6131e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e090615283565b60405180910390fd5b6060600860039054906101000a900460ff16156132285760036040516020016132129190614e8d565b6040516020818303038152906040529050613256565b600361323384613cc6565b604051602001613244929190614e3c565b60405160208183030381529060405290505b80915050919050565b613267613721565b73ffffffffffffffffffffffffffffffffffffffff16613285612873565b73ffffffffffffffffffffffffffffffffffffffff16146132db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d290615223565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b613300613721565b73ffffffffffffffffffffffffffffffffffffffff1661331e612873565b73ffffffffffffffffffffffffffffffffffffffff1614613374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336b90615223565b60405180910390fd5b6011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6133e2613721565b73ffffffffffffffffffffffffffffffffffffffff16613400612873565b73ffffffffffffffffffffffffffffffffffffffff1614613456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344d90615223565b60405180910390fd5b80600c8190555050565b600860029054906101000a900460ff1681565b606060036040516020016134879190614e6b565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613537613721565b73ffffffffffffffffffffffffffffffffffffffff16613555612873565b73ffffffffffffffffffffffffffffffffffffffff16146135ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a290615223565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561361b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361290614fe3565b60405180910390fd5b61362481613ba6565b50565b61362f613721565b73ffffffffffffffffffffffffffffffffffffffff1661364d612873565b73ffffffffffffffffffffffffffffffffffffffff16146136a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369a90615223565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613714919061548a565b9050919050565b60105481565b600033905090565b613743828260405180602001604052806000815250613e27565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613826836123c8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061387782613747565b6138b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ad906150c3565b60405180910390fd5b60006138c1836123c8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061393057508373ffffffffffffffffffffffffffffffffffffffff166139188461107d565b73ffffffffffffffffffffffffffffffffffffffff16145b806139415750613940818561349b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661396a826123c8565b73ffffffffffffffffffffffffffffffffffffffff16146139c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139b790615263565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2790615083565b60405180910390fd5b613a3b838383613e82565b613a466000826137b3565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a969190615515565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613aed9190615434565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613c7584848461394a565b613c8184848484613e87565b613cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb790614fc3565b60405180910390fd5b50505050565b60606000821415613d0e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613e22565b600082905060005b60008214613d40578080613d2990615662565b915050600a82613d39919061548a565b9150613d16565b60008167ffffffffffffffff811115613d5c57613d5b615798565b5b6040519080825280601f01601f191660200182016040528015613d8e5781602001600182028036833780820191505090505b5090505b60008514613e1b57600182613da79190615515565b9150600a85613db691906156ab565b6030613dc29190615434565b60f81b818381518110613dd857613dd7615769565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613e14919061548a565b9450613d92565b8093505050505b919050565b613e318383614017565b613e3e6000848484613e87565b613e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7490614fc3565b60405180910390fd5b505050565b505050565b6000613ea88473ffffffffffffffffffffffffffffffffffffffff166141e5565b1561400a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613eec9493929190614edf565b602060405180830381600087803b158015613f0657600080fd5b505af1925050508015613f3757506040513d601f19601f82011682018060405250810190613f3491906147ae565b60015b613fba573d8060008114613f67576040519150601f19603f3d011682016040523d82523d6000602084013e613f6c565b606091505b50600081511415613fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa990614fc3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061400f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407e906151c3565b60405180910390fd5b61409081613747565b156140d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140c790615003565b60405180910390fd5b6140dc60008383613e82565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461412c9190615434565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054614204906155ff565b90600052602060002090601f016020900481019282614226576000855561426d565b82601f1061423f57805160ff191683800117855561426d565b8280016001018555821561426d579182015b8281111561426c578251825591602001919060010190614251565b5b50905061427a919061427e565b5090565b5b8082111561429757600081600090555060010161427f565b5090565b60006142ae6142a984615343565b61531e565b905080838252602082019050828560208602820111156142d1576142d06157d1565b5b60005b8581101561430157816142e7888261438f565b8452602084019350602083019250506001810190506142d4565b5050509392505050565b600061431e6143198461536f565b61531e565b90508281526020810184848401111561433a576143396157d6565b5b6143458482856155bd565b509392505050565b600061436061435b846153a0565b61531e565b90508281526020810184848401111561437c5761437b6157d6565b5b6143878482856155bd565b509392505050565b60008135905061439e81615f50565b92915050565b600082601f8301126143b9576143b86157cc565b5b81356143c984826020860161429b565b91505092915050565b6000813590506143e181615f67565b92915050565b6000813590506143f681615f7e565b92915050565b60008151905061440b81615f7e565b92915050565b60008083601f840112614427576144266157cc565b5b8235905067ffffffffffffffff811115614444576144436157c7565b5b6020830191508360018202830111156144605761445f6157d1565b5b9250929050565b600082601f83011261447c5761447b6157cc565b5b813561448c84826020860161430b565b91505092915050565b600082601f8301126144aa576144a96157cc565b5b81356144ba84826020860161434d565b91505092915050565b6000813590506144d281615f95565b92915050565b6000815190506144e781615f95565b92915050565b600060208284031215614503576145026157e0565b5b60006145118482850161438f565b91505092915050565b60008060408385031215614531576145306157e0565b5b600061453f8582860161438f565b92505060206145508582860161438f565b9150509250929050565b600080600060608486031215614573576145726157e0565b5b60006145818682870161438f565b93505060206145928682870161438f565b92505060406145a3868287016144c3565b9150509250925092565b6000806000806000608086880312156145c9576145c86157e0565b5b60006145d78882890161438f565b95505060206145e88882890161438f565b94505060406145f9888289016144c3565b935050606086013567ffffffffffffffff81111561461a576146196157db565b5b61462688828901614411565b92509250509295509295909350565b6000806000806080858703121561464f5761464e6157e0565b5b600061465d8782880161438f565b945050602061466e8782880161438f565b935050604061467f878288016144c3565b925050606085013567ffffffffffffffff8111156146a05761469f6157db565b5b6146ac87828801614467565b91505092959194509250565b600080604083850312156146cf576146ce6157e0565b5b60006146dd8582860161438f565b92505060206146ee858286016143d2565b9150509250929050565b6000806040838503121561470f5761470e6157e0565b5b600061471d8582860161438f565b925050602061472e858286016144c3565b9150509250929050565b60006020828403121561474e5761474d6157e0565b5b600082013567ffffffffffffffff81111561476c5761476b6157db565b5b614778848285016143a4565b91505092915050565b600060208284031215614797576147966157e0565b5b60006147a5848285016143e7565b91505092915050565b6000602082840312156147c4576147c36157e0565b5b60006147d2848285016143fc565b91505092915050565b6000602082840312156147f1576147f06157e0565b5b600082013567ffffffffffffffff81111561480f5761480e6157db565b5b61481b84828501614495565b91505092915050565b60006020828403121561483a576148396157e0565b5b6000614848848285016144c3565b91505092915050565b600060208284031215614867576148666157e0565b5b6000614875848285016144d8565b91505092915050565b61488781615549565b82525050565b6148968161555b565b82525050565b6148a581615567565b82525050565b60006148b6826153e6565b6148c081856153fc565b93506148d08185602086016155cc565b6148d9816157e5565b840191505092915050565b60006148ef826153f1565b6148f98185615418565b93506149098185602086016155cc565b614912816157e5565b840191505092915050565b6000614928826153f1565b6149328185615429565b93506149428185602086016155cc565b80840191505092915050565b6000815461495b816155ff565b6149658186615429565b945060018216600081146149805760018114614991576149c4565b60ff198316865281860193506149c4565b61499a856153d1565b60005b838110156149bc5781548189015260018201915060208101905061499d565b838801955050505b50505092915050565b60006149da601e83615418565b91506149e5826157f6565b602082019050919050565b60006149fd600d83615429565b9150614a088261581f565b600d82019050919050565b6000614a20602383615418565b9150614a2b82615848565b604082019050919050565b6000614a43603283615418565b9150614a4e82615897565b604082019050919050565b6000614a66602683615418565b9150614a71826158e6565b604082019050919050565b6000614a89601c83615418565b9150614a9482615935565b602082019050919050565b6000614aac602483615418565b9150614ab78261595e565b604082019050919050565b6000614acf602383615418565b9150614ada826159ad565b604082019050919050565b6000614af2601883615418565b9150614afd826159fc565b602082019050919050565b6000614b15602483615418565b9150614b2082615a25565b604082019050919050565b6000614b38601983615418565b9150614b4382615a74565b602082019050919050565b6000614b5b600c83615429565b9150614b6682615a9d565b600c82019050919050565b6000614b7e602c83615418565b9150614b8982615ac6565b604082019050919050565b6000614ba1602483615418565b9150614bac82615b15565b604082019050919050565b6000614bc4603883615418565b9150614bcf82615b64565b604082019050919050565b6000614be7602a83615418565b9150614bf282615bb3565b604082019050919050565b6000614c0a602983615418565b9150614c1582615c02565b604082019050919050565b6000614c2d601d83615418565b9150614c3882615c51565b602082019050919050565b6000614c50601183615418565b9150614c5b82615c7a565b602082019050919050565b6000614c73601983615418565b9150614c7e82615ca3565b602082019050919050565b6000614c96602083615418565b9150614ca182615ccc565b602082019050919050565b6000614cb9601383615418565b9150614cc482615cf5565b602082019050919050565b6000614cdc602c83615418565b9150614ce782615d1e565b604082019050919050565b6000614cff600583615429565b9150614d0a82615d6d565b600582019050919050565b6000614d22602083615418565b9150614d2d82615d96565b602082019050919050565b6000614d45601883615418565b9150614d5082615dbf565b602082019050919050565b6000614d68602983615418565b9150614d7382615de8565b604082019050919050565b6000614d8b602f83615418565b9150614d9682615e37565b604082019050919050565b6000614dae602183615418565b9150614db982615e86565b604082019050919050565b6000614dd160008361540d565b9150614ddc82615ed5565b600082019050919050565b6000614df4603183615418565b9150614dff82615ed8565b604082019050919050565b6000614e17601383615418565b9150614e2282615f27565b602082019050919050565b614e36816155b3565b82525050565b6000614e48828561494e565b9150614e54828461491d565b9150614e5f82614cf2565b91508190509392505050565b6000614e77828461494e565b9150614e82826149f0565b915081905092915050565b6000614e99828461494e565b9150614ea482614b4e565b915081905092915050565b6000614eba82614dc4565b9150819050919050565b6000602082019050614ed9600083018461487e565b92915050565b6000608082019050614ef4600083018761487e565b614f01602083018661487e565b614f0e6040830185614e2d565b8181036060830152614f2081846148ab565b905095945050505050565b6000602082019050614f40600083018461488d565b92915050565b6000602082019050614f5b600083018461489c565b92915050565b60006020820190508181036000830152614f7b81846148e4565b905092915050565b60006020820190508181036000830152614f9c816149cd565b9050919050565b60006020820190508181036000830152614fbc81614a13565b9050919050565b60006020820190508181036000830152614fdc81614a36565b9050919050565b60006020820190508181036000830152614ffc81614a59565b9050919050565b6000602082019050818103600083015261501c81614a7c565b9050919050565b6000602082019050818103600083015261503c81614a9f565b9050919050565b6000602082019050818103600083015261505c81614ac2565b9050919050565b6000602082019050818103600083015261507c81614ae5565b9050919050565b6000602082019050818103600083015261509c81614b08565b9050919050565b600060208201905081810360008301526150bc81614b2b565b9050919050565b600060208201905081810360008301526150dc81614b71565b9050919050565b600060208201905081810360008301526150fc81614b94565b9050919050565b6000602082019050818103600083015261511c81614bb7565b9050919050565b6000602082019050818103600083015261513c81614bda565b9050919050565b6000602082019050818103600083015261515c81614bfd565b9050919050565b6000602082019050818103600083015261517c81614c20565b9050919050565b6000602082019050818103600083015261519c81614c43565b9050919050565b600060208201905081810360008301526151bc81614c66565b9050919050565b600060208201905081810360008301526151dc81614c89565b9050919050565b600060208201905081810360008301526151fc81614cac565b9050919050565b6000602082019050818103600083015261521c81614ccf565b9050919050565b6000602082019050818103600083015261523c81614d15565b9050919050565b6000602082019050818103600083015261525c81614d38565b9050919050565b6000602082019050818103600083015261527c81614d5b565b9050919050565b6000602082019050818103600083015261529c81614d7e565b9050919050565b600060208201905081810360008301526152bc81614da1565b9050919050565b600060208201905081810360008301526152dc81614de7565b9050919050565b600060208201905081810360008301526152fc81614e0a565b9050919050565b60006020820190506153186000830184614e2d565b92915050565b6000615328615339565b90506153348282615631565b919050565b6000604051905090565b600067ffffffffffffffff82111561535e5761535d615798565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561538a57615389615798565b5b615393826157e5565b9050602081019050919050565b600067ffffffffffffffff8211156153bb576153ba615798565b5b6153c4826157e5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061543f826155b3565b915061544a836155b3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561547f5761547e6156dc565b5b828201905092915050565b6000615495826155b3565b91506154a0836155b3565b9250826154b0576154af61570b565b5b828204905092915050565b60006154c6826155b3565b91506154d1836155b3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550a576155096156dc565b5b828202905092915050565b6000615520826155b3565b915061552b836155b3565b92508282101561553e5761553d6156dc565b5b828203905092915050565b600061555482615593565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156155ea5780820151818401526020810190506155cf565b838111156155f9576000848401525b50505050565b6000600282049050600182168061561757607f821691505b6020821081141561562b5761562a61573a565b5b50919050565b61563a826157e5565b810181811067ffffffffffffffff8211171561565957615658615798565b5b80604052505050565b600061566d826155b3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156a05761569f6156dc565b5b600182019050919050565b60006156b6826155b3565b91506156c1836155b3565b9250826156d1576156d061570b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e743a204d617820746f6b656e73207065722077616c6c6574206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e743a2043616e6e6f74206d696e74206d6f72652061742074686973207460008201527f696d650000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e743a2057686974656c697374204d696e74206e6f74204f70656e000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4d696e743a20556e617574686f72697a65642041636365737300000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f446973636f756e74204e6f742041637469766500000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b615f5981615549565b8114615f6457600080fd5b50565b615f708161555b565b8114615f7b57600080fd5b50565b615f8781615567565b8114615f9257600080fd5b50565b615f9e816155b3565b8114615fa957600080fd5b5056fea2646970667358221220252c9952df7d20ce4a510862471ac946e2faaf9f4446c691f3c20d7cf2c3ef9b64736f6c63430008070033
Deployed Bytecode Sourcemap
17703:24485:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22715:646;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19754:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18479:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40957:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30435:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29969:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27232:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39901:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18764:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28754:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28464:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31319:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18450:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27752:80;;;;;;;;;;;;;:::i;:::-;;27844:90;;;;;;;;;;;;;:::i;:::-;;28154:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28982:81;;;;;;;;;;;;;:::i;:::-;;27946:96;;;;;;;;;;;;;:::i;:::-;;20195:1497;;;;;;;;;;;;;:::i;:::-;;23373:1170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31727:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28266:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18696:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22044:659;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18662:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27356:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29668:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29398:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14833:94;;;;;;;;;;;;;:::i;:::-;;26994:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24555:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18629:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18800:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27552:87;;;;;;;;;;;;;:::i;:::-;;26876:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14182:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28054:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41098;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18602:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24845:1464;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30728:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28644:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28892:78;;;;;;;;;;;;;:::i;:::-;;31983:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18730:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41273:594;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27463:77;;;;;;;;;;;;;:::i;:::-;;26737:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27114:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18513:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41879:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31088:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15082:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27647:93;;;;;;;;;;;;;:::i;:::-;;29075:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18835:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22715:646;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22784:11:::1;22798:3;:10;22784:24;;22850:12;;22843:3;22828:12;;:18;;;;:::i;:::-;22827:35;22819:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22928:11;;22921:3;22906:12;;:18;;;;:::i;:::-;22905:34;22897:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22982:21;23006:12;;22982:36;;23051:3;23033:14;;:21;23029:126;;23089:3;23071:14;;:21;;;;;;;:::i;:::-;;;;;;;;23029:126;;;23142:1;23125:14;:18;;;;23029:126;23179:9;23175:179;23198:3;23194:1;:7;23175:179;;;23223:36;23233:3;23237:1;23233:6;;;;;;;;:::i;:::-;;;;;;;;23257:1;23241:13;:17;;;;:::i;:::-;23223:9;:36::i;:::-;23274:12;;:15;;;;;;;;;:::i;:::-;;;;;;23203:3;;;;;:::i;:::-;;;;23175:179;;;;22773:588;;22715:646:::0;:::o;19754:359::-;19839:4;19879:25;19864:40;;;:11;:40;;;;:109;;;;19940:33;19925:48;;;:11;:48;;;;19864:109;:170;;;;20009:25;19994:40;;;:11;:40;;;;19864:170;:241;;;;20070:35;;;20055:50;;;:11;:50;;;;19864:241;19856:249;;19754:359;;;:::o;18479:27::-;;;;;;;;;;;;;:::o;40957:84::-;40996:13;41028:5;41021:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40957:84;:::o;30435:221::-;30511:7;30539:16;30547:7;30539;:16::i;:::-;30531:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30624:15;:24;30640:7;30624:24;;;;;;;;;;;;;;;;;;;;;30617:31;;30435:221;;;:::o;29969:400::-;30050:13;30066:16;30074:7;30066;:16::i;:::-;30050:32;;30107:5;30101:11;;:2;:11;;;;30093:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30199:5;30185:19;;:10;:19;;;:58;;;;30208:35;30225:5;30232:10;30208:16;:35::i;:::-;30185:58;30163:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;30340:21;30349:2;30353:7;30340:8;:21::i;:::-;30039:330;29969:400;;:::o;27232:112::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27324:12:::1;27309;:27;;;;27232:112:::0;:::o;39901:215::-;40018:6;40078:30;;;40071:37;;39901:215;;;;;;;:::o;18764:29::-;;;;:::o;28754:126::-;28800:7;28827:12;;28820:19;;28754:126;:::o;28464:168::-;28532:4;28580;28553:31;;:10;:23;28564:11;28553:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;28549:53;;;28595:4;28588:11;;;;28549:53;28619:5;28612:12;;28464:168;;;;:::o;31319:337::-;31514:39;31533:10;31545:7;31514:18;:39::i;:::-;31506:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31620:28;31630:4;31636:2;31640:7;31620:9;:28::i;:::-;31319:337;;;:::o;18450:22::-;;;;;;;;;;;;;:::o;27752:80::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27819:5:::1;27806:10;;:18;;;;;;;;;;;;;;;;;;27752:80::o:0;27844:90::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27921:5:::1;27903:15;;:23;;;;;;;;;;;;;;;;;;27844:90::o:0;28154:100::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28242:4:::1;28220:10;:19;28231:7;28220:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;28154:100:::0;:::o;28982:81::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29050:5:::1;29036:11;;:19;;;;;;;;;;;;;;;;;;28982:81::o:0;27946:96::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28029:5:::1;28008:18;;:26;;;;;;;;;;;;;;;;;;27946:96::o:0;20195:1497::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20245:18:::1;20266:21;20245:42;;20308:16;20342:42;20308:77;;20396:15;20430:42;20396:77;;20484:11;20518:42;20484:77;;20572:17;20606:42;20572:77;;20660:11;20694:42;20660:77;;20748:17;20782:42;20748:77;;20846:12;20883:8;:13;;20923:4;20919:2;20906:10;:15;;;;:::i;:::-;20905:22;;;;:::i;:::-;20883:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20869:64;;;;;20952:7;20944:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21023:7;:12;;21063:4;21058:3;21045:10;:16;;;;:::i;:::-;21044:23;;;;:::i;:::-;21023:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21009:64;;;;;21092:7;21084:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21163:3;:8;;21197:3;21194:1;21181:10;:14;;;;:::i;:::-;21180:20;;;;:::i;:::-;21163:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21149:57;;;;;21225:7;21217:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21296:9;:14;;21336:3;21333:1;21320:10;:14;;;;:::i;:::-;21319:20;;;;:::i;:::-;21296:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21282:63;;;;;21364:7;21356:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21435:3;:8;;21469:3;21466:1;21453:10;:14;;;;:::i;:::-;21452:20;;;;:::i;:::-;21435:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21421:57;;;;;21497:7;21489:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21568:9;:14;;21609:3;21605:2;21592:10;:15;;;;:::i;:::-;21591:21;;;;:::i;:::-;21568:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21554:64;;;;;21637:7;21629:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20234:1458;;;;;;;;20195:1497::o:0;23373:1170::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;23475:13:::1;;23469:3;:19;;;;:::i;:::-;23456:9;:32;;23448:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23576:11;;23560:12;;23543:14;;23537:3;:20;;;;:::i;:::-;:35;;;;:::i;:::-;23536:51;23528:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;23682:12;;23674:3;23642:15;:29;23658:12;:10;:12::i;:::-;23642:29;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;23641:53;;23633:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23754:30;23771:12;:10;:12::i;:::-;23754:16;:30::i;:::-;23746:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23847:18;;;;;;;;;;;23839:27;;;::::0;::::1;;23887:21;23911:12;;23887:36;;24024:14;24041:9;24024:26;;24061:18;24098:13;;24092:3;:19;;;;:::i;:::-;24082:6;:30;;;;:::i;:::-;24061:51;;24160:9;24156:179;24179:3;24175:1;:7;24156:179;;;24204:42;24214:12;:10;:12::i;:::-;24244:1;24228:13;:17;;;;:::i;:::-;24204:9;:42::i;:::-;24261:12;;:15;;;;;;;;;:::i;:::-;;;;;;24291;:29;24307:12;:10;:12::i;:::-;24291:29;;;;;;;;;;;;;;;;:32;;;;;;;;;:::i;:::-;;;;;;24184:3;;;;;:::i;:::-;;;;24156:179;;;;24380:1;24367:10;:14;24363:173;;;24398:12;24416:10;:15;;24439:10;24416:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24397:57;;;24477:7;24469:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24382:154;24363:173;23437:1106;;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;23373:1170;:::o;31727:185::-;31865:39;31882:4;31888:2;31892:7;31865:39;;;;;;;;;;;;:16;:39::i;:::-;31727:185;;;:::o;28266:186::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28351:9:::1;28346:99;28366:8;:15;28362:1;:19;28346:99;;;28429:4;28403:10;:23;28414:8;28423:1;28414:11;;;;;;;;:::i;:::-;;;;;;;;28403:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;28383:3;;;;;:::i;:::-;;;;28346:99;;;;28266:186:::0;:::o;18696:27::-;;;;:::o;22044:659::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22150:12:::1;;22143:3;22128:12;;:18;;;;:::i;:::-;22127:35;22119:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22228:11;;22221:3;22206:12;;:18;;;;:::i;:::-;22205:34;22197:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22282:21;22306:12;;22282:36;;22396:3;22378:14;;:21;22374:126;;22434:3;22416:14;;:21;;;;;;;:::i;:::-;;;;;;;;22374:126;;;22487:1;22470:14;:18;;;;22374:126;22524:9;22520:176;22543:3;22539:1;:7;22520:176;;;22568:33;22578:3;22599:1;22583:13;:17;;;;:::i;:::-;22568:9;:33::i;:::-;22616:12;;:15;;;;;;;;;:::i;:::-;;;;;;22548:3;;;;;:::i;:::-;;;;22520:176;;;;22108:595;22044:659:::0;;:::o;18662:27::-;;;;:::o;27356:95::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27437:6:::1;27426:8;:17;;;;;;;;;;;;:::i;:::-;;27356:95:::0;:::o;29668:239::-;29740:7;29760:13;29776:7;:16;29784:7;29776:16;;;;;;;;;;;;;;;;;;;;;29760:32;;29828:1;29811:19;;:5;:19;;;;29803:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29894:5;29887:12;;;29668:239;;;:::o;29398:208::-;29470:7;29515:1;29498:19;;:5;:19;;;;29490:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29582:9;:16;29592:5;29582:16;;;;;;;;;;;;;;;;29575:23;;29398:208;;;:::o;14833:94::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14898:21:::1;14916:1;14898:9;:21::i;:::-;14833:94::o:0;26994:108::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27086:8:::1;27069:14;:25;;;;26994:108:::0;:::o;24555:278::-;24621:4;24643:9;24638:165;24658:13;:20;;;;24654:1;:24;24638:165;;;24744:1;24703:13;24717:1;24703:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:26;;;24730:10;24703:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;24699:93;;;24772:4;24765:11;;;;;24699:93;24680:3;;;;;:::i;:::-;;;;24638:165;;;;24820:5;24813:12;;24555:278;;;;:::o;18629:26::-;;;;:::o;18800:28::-;;;;:::o;27552:87::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27627:4:::1;27609:15;;:22;;;;;;;;;;;;;;;;;;27552:87::o:0;26876:106::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26966:8:::1;26950:13;:24;;;;26876:106:::0;:::o;14182:87::-;14228:7;14255:6;;;;;;;;;;;14248:13;;14182:87;:::o;28054:88::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28126:8:::1;28118:5;:16;;;;28054:88:::0;:::o;41098:::-;41139:13;41171:7;41164:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41098:88;:::o;18602:20::-;;;;:::o;24845:1464::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;24960:11:::1;;24944:12;;24927:14;;24921:3;:20;;;;:::i;:::-;:35;;;;:::i;:::-;24920:51;24912:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;25066:12;;25058:3;25026:15;:29;25042:12;:10;:12::i;:::-;25026:29;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;25025:53;;25017:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:17;25172:10;;;;;;;;;;;25168:383;;25210:14;;25198:26;;25288:12;;25280:3;25248:15;:29;25264:12;:10;:12::i;:::-;25248:29;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;25247:53;;25239:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;25363:10;:24;25374:12;:10;:12::i;:::-;25363:24;;;;;;;;;;;;;;;;;;;;;;;;;25355:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25440:15;;;;;;;;;;;25432:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25168:383;;;25534:5;;25522:17;;25168:383;25598:9;25592:3;:15;;;;:::i;:::-;25579:9;:28;;25571:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;25657:21;25681:12;;25657:36;;25794:14;25811:9;25794:26;;25831:18;25868:9;25862:3;:15;;;;:::i;:::-;25852:6;:26;;;;:::i;:::-;25831:47;;25926:9;25922:179;25945:3;25941:1;:7;25922:179;;;25970:42;25980:12;:10;:12::i;:::-;26010:1;25994:13;:17;;;;:::i;:::-;25970:9;:42::i;:::-;26027:12;;:15;;;;;;;;;:::i;:::-;;;;;;26057;:29;26073:12;:10;:12::i;:::-;26057:29;;;;;;;;;;;;;;;;:32;;;;;;;;;:::i;:::-;;;;;;25950:3;;;;;:::i;:::-;;;;25922:179;;;;26146:1;26133:10;:14;26129:173;;;26164:12;26182:10;:15;;26205:10;26182:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26163:57;;;26243:7;26235:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;26148:154;26129:173;24901:1408;;;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;24845:1464;:::o;30728:289::-;30843:10;30831:22;;:8;:22;;;;30823:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30939:8;30896:18;:30;30915:10;30896:30;;;;;;;;;;;;;;;:40;30927:8;30896:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;30990:8;30963:46;;30978:10;30963:46;;;31000:8;30963:46;;;;;;:::i;:::-;;;;;;;;30728:289;;:::o;28644:102::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28729:9:::1;28715:11;:23;;;;28644:102:::0;:::o;28892:78::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28958:4:::1;28944:11;;:18;;;;;;;;;;;;;;;;;;28892:78::o:0;31983:326::-;32158:39;32177:10;32189:7;32158:18;:39::i;:::-;32150:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;32262:39;32276:4;32282:2;32286:7;32295:5;32262:13;:39::i;:::-;31983:326;;;;:::o;18730:27::-;;;;:::o;41273:594::-;41331:13;41364:16;41372:7;41364;:16::i;:::-;41356:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41453:22;41500:11;;;;;;;;;;;41496:328;;;41602:8;41585:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;41567:61;;41496:328;;;41754:8;41764:17;41773:7;41764:8;:17::i;:::-;41737:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41719:73;;41496:328;41851:8;41844:15;;;41273:594;;;:::o;27463:77::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27528:4:::1;27515:10;;:17;;;;;;;;;;;;;;;;;;27463:77::o:0;26737:127::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26817:13:::1;26843:11;26817:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26737:127:::0;:::o;27114:106::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27203:9:::1;27188:12;:24;;;;27114:106:::0;:::o;18513:30::-;;;;;;;;;;;;;:::o;41879:139::-;41923:13;41984:8;41967:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;41953:57;;41879:139;:::o;31088:164::-;31185:4;31209:18;:25;31228:5;31209:25;;;;;;;;;;;;;;;:35;31235:8;31209:35;;;;;;;;;;;;;;;;;;;;;;;;;31202:42;;31088:164;;;;:::o;15082:192::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15191:1:::1;15171:22;;:8;:22;;;;15163:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15247:19;15257:8;15247:9;:19::i;:::-;15082:192:::0;:::o;27647:93::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27728:4:::1;27707:18;;:25;;;;;;;;;;;;;;;;;;27647:93::o:0;29075:259::-;29140:7;29282:6;29255:9;:23;29265:12;29255:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;29248:41;;29075:259;;;:::o;18835:29::-;;;;:::o;13565:98::-;13618:7;13645:10;13638:17;;13565:98;:::o;34796:110::-;34872:26;34882:2;34886:7;34872:26;;;;;;;;;;;;:9;:26::i;:::-;34796:110;;:::o;33819:127::-;33884:4;33936:1;33908:30;;:7;:16;33916:7;33908:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33901:37;;33819:127;;;:::o;37780:167::-;37882:2;37855:15;:24;37871:7;37855:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37931:7;37927:2;37900:39;;37909:16;37917:7;37909;:16::i;:::-;37900:39;;;;;;;;;;;;37780:167;;:::o;34113:341::-;34206:4;34231:16;34239:7;34231;:16::i;:::-;34223:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34307:13;34323:16;34331:7;34323;:16::i;:::-;34307:32;;34369:5;34358:16;;:7;:16;;;:51;;;;34402:7;34378:31;;:20;34390:7;34378:11;:20::i;:::-;:31;;;34358:51;:87;;;;34413:32;34430:5;34437:7;34413:16;:32::i;:::-;34358:87;34350:96;;;34113:341;;;;:::o;37091:571::-;37243:4;37223:24;;:16;37231:7;37223;:16::i;:::-;:24;;;37215:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37326:1;37312:16;;:2;:16;;;;37304:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37382:39;37403:4;37409:2;37413:7;37382:20;:39::i;:::-;37486:29;37503:1;37507:7;37486:8;:29::i;:::-;37547:1;37528:9;:15;37538:4;37528:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37576:1;37559:9;:13;37569:2;37559:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37607:2;37588:7;:16;37596:7;37588:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37646:7;37642:2;37627:27;;37636:4;37627:27;;;;;;;;;;;;37091:571;;;:::o;15282:173::-;15338:16;15357:6;;;;;;;;;;;15338:25;;15383:8;15374:6;;:17;;;;;;;;;;;;;;;;;;15438:8;15407:40;;15428:8;15407:40;;;;;;;;;;;;15327:128;15282:173;:::o;33191:315::-;33348:28;33358:4;33364:2;33368:7;33348:9;:28::i;:::-;33395:48;33418:4;33424:2;33428:7;33437:5;33395:22;:48::i;:::-;33387:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33191:315;;;;:::o;15498:532::-;15554:13;15593:1;15584:5;:10;15580:53;;;15611:10;;;;;;;;;;;;;;;;;;;;;15580:53;15643:12;15658:5;15643:20;;15674:14;15699:78;15714:1;15706:4;:9;15699:78;;15732:8;;;;;:::i;:::-;;;;15763:2;15755:10;;;;;:::i;:::-;;;15699:78;;;15787:19;15819:6;15809:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15787:39;;15837:154;15853:1;15844:5;:10;15837:154;;15881:1;15871:11;;;;;:::i;:::-;;;15948:2;15940:5;:10;;;;:::i;:::-;15927:2;:24;;;;:::i;:::-;15914:39;;15897:6;15904;15897:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15977:2;15968:11;;;;;:::i;:::-;;;15837:154;;;16015:6;16001:21;;;;;15498:532;;;;:::o;35133:321::-;35263:18;35269:2;35273:7;35263:5;:18::i;:::-;35314:54;35345:1;35349:2;35353:7;35362:5;35314:22;:54::i;:::-;35292:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35133:321;;;:::o;40688:126::-;;;;:::o;38512:801::-;38667:4;38688:15;:2;:13;;;:15::i;:::-;38684:622;;;38740:2;38724:36;;;38761:10;38773:4;38779:7;38788:5;38724:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38720:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38985:1;38968:6;:13;:18;38964:272;;;39011:60;;;;;;;;;;:::i;:::-;;;;;;;;38964:272;39186:6;39180:13;39171:6;39167:2;39163:15;39156:38;38720:531;38855:45;;;38845:55;;;:6;:55;;;;38838:62;;;;;38684:622;39290:4;39283:11;;38512:801;;;;;;;:::o;35790:382::-;35884:1;35870:16;;:2;:16;;;;35862:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35943:16;35951:7;35943;:16::i;:::-;35942:17;35934:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36005:45;36034:1;36038:2;36042:7;36005:20;:45::i;:::-;36080:1;36063:9;:13;36073:2;36063:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36111:2;36092:7;:16;36100:7;36092:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36156:7;36152:2;36131:33;;36148:1;36131:33;;;;;;;;;;;;35790:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:122;;2691:79;;:::i;:::-;2650:122;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:117;;;2856:79;;:::i;:::-;2820:117;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:128;;;3031:79;;:::i;:::-;2984:128;2566:552;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:122;;3249:79;;:::i;:::-;3208:122;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;3137:338;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:122;;3608:79;;:::i;:::-;3567:122;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;3495:340;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3841:139;;;;:::o;3986:143::-;4043:5;4074:6;4068:13;4059:22;;4090:33;4117:5;4090:33;:::i;:::-;3986:143;;;;:::o;4135:329::-;4194:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:119;;;4249:79;;:::i;:::-;4211:119;4369:1;4394:53;4439:7;4430:6;4419:9;4415:22;4394:53;:::i;:::-;4384:63;;4340:117;4135:329;;;;:::o;4470:474::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:119;;;4601:79;;:::i;:::-;4563:119;4721:1;4746:53;4791:7;4782:6;4771:9;4767:22;4746:53;:::i;:::-;4736:63;;4692:117;4848:2;4874:53;4919:7;4910:6;4899:9;4895:22;4874:53;:::i;:::-;4864:63;;4819:118;4470:474;;;;;:::o;4950:619::-;5027:6;5035;5043;5092:2;5080:9;5071:7;5067:23;5063:32;5060:119;;;5098:79;;:::i;:::-;5060:119;5218:1;5243:53;5288:7;5279:6;5268:9;5264:22;5243:53;:::i;:::-;5233:63;;5189:117;5345:2;5371:53;5416:7;5407:6;5396:9;5392:22;5371:53;:::i;:::-;5361:63;;5316:118;5473:2;5499:53;5544:7;5535:6;5524:9;5520:22;5499:53;:::i;:::-;5489:63;;5444:118;4950:619;;;;;:::o;5575:963::-;5672:6;5680;5688;5696;5704;5753:3;5741:9;5732:7;5728:23;5724:33;5721:120;;;5760:79;;:::i;:::-;5721:120;5880:1;5905:53;5950:7;5941:6;5930:9;5926:22;5905:53;:::i;:::-;5895:63;;5851:117;6007:2;6033:53;6078:7;6069:6;6058:9;6054:22;6033:53;:::i;:::-;6023:63;;5978:118;6135:2;6161:53;6206:7;6197:6;6186:9;6182:22;6161:53;:::i;:::-;6151:63;;6106:118;6291:2;6280:9;6276:18;6263:32;6322:18;6314:6;6311:30;6308:117;;;6344:79;;:::i;:::-;6308:117;6457:64;6513:7;6504:6;6493:9;6489:22;6457:64;:::i;:::-;6439:82;;;;6234:297;5575:963;;;;;;;;:::o;6544:943::-;6639:6;6647;6655;6663;6712:3;6700:9;6691:7;6687:23;6683:33;6680:120;;;6719:79;;:::i;:::-;6680:120;6839:1;6864:53;6909:7;6900:6;6889:9;6885:22;6864:53;:::i;:::-;6854:63;;6810:117;6966:2;6992:53;7037:7;7028:6;7017:9;7013:22;6992:53;:::i;:::-;6982:63;;6937:118;7094:2;7120:53;7165:7;7156:6;7145:9;7141:22;7120:53;:::i;:::-;7110:63;;7065:118;7250:2;7239:9;7235:18;7222:32;7281:18;7273:6;7270:30;7267:117;;;7303:79;;:::i;:::-;7267:117;7408:62;7462:7;7453:6;7442:9;7438:22;7408:62;:::i;:::-;7398:72;;7193:287;6544:943;;;;;;;:::o;7493:468::-;7558:6;7566;7615:2;7603:9;7594:7;7590:23;7586:32;7583:119;;;7621:79;;:::i;:::-;7583:119;7741:1;7766:53;7811:7;7802:6;7791:9;7787:22;7766:53;:::i;:::-;7756:63;;7712:117;7868:2;7894:50;7936:7;7927:6;7916:9;7912:22;7894:50;:::i;:::-;7884:60;;7839:115;7493:468;;;;;:::o;7967:474::-;8035:6;8043;8092:2;8080:9;8071:7;8067:23;8063:32;8060:119;;;8098:79;;:::i;:::-;8060:119;8218:1;8243:53;8288:7;8279:6;8268:9;8264:22;8243:53;:::i;:::-;8233:63;;8189:117;8345:2;8371:53;8416:7;8407:6;8396:9;8392:22;8371:53;:::i;:::-;8361:63;;8316:118;7967:474;;;;;:::o;8447:539::-;8531:6;8580:2;8568:9;8559:7;8555:23;8551:32;8548:119;;;8586:79;;:::i;:::-;8548:119;8734:1;8723:9;8719:17;8706:31;8764:18;8756:6;8753:30;8750:117;;;8786:79;;:::i;:::-;8750:117;8891:78;8961:7;8952:6;8941:9;8937:22;8891:78;:::i;:::-;8881:88;;8677:302;8447:539;;;;:::o;8992:327::-;9050:6;9099:2;9087:9;9078:7;9074:23;9070:32;9067:119;;;9105:79;;:::i;:::-;9067:119;9225:1;9250:52;9294:7;9285:6;9274:9;9270:22;9250:52;:::i;:::-;9240:62;;9196:116;8992:327;;;;:::o;9325:349::-;9394:6;9443:2;9431:9;9422:7;9418:23;9414:32;9411:119;;;9449:79;;:::i;:::-;9411:119;9569:1;9594:63;9649:7;9640:6;9629:9;9625:22;9594:63;:::i;:::-;9584:73;;9540:127;9325:349;;;;:::o;9680:509::-;9749:6;9798:2;9786:9;9777:7;9773:23;9769:32;9766:119;;;9804:79;;:::i;:::-;9766:119;9952:1;9941:9;9937:17;9924:31;9982:18;9974:6;9971:30;9968:117;;;10004:79;;:::i;:::-;9968:117;10109:63;10164:7;10155:6;10144:9;10140:22;10109:63;:::i;:::-;10099:73;;9895:287;9680:509;;;;:::o;10195:329::-;10254:6;10303:2;10291:9;10282:7;10278:23;10274:32;10271:119;;;10309:79;;:::i;:::-;10271:119;10429:1;10454:53;10499:7;10490:6;10479:9;10475:22;10454:53;:::i;:::-;10444:63;;10400:117;10195:329;;;;:::o;10530:351::-;10600:6;10649:2;10637:9;10628:7;10624:23;10620:32;10617:119;;;10655:79;;:::i;:::-;10617:119;10775:1;10800:64;10856:7;10847:6;10836:9;10832:22;10800:64;:::i;:::-;10790:74;;10746:128;10530:351;;;;:::o;10887:118::-;10974:24;10992:5;10974:24;:::i;:::-;10969:3;10962:37;10887:118;;:::o;11011:109::-;11092:21;11107:5;11092:21;:::i;:::-;11087:3;11080:34;11011:109;;:::o;11126:115::-;11211:23;11228:5;11211:23;:::i;:::-;11206:3;11199:36;11126:115;;:::o;11247:360::-;11333:3;11361:38;11393:5;11361:38;:::i;:::-;11415:70;11478:6;11473:3;11415:70;:::i;:::-;11408:77;;11494:52;11539:6;11534:3;11527:4;11520:5;11516:16;11494:52;:::i;:::-;11571:29;11593:6;11571:29;:::i;:::-;11566:3;11562:39;11555:46;;11337:270;11247:360;;;;:::o;11613:364::-;11701:3;11729:39;11762:5;11729:39;:::i;:::-;11784:71;11848:6;11843:3;11784:71;:::i;:::-;11777:78;;11864:52;11909:6;11904:3;11897:4;11890:5;11886:16;11864:52;:::i;:::-;11941:29;11963:6;11941:29;:::i;:::-;11936:3;11932:39;11925:46;;11705:272;11613:364;;;;:::o;11983:377::-;12089:3;12117:39;12150:5;12117:39;:::i;:::-;12172:89;12254:6;12249:3;12172:89;:::i;:::-;12165:96;;12270:52;12315:6;12310:3;12303:4;12296:5;12292:16;12270:52;:::i;:::-;12347:6;12342:3;12338:16;12331:23;;12093:267;11983:377;;;;:::o;12390:845::-;12493:3;12530:5;12524:12;12559:36;12585:9;12559:36;:::i;:::-;12611:89;12693:6;12688:3;12611:89;:::i;:::-;12604:96;;12731:1;12720:9;12716:17;12747:1;12742:137;;;;12893:1;12888:341;;;;12709:520;;12742:137;12826:4;12822:9;12811;12807:25;12802:3;12795:38;12862:6;12857:3;12853:16;12846:23;;12742:137;;12888:341;12955:38;12987:5;12955:38;:::i;:::-;13015:1;13029:154;13043:6;13040:1;13037:13;13029:154;;;13117:7;13111:14;13107:1;13102:3;13098:11;13091:35;13167:1;13158:7;13154:15;13143:26;;13065:4;13062:1;13058:12;13053:17;;13029:154;;;13212:6;13207:3;13203:16;13196:23;;12895:334;;12709:520;;12497:738;;12390:845;;;;:::o;13241:366::-;13383:3;13404:67;13468:2;13463:3;13404:67;:::i;:::-;13397:74;;13480:93;13569:3;13480:93;:::i;:::-;13598:2;13593:3;13589:12;13582:19;;13241:366;;;:::o;13613:402::-;13773:3;13794:85;13876:2;13871:3;13794:85;:::i;:::-;13787:92;;13888:93;13977:3;13888:93;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;13613:402;;;:::o;14021:366::-;14163:3;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14260:93;14349:3;14260:93;:::i;:::-;14378:2;14373:3;14369:12;14362:19;;14021:366;;;:::o;14393:::-;14535:3;14556:67;14620:2;14615:3;14556:67;:::i;:::-;14549:74;;14632:93;14721:3;14632:93;:::i;:::-;14750:2;14745:3;14741:12;14734:19;;14393:366;;;:::o;14765:::-;14907:3;14928:67;14992:2;14987:3;14928:67;:::i;:::-;14921:74;;15004:93;15093:3;15004:93;:::i;:::-;15122:2;15117:3;15113:12;15106:19;;14765:366;;;:::o;15137:::-;15279:3;15300:67;15364:2;15359:3;15300:67;:::i;:::-;15293:74;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15137:366;;;:::o;15509:::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:::-;16023:3;16044:67;16108:2;16103:3;16044:67;:::i;:::-;16037:74;;16120:93;16209:3;16120:93;:::i;:::-;16238:2;16233:3;16229:12;16222:19;;15881:366;;;:::o;16253:::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:::-;17139:3;17160:67;17224:2;17219:3;17160:67;:::i;:::-;17153:74;;17236:93;17325:3;17236:93;:::i;:::-;17354:2;17349:3;17345:12;17338:19;;16997:366;;;:::o;17369:402::-;17529:3;17550:85;17632:2;17627:3;17550:85;:::i;:::-;17543:92;;17644:93;17733:3;17644:93;:::i;:::-;17762:2;17757:3;17753:12;17746:19;;17369:402;;;:::o;17777:366::-;17919:3;17940:67;18004:2;17999:3;17940:67;:::i;:::-;17933:74;;18016:93;18105:3;18016:93;:::i;:::-;18134:2;18129:3;18125:12;18118:19;;17777:366;;;:::o;18149:::-;18291:3;18312:67;18376:2;18371:3;18312:67;:::i;:::-;18305:74;;18388:93;18477:3;18388:93;:::i;:::-;18506:2;18501:3;18497:12;18490:19;;18149:366;;;:::o;18521:::-;18663:3;18684:67;18748:2;18743:3;18684:67;:::i;:::-;18677:74;;18760:93;18849:3;18760:93;:::i;:::-;18878:2;18873:3;18869:12;18862:19;;18521:366;;;:::o;18893:::-;19035:3;19056:67;19120:2;19115:3;19056:67;:::i;:::-;19049:74;;19132:93;19221:3;19132:93;:::i;:::-;19250:2;19245:3;19241:12;19234:19;;18893:366;;;:::o;19265:::-;19407:3;19428:67;19492:2;19487:3;19428:67;:::i;:::-;19421:74;;19504:93;19593:3;19504:93;:::i;:::-;19622:2;19617:3;19613:12;19606:19;;19265:366;;;:::o;19637:::-;19779:3;19800:67;19864:2;19859:3;19800:67;:::i;:::-;19793:74;;19876:93;19965:3;19876:93;:::i;:::-;19994:2;19989:3;19985:12;19978:19;;19637:366;;;:::o;20009:::-;20151:3;20172:67;20236:2;20231:3;20172:67;:::i;:::-;20165:74;;20248:93;20337:3;20248:93;:::i;:::-;20366:2;20361:3;20357:12;20350:19;;20009:366;;;:::o;20381:::-;20523:3;20544:67;20608:2;20603:3;20544:67;:::i;:::-;20537:74;;20620:93;20709:3;20620:93;:::i;:::-;20738:2;20733:3;20729:12;20722:19;;20381:366;;;:::o;20753:::-;20895:3;20916:67;20980:2;20975:3;20916:67;:::i;:::-;20909:74;;20992:93;21081:3;20992:93;:::i;:::-;21110:2;21105:3;21101:12;21094:19;;20753:366;;;:::o;21125:::-;21267:3;21288:67;21352:2;21347:3;21288:67;:::i;:::-;21281:74;;21364:93;21453:3;21364:93;:::i;:::-;21482:2;21477:3;21473:12;21466:19;;21125:366;;;:::o;21497:::-;21639:3;21660:67;21724:2;21719:3;21660:67;:::i;:::-;21653:74;;21736:93;21825:3;21736:93;:::i;:::-;21854:2;21849:3;21845:12;21838:19;;21497:366;;;:::o;21869:400::-;22029:3;22050:84;22132:1;22127:3;22050:84;:::i;:::-;22043:91;;22143:93;22232:3;22143:93;:::i;:::-;22261:1;22256:3;22252:11;22245:18;;21869:400;;;:::o;22275:366::-;22417:3;22438:67;22502:2;22497:3;22438:67;:::i;:::-;22431:74;;22514:93;22603:3;22514:93;:::i;:::-;22632:2;22627:3;22623:12;22616:19;;22275:366;;;:::o;22647:::-;22789:3;22810:67;22874:2;22869:3;22810:67;:::i;:::-;22803:74;;22886:93;22975:3;22886:93;:::i;:::-;23004:2;22999:3;22995:12;22988:19;;22647:366;;;:::o;23019:::-;23161:3;23182:67;23246:2;23241:3;23182:67;:::i;:::-;23175:74;;23258:93;23347:3;23258:93;:::i;:::-;23376:2;23371:3;23367:12;23360:19;;23019:366;;;:::o;23391:::-;23533:3;23554:67;23618:2;23613:3;23554:67;:::i;:::-;23547:74;;23630:93;23719:3;23630:93;:::i;:::-;23748:2;23743:3;23739:12;23732:19;;23391:366;;;:::o;23763:::-;23905:3;23926:67;23990:2;23985:3;23926:67;:::i;:::-;23919:74;;24002:93;24091:3;24002:93;:::i;:::-;24120:2;24115:3;24111:12;24104:19;;23763:366;;;:::o;24135:398::-;24294:3;24315:83;24396:1;24391:3;24315:83;:::i;:::-;24308:90;;24407:93;24496:3;24407:93;:::i;:::-;24525:1;24520:3;24516:11;24509:18;;24135:398;;;:::o;24539:366::-;24681:3;24702:67;24766:2;24761:3;24702:67;:::i;:::-;24695:74;;24778:93;24867:3;24778:93;:::i;:::-;24896:2;24891:3;24887:12;24880:19;;24539:366;;;:::o;24911:::-;25053:3;25074:67;25138:2;25133:3;25074:67;:::i;:::-;25067:74;;25150:93;25239:3;25150:93;:::i;:::-;25268:2;25263:3;25259:12;25252:19;;24911:366;;;:::o;25283:118::-;25370:24;25388:5;25370:24;:::i;:::-;25365:3;25358:37;25283:118;;:::o;25407:695::-;25685:3;25707:92;25795:3;25786:6;25707:92;:::i;:::-;25700:99;;25816:95;25907:3;25898:6;25816:95;:::i;:::-;25809:102;;25928:148;26072:3;25928:148;:::i;:::-;25921:155;;26093:3;26086:10;;25407:695;;;;;:::o;26108:535::-;26338:3;26360:92;26448:3;26439:6;26360:92;:::i;:::-;26353:99;;26469:148;26613:3;26469:148;:::i;:::-;26462:155;;26634:3;26627:10;;26108:535;;;;:::o;26649:::-;26879:3;26901:92;26989:3;26980:6;26901:92;:::i;:::-;26894:99;;27010:148;27154:3;27010:148;:::i;:::-;27003:155;;27175:3;27168:10;;26649:535;;;;:::o;27190:379::-;27374:3;27396:147;27539:3;27396:147;:::i;:::-;27389:154;;27560:3;27553:10;;27190:379;;;:::o;27575:222::-;27668:4;27706:2;27695:9;27691:18;27683:26;;27719:71;27787:1;27776:9;27772:17;27763:6;27719:71;:::i;:::-;27575:222;;;;:::o;27803:640::-;27998:4;28036:3;28025:9;28021:19;28013:27;;28050:71;28118:1;28107:9;28103:17;28094:6;28050:71;:::i;:::-;28131:72;28199:2;28188:9;28184:18;28175:6;28131:72;:::i;:::-;28213;28281:2;28270:9;28266:18;28257:6;28213:72;:::i;:::-;28332:9;28326:4;28322:20;28317:2;28306:9;28302:18;28295:48;28360:76;28431:4;28422:6;28360:76;:::i;:::-;28352:84;;27803:640;;;;;;;:::o;28449:210::-;28536:4;28574:2;28563:9;28559:18;28551:26;;28587:65;28649:1;28638:9;28634:17;28625:6;28587:65;:::i;:::-;28449:210;;;;:::o;28665:218::-;28756:4;28794:2;28783:9;28779:18;28771:26;;28807:69;28873:1;28862:9;28858:17;28849:6;28807:69;:::i;:::-;28665:218;;;;:::o;28889:313::-;29002:4;29040:2;29029:9;29025:18;29017:26;;29089:9;29083:4;29079:20;29075:1;29064:9;29060:17;29053:47;29117:78;29190:4;29181:6;29117:78;:::i;:::-;29109:86;;28889:313;;;;:::o;29208:419::-;29374:4;29412:2;29401:9;29397:18;29389:26;;29461:9;29455:4;29451:20;29447:1;29436:9;29432:17;29425:47;29489:131;29615:4;29489:131;:::i;:::-;29481:139;;29208:419;;;:::o;29633:::-;29799:4;29837:2;29826:9;29822:18;29814:26;;29886:9;29880:4;29876:20;29872:1;29861:9;29857:17;29850:47;29914:131;30040:4;29914:131;:::i;:::-;29906:139;;29633:419;;;:::o;30058:::-;30224:4;30262:2;30251:9;30247:18;30239:26;;30311:9;30305:4;30301:20;30297:1;30286:9;30282:17;30275:47;30339:131;30465:4;30339:131;:::i;:::-;30331:139;;30058:419;;;:::o;30483:::-;30649:4;30687:2;30676:9;30672:18;30664:26;;30736:9;30730:4;30726:20;30722:1;30711:9;30707:17;30700:47;30764:131;30890:4;30764:131;:::i;:::-;30756:139;;30483:419;;;:::o;30908:::-;31074:4;31112:2;31101:9;31097:18;31089:26;;31161:9;31155:4;31151:20;31147:1;31136:9;31132:17;31125:47;31189:131;31315:4;31189:131;:::i;:::-;31181:139;;30908:419;;;:::o;31333:::-;31499:4;31537:2;31526:9;31522:18;31514:26;;31586:9;31580:4;31576:20;31572:1;31561:9;31557:17;31550:47;31614:131;31740:4;31614:131;:::i;:::-;31606:139;;31333:419;;;:::o;31758:::-;31924:4;31962:2;31951:9;31947:18;31939:26;;32011:9;32005:4;32001:20;31997:1;31986:9;31982:17;31975:47;32039:131;32165:4;32039:131;:::i;:::-;32031:139;;31758:419;;;:::o;32183:::-;32349:4;32387:2;32376:9;32372:18;32364:26;;32436:9;32430:4;32426:20;32422:1;32411:9;32407:17;32400:47;32464:131;32590:4;32464:131;:::i;:::-;32456:139;;32183:419;;;:::o;32608:::-;32774:4;32812:2;32801:9;32797:18;32789:26;;32861:9;32855:4;32851:20;32847:1;32836:9;32832:17;32825:47;32889:131;33015:4;32889:131;:::i;:::-;32881:139;;32608:419;;;:::o;33033:::-;33199:4;33237:2;33226:9;33222:18;33214:26;;33286:9;33280:4;33276:20;33272:1;33261:9;33257:17;33250:47;33314:131;33440:4;33314:131;:::i;:::-;33306:139;;33033:419;;;:::o;33458:::-;33624:4;33662:2;33651:9;33647:18;33639:26;;33711:9;33705:4;33701:20;33697:1;33686:9;33682:17;33675:47;33739:131;33865:4;33739:131;:::i;:::-;33731:139;;33458:419;;;:::o;33883:::-;34049:4;34087:2;34076:9;34072:18;34064:26;;34136:9;34130:4;34126:20;34122:1;34111:9;34107:17;34100:47;34164:131;34290:4;34164:131;:::i;:::-;34156:139;;33883:419;;;:::o;34308:::-;34474:4;34512:2;34501:9;34497:18;34489:26;;34561:9;34555:4;34551:20;34547:1;34536:9;34532:17;34525:47;34589:131;34715:4;34589:131;:::i;:::-;34581:139;;34308:419;;;:::o;34733:::-;34899:4;34937:2;34926:9;34922:18;34914:26;;34986:9;34980:4;34976:20;34972:1;34961:9;34957:17;34950:47;35014:131;35140:4;35014:131;:::i;:::-;35006:139;;34733:419;;;:::o;35158:::-;35324:4;35362:2;35351:9;35347:18;35339:26;;35411:9;35405:4;35401:20;35397:1;35386:9;35382:17;35375:47;35439:131;35565:4;35439:131;:::i;:::-;35431:139;;35158:419;;;:::o;35583:::-;35749:4;35787:2;35776:9;35772:18;35764:26;;35836:9;35830:4;35826:20;35822:1;35811:9;35807:17;35800:47;35864:131;35990:4;35864:131;:::i;:::-;35856:139;;35583:419;;;:::o;36008:::-;36174:4;36212:2;36201:9;36197:18;36189:26;;36261:9;36255:4;36251:20;36247:1;36236:9;36232:17;36225:47;36289:131;36415:4;36289:131;:::i;:::-;36281:139;;36008:419;;;:::o;36433:::-;36599:4;36637:2;36626:9;36622:18;36614:26;;36686:9;36680:4;36676:20;36672:1;36661:9;36657:17;36650:47;36714:131;36840:4;36714:131;:::i;:::-;36706:139;;36433:419;;;:::o;36858:::-;37024:4;37062:2;37051:9;37047:18;37039:26;;37111:9;37105:4;37101:20;37097:1;37086:9;37082:17;37075:47;37139:131;37265:4;37139:131;:::i;:::-;37131:139;;36858:419;;;:::o;37283:::-;37449:4;37487:2;37476:9;37472:18;37464:26;;37536:9;37530:4;37526:20;37522:1;37511:9;37507:17;37500:47;37564:131;37690:4;37564:131;:::i;:::-;37556:139;;37283:419;;;:::o;37708:::-;37874:4;37912:2;37901:9;37897:18;37889:26;;37961:9;37955:4;37951:20;37947:1;37936:9;37932:17;37925:47;37989:131;38115:4;37989:131;:::i;:::-;37981:139;;37708:419;;;:::o;38133:::-;38299:4;38337:2;38326:9;38322:18;38314:26;;38386:9;38380:4;38376:20;38372:1;38361:9;38357:17;38350:47;38414:131;38540:4;38414:131;:::i;:::-;38406:139;;38133:419;;;:::o;38558:::-;38724:4;38762:2;38751:9;38747:18;38739:26;;38811:9;38805:4;38801:20;38797:1;38786:9;38782:17;38775:47;38839:131;38965:4;38839:131;:::i;:::-;38831:139;;38558:419;;;:::o;38983:::-;39149:4;39187:2;39176:9;39172:18;39164:26;;39236:9;39230:4;39226:20;39222:1;39211:9;39207:17;39200:47;39264:131;39390:4;39264:131;:::i;:::-;39256:139;;38983:419;;;:::o;39408:::-;39574:4;39612:2;39601:9;39597:18;39589:26;;39661:9;39655:4;39651:20;39647:1;39636:9;39632:17;39625:47;39689:131;39815:4;39689:131;:::i;:::-;39681:139;;39408:419;;;:::o;39833:::-;39999:4;40037:2;40026:9;40022:18;40014:26;;40086:9;40080:4;40076:20;40072:1;40061:9;40057:17;40050:47;40114:131;40240:4;40114:131;:::i;:::-;40106:139;;39833:419;;;:::o;40258:::-;40424:4;40462:2;40451:9;40447:18;40439:26;;40511:9;40505:4;40501:20;40497:1;40486:9;40482:17;40475:47;40539:131;40665:4;40539:131;:::i;:::-;40531:139;;40258:419;;;:::o;40683:::-;40849:4;40887:2;40876:9;40872:18;40864:26;;40936:9;40930:4;40926:20;40922:1;40911:9;40907:17;40900:47;40964:131;41090:4;40964:131;:::i;:::-;40956:139;;40683:419;;;:::o;41108:222::-;41201:4;41239:2;41228:9;41224:18;41216:26;;41252:71;41320:1;41309:9;41305:17;41296:6;41252:71;:::i;:::-;41108:222;;;;:::o;41336:129::-;41370:6;41397:20;;:::i;:::-;41387:30;;41426:33;41454:4;41446:6;41426:33;:::i;:::-;41336:129;;;:::o;41471:75::-;41504:6;41537:2;41531:9;41521:19;;41471:75;:::o;41552:311::-;41629:4;41719:18;41711:6;41708:30;41705:56;;;41741:18;;:::i;:::-;41705:56;41791:4;41783:6;41779:17;41771:25;;41851:4;41845;41841:15;41833:23;;41552:311;;;:::o;41869:307::-;41930:4;42020:18;42012:6;42009:30;42006:56;;;42042:18;;:::i;:::-;42006:56;42080:29;42102:6;42080:29;:::i;:::-;42072:37;;42164:4;42158;42154:15;42146:23;;41869:307;;;:::o;42182:308::-;42244:4;42334:18;42326:6;42323:30;42320:56;;;42356:18;;:::i;:::-;42320:56;42394:29;42416:6;42394:29;:::i;:::-;42386:37;;42478:4;42472;42468:15;42460:23;;42182:308;;;:::o;42496:141::-;42545:4;42568:3;42560:11;;42591:3;42588:1;42581:14;42625:4;42622:1;42612:18;42604:26;;42496:141;;;:::o;42643:98::-;42694:6;42728:5;42722:12;42712:22;;42643:98;;;:::o;42747:99::-;42799:6;42833:5;42827:12;42817:22;;42747:99;;;:::o;42852:168::-;42935:11;42969:6;42964:3;42957:19;43009:4;43004:3;43000:14;42985:29;;42852:168;;;;:::o;43026:147::-;43127:11;43164:3;43149:18;;43026:147;;;;:::o;43179:169::-;43263:11;43297:6;43292:3;43285:19;43337:4;43332:3;43328:14;43313:29;;43179:169;;;;:::o;43354:148::-;43456:11;43493:3;43478:18;;43354:148;;;;:::o;43508:305::-;43548:3;43567:20;43585:1;43567:20;:::i;:::-;43562:25;;43601:20;43619:1;43601:20;:::i;:::-;43596:25;;43755:1;43687:66;43683:74;43680:1;43677:81;43674:107;;;43761:18;;:::i;:::-;43674:107;43805:1;43802;43798:9;43791:16;;43508:305;;;;:::o;43819:185::-;43859:1;43876:20;43894:1;43876:20;:::i;:::-;43871:25;;43910:20;43928:1;43910:20;:::i;:::-;43905:25;;43949:1;43939:35;;43954:18;;:::i;:::-;43939:35;43996:1;43993;43989:9;43984:14;;43819:185;;;;:::o;44010:348::-;44050:7;44073:20;44091:1;44073:20;:::i;:::-;44068:25;;44107:20;44125:1;44107:20;:::i;:::-;44102:25;;44295:1;44227:66;44223:74;44220:1;44217:81;44212:1;44205:9;44198:17;44194:105;44191:131;;;44302:18;;:::i;:::-;44191:131;44350:1;44347;44343:9;44332:20;;44010:348;;;;:::o;44364:191::-;44404:4;44424:20;44442:1;44424:20;:::i;:::-;44419:25;;44458:20;44476:1;44458:20;:::i;:::-;44453:25;;44497:1;44494;44491:8;44488:34;;;44502:18;;:::i;:::-;44488:34;44547:1;44544;44540:9;44532:17;;44364:191;;;;:::o;44561:96::-;44598:7;44627:24;44645:5;44627:24;:::i;:::-;44616:35;;44561:96;;;:::o;44663:90::-;44697:7;44740:5;44733:13;44726:21;44715:32;;44663:90;;;:::o;44759:149::-;44795:7;44835:66;44828:5;44824:78;44813:89;;44759:149;;;:::o;44914:126::-;44951:7;44991:42;44984:5;44980:54;44969:65;;44914:126;;;:::o;45046:77::-;45083:7;45112:5;45101:16;;45046:77;;;:::o;45129:154::-;45213:6;45208:3;45203;45190:30;45275:1;45266:6;45261:3;45257:16;45250:27;45129:154;;;:::o;45289:307::-;45357:1;45367:113;45381:6;45378:1;45375:13;45367:113;;;45466:1;45461:3;45457:11;45451:18;45447:1;45442:3;45438:11;45431:39;45403:2;45400:1;45396:10;45391:15;;45367:113;;;45498:6;45495:1;45492:13;45489:101;;;45578:1;45569:6;45564:3;45560:16;45553:27;45489:101;45338:258;45289:307;;;:::o;45602:320::-;45646:6;45683:1;45677:4;45673:12;45663:22;;45730:1;45724:4;45720:12;45751:18;45741:81;;45807:4;45799:6;45795:17;45785:27;;45741:81;45869:2;45861:6;45858:14;45838:18;45835:38;45832:84;;;45888:18;;:::i;:::-;45832:84;45653:269;45602:320;;;:::o;45928:281::-;46011:27;46033:4;46011:27;:::i;:::-;46003:6;45999:40;46141:6;46129:10;46126:22;46105:18;46093:10;46090:34;46087:62;46084:88;;;46152:18;;:::i;:::-;46084:88;46192:10;46188:2;46181:22;45971:238;45928:281;;:::o;46215:233::-;46254:3;46277:24;46295:5;46277:24;:::i;:::-;46268:33;;46323:66;46316:5;46313:77;46310:103;;;46393:18;;:::i;:::-;46310:103;46440:1;46433:5;46429:13;46422:20;;46215:233;;;:::o;46454:176::-;46486:1;46503:20;46521:1;46503:20;:::i;:::-;46498:25;;46537:20;46555:1;46537:20;:::i;:::-;46532:25;;46576:1;46566:35;;46581:18;;:::i;:::-;46566:35;46622:1;46619;46615:9;46610:14;;46454:176;;;;:::o;46636:180::-;46684:77;46681:1;46674:88;46781:4;46778:1;46771:15;46805:4;46802:1;46795:15;46822:180;46870:77;46867:1;46860:88;46967:4;46964:1;46957:15;46991:4;46988:1;46981:15;47008:180;47056:77;47053:1;47046:88;47153:4;47150:1;47143:15;47177:4;47174:1;47167:15;47194:180;47242:77;47239:1;47232:88;47339:4;47336:1;47329:15;47363:4;47360:1;47353:15;47380:180;47428:77;47425:1;47418:88;47525:4;47522:1;47515:15;47549:4;47546:1;47539:15;47566:117;47675:1;47672;47665:12;47689:117;47798:1;47795;47788:12;47812:117;47921:1;47918;47911:12;47935:117;48044:1;48041;48034:12;48058:117;48167:1;48164;48157:12;48181:117;48290:1;48287;48280:12;48304:102;48345:6;48396:2;48392:7;48387:2;48380:5;48376:14;48372:28;48362:38;;48304:102;;;:::o;48412:180::-;48552:32;48548:1;48540:6;48536:14;48529:56;48412:180;:::o;48598:163::-;48738:15;48734:1;48726:6;48722:14;48715:39;48598:163;:::o;48767:222::-;48907:34;48903:1;48895:6;48891:14;48884:58;48976:5;48971:2;48963:6;48959:15;48952:30;48767:222;:::o;48995:237::-;49135:34;49131:1;49123:6;49119:14;49112:58;49204:20;49199:2;49191:6;49187:15;49180:45;48995:237;:::o;49238:225::-;49378:34;49374:1;49366:6;49362:14;49355:58;49447:8;49442:2;49434:6;49430:15;49423:33;49238:225;:::o;49469:178::-;49609:30;49605:1;49597:6;49593:14;49586:54;49469:178;:::o;49653:223::-;49793:34;49789:1;49781:6;49777:14;49770:58;49862:6;49857:2;49849:6;49845:15;49838:31;49653:223;:::o;49882:222::-;50022:34;50018:1;50010:6;50006:14;49999:58;50091:5;50086:2;50078:6;50074:15;50067:30;49882:222;:::o;50110:174::-;50250:26;50246:1;50238:6;50234:14;50227:50;50110:174;:::o;50290:223::-;50430:34;50426:1;50418:6;50414:14;50407:58;50499:6;50494:2;50486:6;50482:15;50475:31;50290:223;:::o;50519:175::-;50659:27;50655:1;50647:6;50643:14;50636:51;50519:175;:::o;50700:162::-;50840:14;50836:1;50828:6;50824:14;50817:38;50700:162;:::o;50868:231::-;51008:34;51004:1;50996:6;50992:14;50985:58;51077:14;51072:2;51064:6;51060:15;51053:39;50868:231;:::o;51105:223::-;51245:34;51241:1;51233:6;51229:14;51222:58;51314:6;51309:2;51301:6;51297:15;51290:31;51105:223;:::o;51334:243::-;51474:34;51470:1;51462:6;51458:14;51451:58;51543:26;51538:2;51530:6;51526:15;51519:51;51334:243;:::o;51583:229::-;51723:34;51719:1;51711:6;51707:14;51700:58;51792:12;51787:2;51779:6;51775:15;51768:37;51583:229;:::o;51818:228::-;51958:34;51954:1;51946:6;51942:14;51935:58;52027:11;52022:2;52014:6;52010:15;52003:36;51818:228;:::o;52052:179::-;52192:31;52188:1;52180:6;52176:14;52169:55;52052:179;:::o;52237:167::-;52377:19;52373:1;52365:6;52361:14;52354:43;52237:167;:::o;52410:175::-;52550:27;52546:1;52538:6;52534:14;52527:51;52410:175;:::o;52591:182::-;52731:34;52727:1;52719:6;52715:14;52708:58;52591:182;:::o;52779:169::-;52919:21;52915:1;52907:6;52903:14;52896:45;52779:169;:::o;52954:231::-;53094:34;53090:1;53082:6;53078:14;53071:58;53163:14;53158:2;53150:6;53146:15;53139:39;52954:231;:::o;53191:155::-;53331:7;53327:1;53319:6;53315:14;53308:31;53191:155;:::o;53352:182::-;53492:34;53488:1;53480:6;53476:14;53469:58;53352:182;:::o;53540:174::-;53680:26;53676:1;53668:6;53664:14;53657:50;53540:174;:::o;53720:228::-;53860:34;53856:1;53848:6;53844:14;53837:58;53929:11;53924:2;53916:6;53912:15;53905:36;53720:228;:::o;53954:234::-;54094:34;54090:1;54082:6;54078:14;54071:58;54163:17;54158:2;54150:6;54146:15;54139:42;53954:234;:::o;54194:220::-;54334:34;54330:1;54322:6;54318:14;54311:58;54403:3;54398:2;54390:6;54386:15;54379:28;54194:220;:::o;54420:114::-;;:::o;54540:236::-;54680:34;54676:1;54668:6;54664:14;54657:58;54749:19;54744:2;54736:6;54732:15;54725:44;54540:236;:::o;54782:169::-;54922:21;54918:1;54910:6;54906:14;54899:45;54782:169;:::o;54957:122::-;55030:24;55048:5;55030:24;:::i;:::-;55023:5;55020:35;55010:63;;55069:1;55066;55059:12;55010:63;54957:122;:::o;55085:116::-;55155:21;55170:5;55155:21;:::i;:::-;55148:5;55145:32;55135:60;;55191:1;55188;55181:12;55135:60;55085:116;:::o;55207:120::-;55279:23;55296:5;55279:23;:::i;:::-;55272:5;55269:34;55259:62;;55317:1;55314;55307:12;55259:62;55207:120;:::o;55333:122::-;55406:24;55424:5;55406:24;:::i;:::-;55399:5;55396:35;55386:63;;55445:1;55442;55435:12;55386:63;55333:122;:::o
Swarm Source
ipfs://252c9952df7d20ce4a510862471ac946e2faaf9f4446c691f3c20d7cf2c3ef9b
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.