ETH Price: $2,615.03 (+0.82%)

Token

Fud Frens (FF)
 

Overview

Max Total Supply

1,030 FF

Holders

107

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
leshays.eth
Balance
30 FF
0x416c2200DDc062d5853A765E5ff43AeA24a947A8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FudBuds

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 5 of 12: FudBuds.sol
// SPDX-License-Identifier: MIT

//          _____                    _____                    _____                            _____                    _____                    _____                    _____                    _____          
//         /\    \                  /\    \                  /\    \                          /\    \                  /\    \                  /\    \                  /\    \                  /\    \         
//        /::\    \                /::\____\                /::\    \                        /::\    \                /::\    \                /::\    \                /::\____\                /::\    \        
//       /::::\    \              /:::/    /               /::::\    \                      /::::\    \              /::::\    \              /::::\    \              /::::|   |               /::::\    \       
//      /::::::\    \            /:::/    /               /::::::\    \                    /::::::\    \            /::::::\    \            /::::::\    \            /:::::|   |              /::::::\    \      
//     /:::/\:::\    \          /:::/    /               /:::/\:::\    \                  /:::/\:::\    \          /:::/\:::\    \          /:::/\:::\    \          /::::::|   |             /:::/\:::\    \     
//    /:::/__\:::\    \        /:::/    /               /:::/  \:::\    \                /:::/__\:::\    \        /:::/__\:::\    \        /:::/__\:::\    \        /:::/|::|   |            /:::/__\:::\    \    
//   /::::\   \:::\    \      /:::/    /               /:::/    \:::\    \              /::::\   \:::\    \      /::::\   \:::\    \      /::::\   \:::\    \      /:::/ |::|   |            \:::\   \:::\    \   
//  /::::::\   \:::\    \    /:::/    /      _____    /:::/    / \:::\    \            /::::::\   \:::\    \    /::::::\   \:::\    \    /::::::\   \:::\    \    /:::/  |::|   | _____    ___\:::\   \:::\    \  
// /:::/\:::\   \:::\    \  /:::/____/      /\    \  /:::/    /   \:::\ ___\          /:::/\:::\   \:::\    \  /:::/\:::\   \:::\____\  /:::/\:::\   \:::\    \  /:::/   |::|   |/\    \  /\   \:::\   \:::\    \ 
///:::/  \:::\   \:::\____\|:::|    /      /::\____\/:::/____/     \:::|    |        /:::/  \:::\   \:::\____\/:::/  \:::\   \:::|    |/:::/__\:::\   \:::\____\/:: /    |::|   /::\____\/::\   \:::\   \:::\____\
//\::/    \:::\   \::/    /|:::|____\     /:::/    /\:::\    \     /:::|____|        \::/    \:::\   \::/    /\::/   |::::\  /:::|____|\:::\   \:::\   \::/    /\::/    /|::|  /:::/    /\:::\   \:::\   \::/    /
// \/____/ \:::\   \/____/  \:::\    \   /:::/    /  \:::\    \   /:::/    /          \/____/ \:::\   \/____/  \/____|:::::\/:::/    /  \:::\   \:::\   \/____/  \/____/ |::| /:::/    /  \:::\   \:::\   \/____/ 
//          \:::\    \       \:::\    \ /:::/    /    \:::\    \ /:::/    /                    \:::\    \            |:::::::::/    /    \:::\   \:::\    \              |::|/:::/    /    \:::\   \:::\    \     
//           \:::\____\       \:::\    /:::/    /      \:::\    /:::/    /                      \:::\____\           |::|\::::/    /      \:::\   \:::\____\             |::::::/    /      \:::\   \:::\____\    
//            \::/    /        \:::\__/:::/    /        \:::\  /:::/    /                        \::/    /           |::| \::/____/        \:::\   \::/    /             |:::::/    /        \:::\  /:::/    /    
//             \/____/          \::::::::/    /          \:::\/:::/    /                          \/____/            |::|  ~|               \:::\   \/____/              |::::/    /          \:::\/:::/    /     
//                               \::::::/    /            \::::::/    /                                              |::|   |                \:::\    \                  /:::/    /            \::::::/    /      
//                                \::::/    /              \::::/    /                                               \::|   |                 \:::\____\                /:::/    /              \::::/    /       
//                                 \::/____/                \::/____/                                                 \:|   |                  \::/    /                \::/    /                \::/    /        
//                                  ~~                       ~~                                                        \|___|                   \/____/                  \/____/                  \/____/         

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ERC721A.sol";


interface IFud {
    function mint(address to, uint256 value) external;
    function burn(address user, uint256 amount) external;
}

contract FudBuds is Ownable, ERC721A {
  
  IFud public Fud;

  uint256 public immutable maxPerAddress;
  
  uint256 public maxFreePerTransaction = 3;

  uint256 public maxPerTransaction = 20; 

  uint256 public mintPrice = 0.035 ether;

  bool public mintActive = false;
  
  bool public claimingActive = false;

  string private _baseTokenURI;

  uint256 public maxFreeSupply = 1000;

  uint256 public maxGenesis = 3333;

  uint256 public startTime;

  mapping(address => uint256) public lastTimeClaimed;
  mapping(address => uint256) public fudFrensBalance;
  mapping(address => uint256) public outstandingFud;

  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) ERC721A("Fud Frens", "FF", maxBatchSize_, collectionSize_) {
    maxPerAddress = maxBatchSize_;
    startTime = block.timestamp;
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }

  function freeMint(uint256 quantity) external callerIsUser {
    require(mintActive, "mint is not active");
    require(totalSupply() + quantity <= maxFreeSupply, "max supply has been reached");
    require(quantity <= maxFreePerTransaction, "max 3 per transaction");
    fudFrensBalance[msg.sender] += quantity;
    _safeMint(msg.sender, quantity);
  }

  function mint(uint256 quantity) external payable callerIsUser {
    require(mintActive, "mint is not active");
    require(totalSupply() + quantity <= maxGenesis, "max supply has been reached");
    require( quantity <= maxPerTransaction, "max 20 per address");
    require(msg.value >= mintPrice * quantity, "not enough eth sent");
    fudFrensBalance[msg.sender] += quantity;
    _safeMint(msg.sender, quantity);
  }

  function devMint(uint256 quantity) external onlyOwner {
    require(quantity % maxBatchSize == 0,"can only mint a multiple of the maxBatchSize");
    require(totalSupply() + quantity <= maxGenesis, "max supply has been reached");
    uint256 numChunks = quantity / maxBatchSize;
    fudFrensBalance[msg.sender] += quantity; 
    for (uint256 i = 0; i < numChunks; i++) {
      _safeMint(msg.sender, maxBatchSize);
    }
  }

  //This will also claim any outstanding Fud
  function mintWithFud() external callerIsUser {
    require(totalSupply() < collectionSize, "max supply has been reached");
    Fud.burn(msg.sender, 60 ether);
    outstandingFud[msg.sender] += getOwedFud(msg.sender);
    lastTimeClaimed[msg.sender] = block.timestamp;
    _safeMint(msg.sender, 1);
  }

  function claimFud() external {
    Fud.mint(msg.sender, getOwedFud(msg.sender) + outstandingFud[msg.sender]);
    lastTimeClaimed[msg.sender] = block.timestamp;
    outstandingFud[msg.sender] = 0;
  }

  function getOwedFud(address user) public view returns(uint256) {
    return((block.timestamp - (lastTimeClaimed[user] >= startTime ? lastTimeClaimed[user] : startTime)) * fudFrensBalance[user] * 1 ether / 1 days);
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }

  function setBaseURI(string calldata baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

  function toggleClaimingActive() public onlyOwner {
    claimingActive = !claimingActive;
  }

  function withdrawMoney() external onlyOwner {
    require(address(this).balance > 0);
    payable(msg.sender).transfer(address(this).balance);
  }

  function setOwnersExplicit(uint256 quantity) external onlyOwner {
    _setOwnersExplicit(quantity);
  }

  function toggleMintActive() external onlyOwner {
    mintActive = !mintActive;
  }

  function setFudAddress(address _fudAddress) external onlyOwner {
    Fud = IFud(_fudAddress);
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }

  function updateOwedFud(address from, address to) internal {
        require(msg.sender == address(this));
        if(from != address(0)){
            outstandingFud[from] += getOwedFud(from);
            lastTimeClaimed[from] = block.timestamp;
        }
        if(to != address(0)){
            outstandingFud[to] += getOwedFud(to);
            lastTimeClaimed[to] = block.timestamp;
        }
    }

  function transferFrom(address from, address to, uint256 tokenId) public override {
    updateOwedFud(from, to);
    fudFrensBalance[from]--;
    fudFrensBalance[to]++;
    
    ERC721A.transferFrom(from, to, tokenId);
  }

  function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override {
    updateOwedFud(from, to);
    fudFrensBalance[from]--;
    fudFrensBalance[to]++;

    ERC721A.safeTransferFrom(from, to, tokenId, data);
  }

}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 12: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 12: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 4 of 12: ERC721A.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./IERC721Enumerable.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // Mapping from token ID to approved address
  mapping(uint256 => address) private _tokenApprovals;

  // Mapping from owner to operator approvals
  mapping(address => mapping(address => bool)) private _operatorApprovals;

  /**
   * @dev
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

  /**
   * @dev See {IERC721Enumerable-totalSupply}.
   */
  function totalSupply() public view override returns (uint256) {
    return currentIndex;
  }

  /**
   * @dev See {IERC721Enumerable-tokenByIndex}.
   */
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  }

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @dev See {IERC165-supportsInterface}.
   */
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

  /**
   * @dev See {IERC721-balanceOf}.
   */
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @dev See {IERC721Metadata-name}.
   */
  function name() public view virtual override returns (string memory) {
    return _name;
  }

  /**
   * @dev See {IERC721Metadata-symbol}.
   */
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  }

  /**
   * @dev See {IERC721Metadata-tokenURI}.
   */
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString()))
        : "";
  }

  /**
   * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
   * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
   * by default, can be overriden in child contracts.
   */
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  /**
   * @dev See {IERC721-approve}.
   */
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );

    _approve(to, tokenId, owner);
  }

  /**
   * @dev See {IERC721-getApproved}.
   */
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), operator, approved);
  }

  /**
   * @dev See {IERC721-isApprovedForAll}.
   */
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }

  /**
   * @dev See {IERC721-transferFrom}.
   */
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public virtual override {
    _transfer(from, to, tokenId);
  }

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) external override {
    safeTransferFrom(from, to, tokenId, "");
  }

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public virtual override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: 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`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * Requirements:
   *
   * - `to` cannot be the zero address.
   * - `tokenId` token must be owned by `from`.
   *
   * Emits a {Transfer} event.
   */
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

    // Clear approvals from the previous owner
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

  /**
   * @dev Approve `to` to operate on `tokenId`
   *
   * Emits a {Approval} event.
   */
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

  /**
   * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
   * The call is not executed if the target address is not a contract.
   *
   * @param from address representing the previous owner of the given token ID
   * @param to target address that will receive the tokens
   * @param tokenId uint256 ID of the token to be transferred
   * @param _data bytes optional data to send along with the call
   * @return bool whether the call correctly returned the expected magic value
   */
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
   * transferred to `to`.
   * - When `from` is zero, `tokenId` will be minted for `to`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}

File 6 of 12: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 7 of 12: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 8 of 12: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 9 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 10 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 11 of 12: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 12 of 12: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Fud","outputs":[{"internalType":"contract IFud","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimFud","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fudFrensBalance","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":"user","type":"address"}],"name":"getOwedFud","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTimeClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreePerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGenesis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintWithFud","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"outstandingFud","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fudAddress","type":"address"}],"name":"setFudAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleClaimingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052600060015560006008556003600a556014600b55667c585087238000600c556000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506103e8600f55610d056010553480156200007257600080fd5b5060405162006306380380620063068339818101604052810190620000989190620003a2565b6040518060400160405280600981526020017f467564204672656e7300000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f46460000000000000000000000000000000000000000000000000000000000008152508383620001266200011a6200020f60201b60201c565b6200021760201b60201c565b600081116200016c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001639062000459565b60405180910390fd5b60008211620001b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a99062000437565b60405180910390fd5b8360029080519060200190620001ca929190620002db565b508260039080519060200190620001e3929190620002db565b508160a081815250508060808181525050505050508160c08181525050426011819055505050620005b8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002e99062000496565b90600052602060002090601f0160209004810192826200030d576000855562000359565b82601f106200032857805160ff191683800117855562000359565b8280016001018555821562000359579182015b82811115620003585782518255916020019190600101906200033b565b5b5090506200036891906200036c565b5090565b5b80821115620003875760008160009055506001016200036d565b5090565b6000815190506200039c816200059e565b92915050565b60008060408385031215620003bc57620003bb620004fb565b5b6000620003cc858286016200038b565b9250506020620003df858286016200038b565b9150509250929050565b6000620003f86027836200047b565b9150620004058262000500565b604082019050919050565b60006200041f602e836200047b565b91506200042c826200054f565b604082019050919050565b600060208201905081810360008301526200045281620003e9565b9050919050565b60006020820190508181036000830152620004748162000410565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620004af57607f821691505b60208210811415620004c657620004c5620004cc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005a9816200048c565b8114620005b557600080fd5b50565b60805160a05160c051615ced620006196000396000611778015260008181611343015281816114080152818161149b01528181612df101528181612e1a0152613a1701526000818161237b01528181612b5b0152612b8f0152615ced6000f3fe6080604052600436106102885760003560e01c8063697fd03d1161015a578063ac446002116100c1578063dc33e6811161007a578063dc33e6811461099d578063dc37c6d8146109da578063e985e9c514610a17578063eb59ccfa14610a54578063edce4e6d14610a7f578063f2fde38b14610aa857610288565b8063ac446002146108c7578063b88d4fde146108de578063c87b56dd14610907578063d02c2bf214610944578063d7224ba01461095b578063db7fa6b21461098657610288565b80638da5cb5b116101135780638da5cb5b146107b25780639231ab2a146107dd57806395d89b411461081a5780639d98702c14610845578063a0712d6814610882578063a22cb4651461089e57610288565b8063697fd03d146106c85780636ccd5e50146106df57806370a082311461070a578063715018a61461074757806378e979251461075e5780637c928fe91461078957610288565b806342842e0e116101fe5780635c8fe8a2116101b75780635c8fe8a2146105b65780635fabe446146105cd5780636352211e146105f8578063639814e01461063557806367c0ee10146106605780636817c76c1461069d57610288565b806342842e0e146104a6578063456f544d146104cf57806347513334146104fa5780634b980d67146105255780634f6ccce71461055057806355f804b31461058d57610288565b806318160ddd1161025057806318160ddd1461039857806323b872dd146103c357806325fd90f3146103ec5780632d20fb60146104175780632f745c5914610440578063375a069a1461047d57610288565b806301ffc9a71461028d5780630354c202146102ca57806306fdde0314610307578063081812fc14610332578063095ea7b31461036f575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af91906143ca565b610ad1565b6040516102c19190614ad0565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190614207565b610c1b565b6040516102fe9190614f03565b60405180910390f35b34801561031357600080fd5b5061031c610d2c565b6040516103299190614b06565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190614471565b610dbe565b6040516103669190614a17565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061438a565b610e43565b005b3480156103a457600080fd5b506103ad610f5c565b6040516103ba9190614f03565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190614274565b610f66565b005b3480156103f857600080fd5b5061040161102a565b60405161040e9190614ad0565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190614471565b61103d565b005b34801561044c57600080fd5b506104676004803603810190610462919061438a565b6110c5565b6040516104749190614f03565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190614471565b6112c3565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190614274565b6114d7565b005b3480156104db57600080fd5b506104e46114f7565b6040516104f19190614f03565b60405180910390f35b34801561050657600080fd5b5061050f6114fd565b60405161051c9190614f03565b60405180910390f35b34801561053157600080fd5b5061053a611503565b6040516105479190614f03565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614471565b611509565b6040516105849190614f03565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614424565b61155c565b005b3480156105c257600080fd5b506105cb6115ee565b005b3480156105d957600080fd5b506105e261175a565b6040516105ef9190614f03565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190614471565b611760565b60405161062c9190614a17565b60405180910390f35b34801561064157600080fd5b5061064a611776565b6040516106579190614f03565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190614207565b61179a565b6040516106949190614f03565b60405180910390f35b3480156106a957600080fd5b506106b26117b2565b6040516106bf9190614f03565b60405180910390f35b3480156106d457600080fd5b506106dd6117b8565b005b3480156106eb57600080fd5b506106f4611860565b6040516107019190614ad0565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190614207565b611873565b60405161073e9190614f03565b60405180910390f35b34801561075357600080fd5b5061075c61195c565b005b34801561076a57600080fd5b506107736119e4565b6040516107809190614f03565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190614471565b6119ea565b005b3480156107be57600080fd5b506107c7611ba6565b6040516107d49190614a17565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff9190614471565b611bcf565b6040516108119190614ee8565b60405180910390f35b34801561082657600080fd5b5061082f611be7565b60405161083c9190614b06565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190614207565b611c79565b6040516108799190614f03565b60405180910390f35b61089c60048036038101906108979190614471565b611c91565b005b3480156108aa57600080fd5b506108c560048036038101906108c0919061434a565b611e9d565b005b3480156108d357600080fd5b506108dc61201e565b005b3480156108ea57600080fd5b50610905600480360381019061090091906142c7565b6120f0565b005b34801561091357600080fd5b5061092e60048036038101906109299190614471565b6121b6565b60405161093b9190614b06565b60405180910390f35b34801561095057600080fd5b5061095961225d565b005b34801561096757600080fd5b50610970612305565b60405161097d9190614f03565b60405180910390f35b34801561099257600080fd5b5061099b61230b565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190614207565b612529565b6040516109d19190614f03565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614207565b61253b565b604051610a0e9190614f03565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a399190614234565b612553565b604051610a4b9190614ad0565b60405180910390f35b348015610a6057600080fd5b50610a696125e7565b604051610a769190614aeb565b60405180910390f35b348015610a8b57600080fd5b50610aa66004803603810190610aa19190614207565b61260d565b005b348015610ab457600080fd5b50610acf6004803603810190610aca9190614207565b6126cd565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c0457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c145750610c13826127c5565b5b9050919050565b600062015180670de0b6b3a7640000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601154601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cbb57601154610cfc565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b42610d079190615112565b610d119190615084565b610d1b9190615084565b610d259190615053565b9050919050565b606060028054610d3b9061529e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061529e565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b5050505050905090565b6000610dc98261282f565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90614ea8565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e4e82611760565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ede61283d565b73ffffffffffffffffffffffffffffffffffffffff161480610f0d5750610f0c81610f0761283d565b612553565b5b610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390614c28565b60405180910390fd5b610f57838383612845565b505050565b6000600154905090565b610f7083836128f7565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610fc090615274565b9190505550601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061101590615301565b9190505550611025838383612ae1565b505050565b600d60009054906101000a900460ff1681565b61104561283d565b73ffffffffffffffffffffffffffffffffffffffff16611063611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614d08565b60405180910390fd5b6110c281612af1565b50565b60006110d083611873565b8210611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614b28565b60405180910390fd5b600061111b610f5c565b905060008060005b83811015611281576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461121557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561126d578684141561125e5781955050505050506112bd565b838061126990615301565b9450505b50808061127990615301565b915050611123565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614e28565b60405180910390fd5b92915050565b6112cb61283d565b73ffffffffffffffffffffffffffffffffffffffff166112e9611ba6565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690614d08565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261136d919061534a565b146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614b88565b60405180910390fd5b601054816113b9610f5c565b6113c39190614ffd565b1115611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90614c68565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000826114329190615053565b905081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114839190614ffd565b9250508190555060005b818110156114d2576114bf337f0000000000000000000000000000000000000000000000000000000000000000612d7f565b80806114ca90615301565b91505061148d565b505050565b6114f2838383604051806020016040528060008152506120f0565b505050565b600a5481565b600f5481565b600b5481565b6000611513610f5c565b8210611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90614ba8565b60405180910390fd5b819050919050565b61156461283d565b73ffffffffffffffffffffffffffffffffffffffff16611582611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614d08565b60405180910390fd5b8181600e91906115e9929190613ffb565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461167633610c1b565b6116809190614ffd565b6040518363ffffffff1660e01b815260040161169d929190614aa7565b600060405180830381600087803b1580156116b757600080fd5b505af11580156116cb573d6000803e3d6000fd5b5050505042601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60105481565b600061176b82612d9d565b600001519050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60136020528060005260406000206000915090505481565b600c5481565b6117c061283d565b73ffffffffffffffffffffffffffffffffffffffff166117de611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90614d08565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b600d60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db90614cc8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61196461283d565b73ffffffffffffffffffffffffffffffffffffffff16611982611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614d08565b60405180910390fd5b6119e26000612fa0565b565b60115481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90614c08565b60405180910390fd5b600d60009054906101000a900460ff16611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614d88565b60405180910390fd5b600f5481611ab3610f5c565b611abd9190614ffd565b1115611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614c68565b60405180910390fd5b600a54811115611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90614c88565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b929190614ffd565b92505081905550611ba33382612d7f565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bd7614081565b611be082612d9d565b9050919050565b606060038054611bf69061529e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c229061529e565b8015611c6f5780601f10611c4457610100808354040283529160200191611c6f565b820191906000526020600020905b815481529060010190602001808311611c5257829003601f168201915b5050505050905090565b60126020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690614c08565b60405180910390fd5b600d60009054906101000a900460ff16611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590614d88565b60405180910390fd5b60105481611d5a610f5c565b611d649190614ffd565b1115611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90614c68565b60405180910390fd5b600b54811115611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614ca8565b60405180910390fd5b80600c54611df89190615084565b341015611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614e68565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e899190614ffd565b92505081905550611e9a3382612d7f565b50565b611ea561283d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90614d48565b60405180910390fd5b8060076000611f2061283d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fcd61283d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120129190614ad0565b60405180910390a35050565b61202661283d565b73ffffffffffffffffffffffffffffffffffffffff16612044611ba6565b73ffffffffffffffffffffffffffffffffffffffff161461209a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209190614d08565b60405180910390fd5b600047116120a757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156120ed573d6000803e3d6000fd5b50565b6120fa84846128f7565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061214a90615274565b9190505550601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061219f90615301565b91905055506121b084848484613064565b50505050565b60606121c18261282f565b612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f790614d28565b60405180910390fd5b600061220a6130c0565b9050600081511161222a5760405180602001604052806000815250612255565b8061223484613152565b6040516020016122459291906149f3565b6040516020818303038152906040525b915050919050565b61226561283d565b73ffffffffffffffffffffffffffffffffffffffff16612283611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614d08565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614c08565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006123a2610f5c565b106123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614c68565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33680340aad21b3b7000006040518363ffffffff1660e01b8152600401612448929190614a7e565b600060405180830381600087803b15801561246257600080fd5b505af1158015612476573d6000803e3d6000fd5b5050505061248333610c1b565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d19190614ffd565b9250508190555042601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612527336001612d7f565b565b6000612534826132b3565b9050919050565b60146020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61261561283d565b73ffffffffffffffffffffffffffffffffffffffff16612633611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614d08565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126d561283d565b73ffffffffffffffffffffffffffffffffffffffff166126f3611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274090614d08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b090614b48565b60405180910390fd5b6127c281612fa0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461292f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a065761296c82610c1b565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129ba9190614ffd565b9250508190555042601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612add57612a4381610c1b565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a919190614ffd565b9250508190555042601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b612aec83838361339c565b505050565b6000600854905060008211612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3290614c48565b60405180910390fd5b600060018383612b4b9190614ffd565b612b559190615112565b905060017f0000000000000000000000000000000000000000000000000000000000000000612b849190615112565b811115612bbb5760017f0000000000000000000000000000000000000000000000000000000000000000612bb89190615112565b90505b612bc48161282f565b612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90614e48565b60405180910390fd5b60008290505b818111612d6657600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d53576000612c8682612d9d565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612d5e90615301565b915050612c09565b50600181612d749190614ffd565b600881905550505050565b612d99828260405180602001604052806000815250613955565b5050565b612da5614081565b612dae8261282f565b612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de490614b68565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612e515760017f000000000000000000000000000000000000000000000000000000000000000084612e449190615112565b612e4e9190614ffd565b90505b60008390505b818110612f5f576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f4b57809350505050612f9b565b508080612f5790615274565b915050612e57565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9290614e88565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61306f84848461339c565b61307b84848484613e35565b6130ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b190614dc8565b60405180910390fd5b50505050565b6060600e80546130cf9061529e565b80601f01602080910402602001604051908101604052809291908181526020018280546130fb9061529e565b80156131485780601f1061311d57610100808354040283529160200191613148565b820191906000526020600020905b81548152906001019060200180831161312b57829003601f168201915b5050505050905090565b6060600082141561319a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132ae565b600082905060005b600082146131cc5780806131b590615301565b915050600a826131c59190615053565b91506131a2565b60008167ffffffffffffffff8111156131e8576131e7615437565b5b6040519080825280601f01601f19166020018201604052801561321a5781602001600182028036833780820191505090505b5090505b600085146132a7576001826132339190615112565b9150600a85613242919061534a565b603061324e9190614ffd565b60f81b81838151811061326457613263615408565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132a09190615053565b945061321e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b90614be8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006133a782612d9d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166133ce61283d565b73ffffffffffffffffffffffffffffffffffffffff16148061342a57506133f361283d565b73ffffffffffffffffffffffffffffffffffffffff1661341284610dbe565b73ffffffffffffffffffffffffffffffffffffffff16145b806134465750613445826000015161344061283d565b612553565b5b905080613488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347f90614d68565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146134fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f190614ce8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190614bc8565b60405180910390fd5b6135778585856001613fcc565b6135876000848460000151612845565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166135f591906150de565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166136999190614fb7565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461379f9190614ffd565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156138e5576138158161282f565b156138e4576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461394d8686866001613fd2565b505050505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156139cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c390614e08565b60405180910390fd5b6139d58161282f565b15613a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0c90614de8565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6f90614ec8565b60405180910390fd5b613a856000858386613fcc565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613b829190614fb7565b6fffffffffffffffffffffffffffffffff168152602001858360200151613ba99190614fb7565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613e1857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613db86000888488613e35565b613df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dee90614dc8565b60405180910390fd5b8180613e0290615301565b9250508080613e1090615301565b915050613d47565b5080600181905550613e2d6000878588613fd2565b505050505050565b6000613e568473ffffffffffffffffffffffffffffffffffffffff16613fd8565b15613fbf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e7f61283d565b8786866040518563ffffffff1660e01b8152600401613ea19493929190614a32565b602060405180830381600087803b158015613ebb57600080fd5b505af1925050508015613eec57506040513d601f19601f82011682018060405250810190613ee991906143f7565b60015b613f6f573d8060008114613f1c576040519150601f19603f3d011682016040523d82523d6000602084013e613f21565b606091505b50600081511415613f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5e90614dc8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613fc4565b600190505b949350505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546140079061529e565b90600052602060002090601f0160209004810192826140295760008555614070565b82601f1061404257803560ff1916838001178555614070565b82800160010185558215614070579182015b8281111561406f578235825591602001919060010190614054565b5b50905061407d91906140bb565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156140d45760008160009055506001016140bc565b5090565b60006140eb6140e684614f43565b614f1e565b90508281526020810184848401111561410757614106615475565b5b614112848285615232565b509392505050565b60008135905061412981615c5b565b92915050565b60008135905061413e81615c72565b92915050565b60008135905061415381615c89565b92915050565b60008151905061416881615c89565b92915050565b600082601f8301126141835761418261546b565b5b81356141938482602086016140d8565b91505092915050565b60008083601f8401126141b2576141b161546b565b5b8235905067ffffffffffffffff8111156141cf576141ce615466565b5b6020830191508360018202830111156141eb576141ea615470565b5b9250929050565b60008135905061420181615ca0565b92915050565b60006020828403121561421d5761421c61547f565b5b600061422b8482850161411a565b91505092915050565b6000806040838503121561424b5761424a61547f565b5b60006142598582860161411a565b925050602061426a8582860161411a565b9150509250929050565b60008060006060848603121561428d5761428c61547f565b5b600061429b8682870161411a565b93505060206142ac8682870161411a565b92505060406142bd868287016141f2565b9150509250925092565b600080600080608085870312156142e1576142e061547f565b5b60006142ef8782880161411a565b94505060206143008782880161411a565b9350506040614311878288016141f2565b925050606085013567ffffffffffffffff8111156143325761433161547a565b5b61433e8782880161416e565b91505092959194509250565b600080604083850312156143615761436061547f565b5b600061436f8582860161411a565b92505060206143808582860161412f565b9150509250929050565b600080604083850312156143a1576143a061547f565b5b60006143af8582860161411a565b92505060206143c0858286016141f2565b9150509250929050565b6000602082840312156143e0576143df61547f565b5b60006143ee84828501614144565b91505092915050565b60006020828403121561440d5761440c61547f565b5b600061441b84828501614159565b91505092915050565b6000806020838503121561443b5761443a61547f565b5b600083013567ffffffffffffffff8111156144595761445861547a565b5b6144658582860161419c565b92509250509250929050565b6000602082840312156144875761448661547f565b5b6000614495848285016141f2565b91505092915050565b6144a781615146565b82525050565b6144b681615146565b82525050565b6144c581615158565b82525050565b60006144d682614f74565b6144e08185614f8a565b93506144f0818560208601615241565b6144f981615484565b840191505092915050565b61450d816151ea565b82525050565b61451c816151fc565b82525050565b600061452d82614f7f565b6145378185614f9b565b9350614547818560208601615241565b61455081615484565b840191505092915050565b600061456682614f7f565b6145708185614fac565b9350614580818560208601615241565b80840191505092915050565b6000614599602283614f9b565b91506145a482615495565b604082019050919050565b60006145bc602683614f9b565b91506145c7826154e4565b604082019050919050565b60006145df602a83614f9b565b91506145ea82615533565b604082019050919050565b6000614602602c83614f9b565b915061460d82615582565b604082019050919050565b6000614625602383614f9b565b9150614630826155d1565b604082019050919050565b6000614648602583614f9b565b915061465382615620565b604082019050919050565b600061466b603183614f9b565b91506146768261566f565b604082019050919050565b600061468e601e83614f9b565b9150614699826156be565b602082019050919050565b60006146b1603983614f9b565b91506146bc826156e7565b604082019050919050565b60006146d4601883614f9b565b91506146df82615736565b602082019050919050565b60006146f7601b83614f9b565b91506147028261575f565b602082019050919050565b600061471a601583614f9b565b915061472582615788565b602082019050919050565b600061473d601283614f9b565b9150614748826157b1565b602082019050919050565b6000614760602b83614f9b565b915061476b826157da565b604082019050919050565b6000614783602683614f9b565b915061478e82615829565b604082019050919050565b60006147a6602083614f9b565b91506147b182615878565b602082019050919050565b60006147c9602f83614f9b565b91506147d4826158a1565b604082019050919050565b60006147ec601a83614f9b565b91506147f7826158f0565b602082019050919050565b600061480f603283614f9b565b915061481a82615919565b604082019050919050565b6000614832601283614f9b565b915061483d82615968565b602082019050919050565b6000614855602283614f9b565b915061486082615991565b604082019050919050565b6000614878603383614f9b565b9150614883826159e0565b604082019050919050565b600061489b601d83614f9b565b91506148a682615a2f565b602082019050919050565b60006148be602183614f9b565b91506148c982615a58565b604082019050919050565b60006148e1602e83614f9b565b91506148ec82615aa7565b604082019050919050565b6000614904602683614f9b565b915061490f82615af6565b604082019050919050565b6000614927601383614f9b565b915061493282615b45565b602082019050919050565b600061494a602f83614f9b565b915061495582615b6e565b604082019050919050565b600061496d602d83614f9b565b915061497882615bbd565b604082019050919050565b6000614990602283614f9b565b915061499b82615c0c565b604082019050919050565b6040820160008201516149bc600085018261449e565b5060208201516149cf60208501826149e4565b50505050565b6149de816151cc565b82525050565b6149ed816151d6565b82525050565b60006149ff828561455b565b9150614a0b828461455b565b91508190509392505050565b6000602082019050614a2c60008301846144ad565b92915050565b6000608082019050614a4760008301876144ad565b614a5460208301866144ad565b614a6160408301856149d5565b8181036060830152614a7381846144cb565b905095945050505050565b6000604082019050614a9360008301856144ad565b614aa06020830184614513565b9392505050565b6000604082019050614abc60008301856144ad565b614ac960208301846149d5565b9392505050565b6000602082019050614ae560008301846144bc565b92915050565b6000602082019050614b006000830184614504565b92915050565b60006020820190508181036000830152614b208184614522565b905092915050565b60006020820190508181036000830152614b418161458c565b9050919050565b60006020820190508181036000830152614b61816145af565b9050919050565b60006020820190508181036000830152614b81816145d2565b9050919050565b60006020820190508181036000830152614ba1816145f5565b9050919050565b60006020820190508181036000830152614bc181614618565b9050919050565b60006020820190508181036000830152614be18161463b565b9050919050565b60006020820190508181036000830152614c018161465e565b9050919050565b60006020820190508181036000830152614c2181614681565b9050919050565b60006020820190508181036000830152614c41816146a4565b9050919050565b60006020820190508181036000830152614c61816146c7565b9050919050565b60006020820190508181036000830152614c81816146ea565b9050919050565b60006020820190508181036000830152614ca18161470d565b9050919050565b60006020820190508181036000830152614cc181614730565b9050919050565b60006020820190508181036000830152614ce181614753565b9050919050565b60006020820190508181036000830152614d0181614776565b9050919050565b60006020820190508181036000830152614d2181614799565b9050919050565b60006020820190508181036000830152614d41816147bc565b9050919050565b60006020820190508181036000830152614d61816147df565b9050919050565b60006020820190508181036000830152614d8181614802565b9050919050565b60006020820190508181036000830152614da181614825565b9050919050565b60006020820190508181036000830152614dc181614848565b9050919050565b60006020820190508181036000830152614de18161486b565b9050919050565b60006020820190508181036000830152614e018161488e565b9050919050565b60006020820190508181036000830152614e21816148b1565b9050919050565b60006020820190508181036000830152614e41816148d4565b9050919050565b60006020820190508181036000830152614e61816148f7565b9050919050565b60006020820190508181036000830152614e818161491a565b9050919050565b60006020820190508181036000830152614ea18161493d565b9050919050565b60006020820190508181036000830152614ec181614960565b9050919050565b60006020820190508181036000830152614ee181614983565b9050919050565b6000604082019050614efd60008301846149a6565b92915050565b6000602082019050614f1860008301846149d5565b92915050565b6000614f28614f39565b9050614f3482826152d0565b919050565b6000604051905090565b600067ffffffffffffffff821115614f5e57614f5d615437565b5b614f6782615484565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fc282615190565b9150614fcd83615190565b9250826fffffffffffffffffffffffffffffffff03821115614ff257614ff161537b565b5b828201905092915050565b6000615008826151cc565b9150615013836151cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150485761504761537b565b5b828201905092915050565b600061505e826151cc565b9150615069836151cc565b925082615079576150786153aa565b5b828204905092915050565b600061508f826151cc565b915061509a836151cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150d3576150d261537b565b5b828202905092915050565b60006150e982615190565b91506150f483615190565b9250828210156151075761510661537b565b5b828203905092915050565b600061511d826151cc565b9150615128836151cc565b92508282101561513b5761513a61537b565b5b828203905092915050565b6000615151826151ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60006151f58261520e565b9050919050565b6000615207826151cc565b9050919050565b600061521982615220565b9050919050565b600061522b826151ac565b9050919050565b82818337600083830152505050565b60005b8381101561525f578082015181840152602081019050615244565b8381111561526e576000848401525b50505050565b600061527f826151cc565b915060008214156152935761529261537b565b5b600182039050919050565b600060028204905060018216806152b657607f821691505b602082108114156152ca576152c96153d9565b5b50919050565b6152d982615484565b810181811067ffffffffffffffff821117156152f8576152f7615437565b5b80604052505050565b600061530c826151cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561533f5761533e61537b565b5b600182019050919050565b6000615355826151cc565b9150615360836151cc565b9250826153705761536f6153aa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f6d617820737570706c7920686173206265656e20726561636865640000000000600082015250565b7f6d6178203320706572207472616e73616374696f6e0000000000000000000000600082015250565b7f6d61782032302070657220616464726573730000000000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6d696e74206973206e6f74206163746976650000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206574682073656e7400000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b615c6481615146565b8114615c6f57600080fd5b50565b615c7b81615158565b8114615c8657600080fd5b50565b615c9281615164565b8114615c9d57600080fd5b50565b615ca9816151cc565b8114615cb457600080fd5b5056fea26469706673582212205069cb8956587fe13d2268cd0bfb5a76278aefa94d2b5f5883aa9959d3d5b82a64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000115c

Deployed Bytecode

0x6080604052600436106102885760003560e01c8063697fd03d1161015a578063ac446002116100c1578063dc33e6811161007a578063dc33e6811461099d578063dc37c6d8146109da578063e985e9c514610a17578063eb59ccfa14610a54578063edce4e6d14610a7f578063f2fde38b14610aa857610288565b8063ac446002146108c7578063b88d4fde146108de578063c87b56dd14610907578063d02c2bf214610944578063d7224ba01461095b578063db7fa6b21461098657610288565b80638da5cb5b116101135780638da5cb5b146107b25780639231ab2a146107dd57806395d89b411461081a5780639d98702c14610845578063a0712d6814610882578063a22cb4651461089e57610288565b8063697fd03d146106c85780636ccd5e50146106df57806370a082311461070a578063715018a61461074757806378e979251461075e5780637c928fe91461078957610288565b806342842e0e116101fe5780635c8fe8a2116101b75780635c8fe8a2146105b65780635fabe446146105cd5780636352211e146105f8578063639814e01461063557806367c0ee10146106605780636817c76c1461069d57610288565b806342842e0e146104a6578063456f544d146104cf57806347513334146104fa5780634b980d67146105255780634f6ccce71461055057806355f804b31461058d57610288565b806318160ddd1161025057806318160ddd1461039857806323b872dd146103c357806325fd90f3146103ec5780632d20fb60146104175780632f745c5914610440578063375a069a1461047d57610288565b806301ffc9a71461028d5780630354c202146102ca57806306fdde0314610307578063081812fc14610332578063095ea7b31461036f575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af91906143ca565b610ad1565b6040516102c19190614ad0565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190614207565b610c1b565b6040516102fe9190614f03565b60405180910390f35b34801561031357600080fd5b5061031c610d2c565b6040516103299190614b06565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190614471565b610dbe565b6040516103669190614a17565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061438a565b610e43565b005b3480156103a457600080fd5b506103ad610f5c565b6040516103ba9190614f03565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190614274565b610f66565b005b3480156103f857600080fd5b5061040161102a565b60405161040e9190614ad0565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190614471565b61103d565b005b34801561044c57600080fd5b506104676004803603810190610462919061438a565b6110c5565b6040516104749190614f03565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190614471565b6112c3565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190614274565b6114d7565b005b3480156104db57600080fd5b506104e46114f7565b6040516104f19190614f03565b60405180910390f35b34801561050657600080fd5b5061050f6114fd565b60405161051c9190614f03565b60405180910390f35b34801561053157600080fd5b5061053a611503565b6040516105479190614f03565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614471565b611509565b6040516105849190614f03565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614424565b61155c565b005b3480156105c257600080fd5b506105cb6115ee565b005b3480156105d957600080fd5b506105e261175a565b6040516105ef9190614f03565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190614471565b611760565b60405161062c9190614a17565b60405180910390f35b34801561064157600080fd5b5061064a611776565b6040516106579190614f03565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190614207565b61179a565b6040516106949190614f03565b60405180910390f35b3480156106a957600080fd5b506106b26117b2565b6040516106bf9190614f03565b60405180910390f35b3480156106d457600080fd5b506106dd6117b8565b005b3480156106eb57600080fd5b506106f4611860565b6040516107019190614ad0565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190614207565b611873565b60405161073e9190614f03565b60405180910390f35b34801561075357600080fd5b5061075c61195c565b005b34801561076a57600080fd5b506107736119e4565b6040516107809190614f03565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190614471565b6119ea565b005b3480156107be57600080fd5b506107c7611ba6565b6040516107d49190614a17565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff9190614471565b611bcf565b6040516108119190614ee8565b60405180910390f35b34801561082657600080fd5b5061082f611be7565b60405161083c9190614b06565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190614207565b611c79565b6040516108799190614f03565b60405180910390f35b61089c60048036038101906108979190614471565b611c91565b005b3480156108aa57600080fd5b506108c560048036038101906108c0919061434a565b611e9d565b005b3480156108d357600080fd5b506108dc61201e565b005b3480156108ea57600080fd5b50610905600480360381019061090091906142c7565b6120f0565b005b34801561091357600080fd5b5061092e60048036038101906109299190614471565b6121b6565b60405161093b9190614b06565b60405180910390f35b34801561095057600080fd5b5061095961225d565b005b34801561096757600080fd5b50610970612305565b60405161097d9190614f03565b60405180910390f35b34801561099257600080fd5b5061099b61230b565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190614207565b612529565b6040516109d19190614f03565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614207565b61253b565b604051610a0e9190614f03565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a399190614234565b612553565b604051610a4b9190614ad0565b60405180910390f35b348015610a6057600080fd5b50610a696125e7565b604051610a769190614aeb565b60405180910390f35b348015610a8b57600080fd5b50610aa66004803603810190610aa19190614207565b61260d565b005b348015610ab457600080fd5b50610acf6004803603810190610aca9190614207565b6126cd565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c0457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c145750610c13826127c5565b5b9050919050565b600062015180670de0b6b3a7640000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601154601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cbb57601154610cfc565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b42610d079190615112565b610d119190615084565b610d1b9190615084565b610d259190615053565b9050919050565b606060028054610d3b9061529e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061529e565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b5050505050905090565b6000610dc98261282f565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90614ea8565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e4e82611760565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ede61283d565b73ffffffffffffffffffffffffffffffffffffffff161480610f0d5750610f0c81610f0761283d565b612553565b5b610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390614c28565b60405180910390fd5b610f57838383612845565b505050565b6000600154905090565b610f7083836128f7565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610fc090615274565b9190505550601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061101590615301565b9190505550611025838383612ae1565b505050565b600d60009054906101000a900460ff1681565b61104561283d565b73ffffffffffffffffffffffffffffffffffffffff16611063611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614d08565b60405180910390fd5b6110c281612af1565b50565b60006110d083611873565b8210611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614b28565b60405180910390fd5b600061111b610f5c565b905060008060005b83811015611281576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461121557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561126d578684141561125e5781955050505050506112bd565b838061126990615301565b9450505b50808061127990615301565b915050611123565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614e28565b60405180910390fd5b92915050565b6112cb61283d565b73ffffffffffffffffffffffffffffffffffffffff166112e9611ba6565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690614d08565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148261136d919061534a565b146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614b88565b60405180910390fd5b601054816113b9610f5c565b6113c39190614ffd565b1115611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90614c68565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000014826114329190615053565b905081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114839190614ffd565b9250508190555060005b818110156114d2576114bf337f0000000000000000000000000000000000000000000000000000000000000014612d7f565b80806114ca90615301565b91505061148d565b505050565b6114f2838383604051806020016040528060008152506120f0565b505050565b600a5481565b600f5481565b600b5481565b6000611513610f5c565b8210611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90614ba8565b60405180910390fd5b819050919050565b61156461283d565b73ffffffffffffffffffffffffffffffffffffffff16611582611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614d08565b60405180910390fd5b8181600e91906115e9929190613ffb565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461167633610c1b565b6116809190614ffd565b6040518363ffffffff1660e01b815260040161169d929190614aa7565b600060405180830381600087803b1580156116b757600080fd5b505af11580156116cb573d6000803e3d6000fd5b5050505042601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60105481565b600061176b82612d9d565b600001519050919050565b7f000000000000000000000000000000000000000000000000000000000000001481565b60136020528060005260406000206000915090505481565b600c5481565b6117c061283d565b73ffffffffffffffffffffffffffffffffffffffff166117de611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90614d08565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b600d60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db90614cc8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61196461283d565b73ffffffffffffffffffffffffffffffffffffffff16611982611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614d08565b60405180910390fd5b6119e26000612fa0565b565b60115481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90614c08565b60405180910390fd5b600d60009054906101000a900460ff16611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614d88565b60405180910390fd5b600f5481611ab3610f5c565b611abd9190614ffd565b1115611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614c68565b60405180910390fd5b600a54811115611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90614c88565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b929190614ffd565b92505081905550611ba33382612d7f565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bd7614081565b611be082612d9d565b9050919050565b606060038054611bf69061529e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c229061529e565b8015611c6f5780601f10611c4457610100808354040283529160200191611c6f565b820191906000526020600020905b815481529060010190602001808311611c5257829003601f168201915b5050505050905090565b60126020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690614c08565b60405180910390fd5b600d60009054906101000a900460ff16611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590614d88565b60405180910390fd5b60105481611d5a610f5c565b611d649190614ffd565b1115611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90614c68565b60405180910390fd5b600b54811115611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614ca8565b60405180910390fd5b80600c54611df89190615084565b341015611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614e68565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e899190614ffd565b92505081905550611e9a3382612d7f565b50565b611ea561283d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90614d48565b60405180910390fd5b8060076000611f2061283d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fcd61283d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120129190614ad0565b60405180910390a35050565b61202661283d565b73ffffffffffffffffffffffffffffffffffffffff16612044611ba6565b73ffffffffffffffffffffffffffffffffffffffff161461209a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209190614d08565b60405180910390fd5b600047116120a757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156120ed573d6000803e3d6000fd5b50565b6120fa84846128f7565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061214a90615274565b9190505550601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061219f90615301565b91905055506121b084848484613064565b50505050565b60606121c18261282f565b612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f790614d28565b60405180910390fd5b600061220a6130c0565b9050600081511161222a5760405180602001604052806000815250612255565b8061223484613152565b6040516020016122459291906149f3565b6040516020818303038152906040525b915050919050565b61226561283d565b73ffffffffffffffffffffffffffffffffffffffff16612283611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614d08565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614c08565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000115c6123a2610f5c565b106123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614c68565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33680340aad21b3b7000006040518363ffffffff1660e01b8152600401612448929190614a7e565b600060405180830381600087803b15801561246257600080fd5b505af1158015612476573d6000803e3d6000fd5b5050505061248333610c1b565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d19190614ffd565b9250508190555042601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612527336001612d7f565b565b6000612534826132b3565b9050919050565b60146020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61261561283d565b73ffffffffffffffffffffffffffffffffffffffff16612633611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614d08565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126d561283d565b73ffffffffffffffffffffffffffffffffffffffff166126f3611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274090614d08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b090614b48565b60405180910390fd5b6127c281612fa0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461292f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a065761296c82610c1b565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129ba9190614ffd565b9250508190555042601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612add57612a4381610c1b565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a919190614ffd565b9250508190555042601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b612aec83838361339c565b505050565b6000600854905060008211612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3290614c48565b60405180910390fd5b600060018383612b4b9190614ffd565b612b559190615112565b905060017f000000000000000000000000000000000000000000000000000000000000115c612b849190615112565b811115612bbb5760017f000000000000000000000000000000000000000000000000000000000000115c612bb89190615112565b90505b612bc48161282f565b612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90614e48565b60405180910390fd5b60008290505b818111612d6657600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d53576000612c8682612d9d565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612d5e90615301565b915050612c09565b50600181612d749190614ffd565b600881905550505050565b612d99828260405180602001604052806000815250613955565b5050565b612da5614081565b612dae8261282f565b612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de490614b68565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612e515760017f000000000000000000000000000000000000000000000000000000000000001484612e449190615112565b612e4e9190614ffd565b90505b60008390505b818110612f5f576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f4b57809350505050612f9b565b508080612f5790615274565b915050612e57565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9290614e88565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61306f84848461339c565b61307b84848484613e35565b6130ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b190614dc8565b60405180910390fd5b50505050565b6060600e80546130cf9061529e565b80601f01602080910402602001604051908101604052809291908181526020018280546130fb9061529e565b80156131485780601f1061311d57610100808354040283529160200191613148565b820191906000526020600020905b81548152906001019060200180831161312b57829003601f168201915b5050505050905090565b6060600082141561319a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132ae565b600082905060005b600082146131cc5780806131b590615301565b915050600a826131c59190615053565b91506131a2565b60008167ffffffffffffffff8111156131e8576131e7615437565b5b6040519080825280601f01601f19166020018201604052801561321a5781602001600182028036833780820191505090505b5090505b600085146132a7576001826132339190615112565b9150600a85613242919061534a565b603061324e9190614ffd565b60f81b81838151811061326457613263615408565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132a09190615053565b945061321e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b90614be8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006133a782612d9d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166133ce61283d565b73ffffffffffffffffffffffffffffffffffffffff16148061342a57506133f361283d565b73ffffffffffffffffffffffffffffffffffffffff1661341284610dbe565b73ffffffffffffffffffffffffffffffffffffffff16145b806134465750613445826000015161344061283d565b612553565b5b905080613488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347f90614d68565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146134fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f190614ce8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190614bc8565b60405180910390fd5b6135778585856001613fcc565b6135876000848460000151612845565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166135f591906150de565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166136999190614fb7565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461379f9190614ffd565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156138e5576138158161282f565b156138e4576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461394d8686866001613fd2565b505050505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156139cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c390614e08565b60405180910390fd5b6139d58161282f565b15613a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0c90614de8565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000014831115613a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6f90614ec8565b60405180910390fd5b613a856000858386613fcc565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613b829190614fb7565b6fffffffffffffffffffffffffffffffff168152602001858360200151613ba99190614fb7565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613e1857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613db86000888488613e35565b613df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dee90614dc8565b60405180910390fd5b8180613e0290615301565b9250508080613e1090615301565b915050613d47565b5080600181905550613e2d6000878588613fd2565b505050505050565b6000613e568473ffffffffffffffffffffffffffffffffffffffff16613fd8565b15613fbf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e7f61283d565b8786866040518563ffffffff1660e01b8152600401613ea19493929190614a32565b602060405180830381600087803b158015613ebb57600080fd5b505af1925050508015613eec57506040513d601f19601f82011682018060405250810190613ee991906143f7565b60015b613f6f573d8060008114613f1c576040519150601f19603f3d011682016040523d82523d6000602084013e613f21565b606091505b50600081511415613f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5e90614dc8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613fc4565b600190505b949350505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546140079061529e565b90600052602060002090601f0160209004810192826140295760008555614070565b82601f1061404257803560ff1916838001178555614070565b82800160010185558215614070579182015b8281111561406f578235825591602001919060010190614054565b5b50905061407d91906140bb565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156140d45760008160009055506001016140bc565b5090565b60006140eb6140e684614f43565b614f1e565b90508281526020810184848401111561410757614106615475565b5b614112848285615232565b509392505050565b60008135905061412981615c5b565b92915050565b60008135905061413e81615c72565b92915050565b60008135905061415381615c89565b92915050565b60008151905061416881615c89565b92915050565b600082601f8301126141835761418261546b565b5b81356141938482602086016140d8565b91505092915050565b60008083601f8401126141b2576141b161546b565b5b8235905067ffffffffffffffff8111156141cf576141ce615466565b5b6020830191508360018202830111156141eb576141ea615470565b5b9250929050565b60008135905061420181615ca0565b92915050565b60006020828403121561421d5761421c61547f565b5b600061422b8482850161411a565b91505092915050565b6000806040838503121561424b5761424a61547f565b5b60006142598582860161411a565b925050602061426a8582860161411a565b9150509250929050565b60008060006060848603121561428d5761428c61547f565b5b600061429b8682870161411a565b93505060206142ac8682870161411a565b92505060406142bd868287016141f2565b9150509250925092565b600080600080608085870312156142e1576142e061547f565b5b60006142ef8782880161411a565b94505060206143008782880161411a565b9350506040614311878288016141f2565b925050606085013567ffffffffffffffff8111156143325761433161547a565b5b61433e8782880161416e565b91505092959194509250565b600080604083850312156143615761436061547f565b5b600061436f8582860161411a565b92505060206143808582860161412f565b9150509250929050565b600080604083850312156143a1576143a061547f565b5b60006143af8582860161411a565b92505060206143c0858286016141f2565b9150509250929050565b6000602082840312156143e0576143df61547f565b5b60006143ee84828501614144565b91505092915050565b60006020828403121561440d5761440c61547f565b5b600061441b84828501614159565b91505092915050565b6000806020838503121561443b5761443a61547f565b5b600083013567ffffffffffffffff8111156144595761445861547a565b5b6144658582860161419c565b92509250509250929050565b6000602082840312156144875761448661547f565b5b6000614495848285016141f2565b91505092915050565b6144a781615146565b82525050565b6144b681615146565b82525050565b6144c581615158565b82525050565b60006144d682614f74565b6144e08185614f8a565b93506144f0818560208601615241565b6144f981615484565b840191505092915050565b61450d816151ea565b82525050565b61451c816151fc565b82525050565b600061452d82614f7f565b6145378185614f9b565b9350614547818560208601615241565b61455081615484565b840191505092915050565b600061456682614f7f565b6145708185614fac565b9350614580818560208601615241565b80840191505092915050565b6000614599602283614f9b565b91506145a482615495565b604082019050919050565b60006145bc602683614f9b565b91506145c7826154e4565b604082019050919050565b60006145df602a83614f9b565b91506145ea82615533565b604082019050919050565b6000614602602c83614f9b565b915061460d82615582565b604082019050919050565b6000614625602383614f9b565b9150614630826155d1565b604082019050919050565b6000614648602583614f9b565b915061465382615620565b604082019050919050565b600061466b603183614f9b565b91506146768261566f565b604082019050919050565b600061468e601e83614f9b565b9150614699826156be565b602082019050919050565b60006146b1603983614f9b565b91506146bc826156e7565b604082019050919050565b60006146d4601883614f9b565b91506146df82615736565b602082019050919050565b60006146f7601b83614f9b565b91506147028261575f565b602082019050919050565b600061471a601583614f9b565b915061472582615788565b602082019050919050565b600061473d601283614f9b565b9150614748826157b1565b602082019050919050565b6000614760602b83614f9b565b915061476b826157da565b604082019050919050565b6000614783602683614f9b565b915061478e82615829565b604082019050919050565b60006147a6602083614f9b565b91506147b182615878565b602082019050919050565b60006147c9602f83614f9b565b91506147d4826158a1565b604082019050919050565b60006147ec601a83614f9b565b91506147f7826158f0565b602082019050919050565b600061480f603283614f9b565b915061481a82615919565b604082019050919050565b6000614832601283614f9b565b915061483d82615968565b602082019050919050565b6000614855602283614f9b565b915061486082615991565b604082019050919050565b6000614878603383614f9b565b9150614883826159e0565b604082019050919050565b600061489b601d83614f9b565b91506148a682615a2f565b602082019050919050565b60006148be602183614f9b565b91506148c982615a58565b604082019050919050565b60006148e1602e83614f9b565b91506148ec82615aa7565b604082019050919050565b6000614904602683614f9b565b915061490f82615af6565b604082019050919050565b6000614927601383614f9b565b915061493282615b45565b602082019050919050565b600061494a602f83614f9b565b915061495582615b6e565b604082019050919050565b600061496d602d83614f9b565b915061497882615bbd565b604082019050919050565b6000614990602283614f9b565b915061499b82615c0c565b604082019050919050565b6040820160008201516149bc600085018261449e565b5060208201516149cf60208501826149e4565b50505050565b6149de816151cc565b82525050565b6149ed816151d6565b82525050565b60006149ff828561455b565b9150614a0b828461455b565b91508190509392505050565b6000602082019050614a2c60008301846144ad565b92915050565b6000608082019050614a4760008301876144ad565b614a5460208301866144ad565b614a6160408301856149d5565b8181036060830152614a7381846144cb565b905095945050505050565b6000604082019050614a9360008301856144ad565b614aa06020830184614513565b9392505050565b6000604082019050614abc60008301856144ad565b614ac960208301846149d5565b9392505050565b6000602082019050614ae560008301846144bc565b92915050565b6000602082019050614b006000830184614504565b92915050565b60006020820190508181036000830152614b208184614522565b905092915050565b60006020820190508181036000830152614b418161458c565b9050919050565b60006020820190508181036000830152614b61816145af565b9050919050565b60006020820190508181036000830152614b81816145d2565b9050919050565b60006020820190508181036000830152614ba1816145f5565b9050919050565b60006020820190508181036000830152614bc181614618565b9050919050565b60006020820190508181036000830152614be18161463b565b9050919050565b60006020820190508181036000830152614c018161465e565b9050919050565b60006020820190508181036000830152614c2181614681565b9050919050565b60006020820190508181036000830152614c41816146a4565b9050919050565b60006020820190508181036000830152614c61816146c7565b9050919050565b60006020820190508181036000830152614c81816146ea565b9050919050565b60006020820190508181036000830152614ca18161470d565b9050919050565b60006020820190508181036000830152614cc181614730565b9050919050565b60006020820190508181036000830152614ce181614753565b9050919050565b60006020820190508181036000830152614d0181614776565b9050919050565b60006020820190508181036000830152614d2181614799565b9050919050565b60006020820190508181036000830152614d41816147bc565b9050919050565b60006020820190508181036000830152614d61816147df565b9050919050565b60006020820190508181036000830152614d8181614802565b9050919050565b60006020820190508181036000830152614da181614825565b9050919050565b60006020820190508181036000830152614dc181614848565b9050919050565b60006020820190508181036000830152614de18161486b565b9050919050565b60006020820190508181036000830152614e018161488e565b9050919050565b60006020820190508181036000830152614e21816148b1565b9050919050565b60006020820190508181036000830152614e41816148d4565b9050919050565b60006020820190508181036000830152614e61816148f7565b9050919050565b60006020820190508181036000830152614e818161491a565b9050919050565b60006020820190508181036000830152614ea18161493d565b9050919050565b60006020820190508181036000830152614ec181614960565b9050919050565b60006020820190508181036000830152614ee181614983565b9050919050565b6000604082019050614efd60008301846149a6565b92915050565b6000602082019050614f1860008301846149d5565b92915050565b6000614f28614f39565b9050614f3482826152d0565b919050565b6000604051905090565b600067ffffffffffffffff821115614f5e57614f5d615437565b5b614f6782615484565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fc282615190565b9150614fcd83615190565b9250826fffffffffffffffffffffffffffffffff03821115614ff257614ff161537b565b5b828201905092915050565b6000615008826151cc565b9150615013836151cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150485761504761537b565b5b828201905092915050565b600061505e826151cc565b9150615069836151cc565b925082615079576150786153aa565b5b828204905092915050565b600061508f826151cc565b915061509a836151cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150d3576150d261537b565b5b828202905092915050565b60006150e982615190565b91506150f483615190565b9250828210156151075761510661537b565b5b828203905092915050565b600061511d826151cc565b9150615128836151cc565b92508282101561513b5761513a61537b565b5b828203905092915050565b6000615151826151ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60006151f58261520e565b9050919050565b6000615207826151cc565b9050919050565b600061521982615220565b9050919050565b600061522b826151ac565b9050919050565b82818337600083830152505050565b60005b8381101561525f578082015181840152602081019050615244565b8381111561526e576000848401525b50505050565b600061527f826151cc565b915060008214156152935761529261537b565b5b600182039050919050565b600060028204905060018216806152b657607f821691505b602082108114156152ca576152c96153d9565b5b50919050565b6152d982615484565b810181811067ffffffffffffffff821117156152f8576152f7615437565b5b80604052505050565b600061530c826151cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561533f5761533e61537b565b5b600182019050919050565b6000615355826151cc565b9150615360836151cc565b9250826153705761536f6153aa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f6d617820737570706c7920686173206265656e20726561636865640000000000600082015250565b7f6d6178203320706572207472616e73616374696f6e0000000000000000000000600082015250565b7f6d61782032302070657220616464726573730000000000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6d696e74206973206e6f74206163746976650000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206574682073656e7400000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b615c6481615146565b8114615c6f57600080fd5b50565b615c7b81615158565b8114615c8657600080fd5b50565b615c9281615164565b8114615c9d57600080fd5b50565b615ca9816151cc565b8114615cb457600080fd5b5056fea26469706673582212205069cb8956587fe13d2268cd0bfb5a76278aefa94d2b5f5883aa9959d3d5b82a64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000115c

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 20
Arg [1] : collectionSize_ (uint256): 4444

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 000000000000000000000000000000000000000000000000000000000000115c


Deployed Bytecode Sourcemap

4708:4962:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3963:370:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7487:219:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5689:94:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7214:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6777:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2524:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9176:227:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4960:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8187:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3155:744:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6481:431:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8277:159:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4823:40:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5075:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4870:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2687:177:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7826:100:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7277:204;;;;;;;;;;;;;:::i;:::-;;5117:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5512:118:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4776:38:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5242:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4915:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7932:94;;;;;;;;;;;;;:::i;:::-;;4999:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4389:211:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:10;;;;;;;;;;;;;:::i;:::-;;5156:24:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5686:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1063:87:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8606:147:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5844:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5187:50:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6050:425;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7482:274:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8032:149:4;;;;;;;;;;;;;:::i;:::-;;9409:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6005:394:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8298:84:4;;;;;;;;;;;;;:::i;:::-;;12922:43:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6964:307:4;;;;;;;;;;;;;:::i;:::-;;8493:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5297:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7819:186:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4754:15:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8388:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1972:201:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3963:370:3;4090:4;4135:25;4120:40;;;:11;:40;;;;:99;;;;4186:33;4171:48;;;:11;:48;;;;4120:99;:160;;;;4245:35;4230:50;;;:11;:50;;;;4120:160;:207;;;;4291:36;4315:11;4291:23;:36::i;:::-;4120:207;4106:221;;3963:370;;;:::o;7487:219:4:-;7541:7;7693:6;7683:7;7659:15;:21;7675:4;7659:21;;;;;;;;;;;;;;;;7609:9;;7584:15;:21;7600:4;7584:21;;;;;;;;;;;;;;;;:34;;:70;;7645:9;;7584:70;;;7621:15;:21;7637:4;7621:21;;;;;;;;;;;;;;;;7584:70;7565:15;:90;;;;:::i;:::-;7564:116;;;;:::i;:::-;:126;;;;:::i;:::-;:135;;;;:::i;:::-;7557:143;;7487:219;;;:::o;5689:94:3:-;5743:13;5772:5;5765:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5689:94;:::o;7214:204::-;7282:7;7306:16;7314:7;7306;:16::i;:::-;7298:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7388:15;:24;7404:7;7388:24;;;;;;;;;;;;;;;;;;;;;7381:31;;7214:204;;;:::o;6777:379::-;6846:13;6862:24;6878:7;6862:15;:24::i;:::-;6846:40;;6907:5;6901:11;;:2;:11;;;;6893:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6992:5;6976:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7001:37;7018:5;7025:12;:10;:12::i;:::-;7001:16;:37::i;:::-;6976:62;6960:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;7122:28;7131:2;7135:7;7144:5;7122:8;:28::i;:::-;6839:317;6777:379;;:::o;2524:94::-;2577:7;2600:12;;2593:19;;2524:94;:::o;9176:227:4:-;9264:23;9278:4;9284:2;9264:13;:23::i;:::-;9294:15;:21;9310:4;9294:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;9324:15;:19;9340:2;9324:19;;;;;;;;;;;;;;;;:21;;;;;;;;;:::i;:::-;;;;;;9358:39;9379:4;9385:2;9389:7;9358:20;:39::i;:::-;9176:227;;;:::o;4960:30::-;;;;;;;;;;;;;:::o;8187:105::-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8258:28:4::1;8277:8;8258:18;:28::i;:::-;8187:105:::0;:::o;3155:744:3:-;3264:7;3299:16;3309:5;3299:9;:16::i;:::-;3291:5;:24;3283:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3361:22;3386:13;:11;:13::i;:::-;3361:38;;3406:19;3436:25;3486:9;3481:350;3505:14;3501:1;:18;3481:350;;;3535:31;3569:11;:14;3581:1;3569:14;;;;;;;;;;;3535:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3622:1;3596:28;;:9;:14;;;:28;;;3592:89;;3657:9;:14;;;3637:34;;3592:89;3714:5;3693:26;;:17;:26;;;3689:135;;;3751:5;3736:11;:20;3732:59;;;3778:1;3771:8;;;;;;;;;3732:59;3801:13;;;;;:::i;:::-;;;;3689:135;3526:305;3521:3;;;;;:::i;:::-;;;;3481:350;;;;3837:56;;;;;;;;;;:::i;:::-;;;;;;;;3155:744;;;;;:::o;6481:431:4:-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6577:1:4::1;6561:12;6550:8;:23;;;;:::i;:::-;:28;6542:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;6669:10;;6657:8;6641:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;6633:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6718:17;6749:12;6738:8;:23;;;;:::i;:::-;6718:43;;6799:8;6768:15;:27;6784:10;6768:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;6820:9;6815:92;6839:9;6835:1;:13;6815:92;;;6864:35;6874:10;6886:12;6864:9;:35::i;:::-;6850:3;;;;;:::i;:::-;;;;6815:92;;;;6535:377;6481:431:::0;:::o;8277:159:3:-;8391:39;8408:4;8414:2;8418:7;8391:39;;;;;;;;;;;;:16;:39::i;:::-;8277:159;;;:::o;4823:40:4:-;;;;:::o;5075:35::-;;;;:::o;4870:37::-;;;;:::o;2687:177:3:-;2754:7;2786:13;:11;:13::i;:::-;2778:5;:21;2770:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2853:5;2846:12;;2687:177;;;:::o;7826:100:4:-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7913:7:4::1;;7897:13;:23;;;;;;;:::i;:::-;;7826:100:::0;;:::o;7277:204::-;7313:3;;;;;;;;;;;:8;;;7322:10;7359:14;:26;7374:10;7359:26;;;;;;;;;;;;;;;;7334:22;7345:10;7334;:22::i;:::-;:51;;;;:::i;:::-;7313:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7423:15;7393;:27;7409:10;7393:27;;;;;;;;;;;;;;;:45;;;;7474:1;7445:14;:26;7460:10;7445:26;;;;;;;;;;;;;;;:30;;;;7277:204::o;5117:32::-;;;;:::o;5512:118:3:-;5576:7;5599:20;5611:7;5599:11;:20::i;:::-;:25;;;5592:32;;5512:118;;;:::o;4776:38:4:-;;;:::o;5242:50::-;;;;;;;;;;;;;;;;;:::o;4915:38::-;;;;:::o;7932:94::-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8006:14:4::1;;;;;;;;;;;8005:15;7988:14;;:32;;;;;;;;;;;;;;;;;;7932:94::o:0;4999:34::-;;;;;;;;;;;;;:::o;4389:211:3:-;4453:7;4494:1;4477:19;;:5;:19;;;;4469:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4566:12;:19;4579:5;4566:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4558:36;;4551:43;;4389:211;;;:::o;1714:103:10:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;5156:24:4:-;;;;:::o;5686:358::-;5621:10;5608:23;;:9;:23;;;5600:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5759:10:::1;;;;;;;;;;;5751:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5835:13;;5823:8;5807:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;5799:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5907:21;;5895:8;:33;;5887:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5992:8;5961:15;:27;5977:10;5961:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;6007:31;6017:10;6029:8;6007:9;:31::i;:::-;5686:358:::0;:::o;1063:87:10:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;8606:147:4:-;8687:21;;:::i;:::-;8727:20;8739:7;8727:11;:20::i;:::-;8720:27;;8606:147;;;:::o;5844:98:3:-;5900:13;5929:7;5922:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5844:98;:::o;5187:50:4:-;;;;;;;;;;;;;;;;;:::o;6050:425::-;5621:10;5608:23;;:9;:23;;;5600:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6127:10:::1;;;;;;;;;;;6119:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;6203:10;;6191:8;6175:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;6167:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6273:17;;6261:8;:29;;6252:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6353:8;6341:9;;:20;;;;:::i;:::-;6328:9;:33;;6320:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;6423:8;6392:15;:27;6408:10;6392:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;6438:31;6448:10;6460:8;6438:9;:31::i;:::-;6050:425:::0;:::o;7482:274:3:-;7585:12;:10;:12::i;:::-;7573:24;;:8;:24;;;;7565:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7682:8;7637:18;:32;7656:12;:10;:12::i;:::-;7637:32;;;;;;;;;;;;;;;:42;7670:8;7637:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7731:8;7702:48;;7717:12;:10;:12::i;:::-;7702:48;;;7741:8;7702:48;;;;;;:::i;:::-;;;;;;;;7482:274;;:::o;8032:149:4:-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8115:1:4::1;8091:21;:25;8083:34;;;::::0;::::1;;8132:10;8124:28;;:51;8153:21;8124:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8032:149::o:0;9409:256::-;9520:23;9534:4;9540:2;9520:13;:23::i;:::-;9550:15;:21;9566:4;9550:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;9580:15;:19;9596:2;9580:19;;;;;;;;;;;;;;;;:21;;;;;;;;;:::i;:::-;;;;;;9610:49;9635:4;9641:2;9645:7;9654:4;9610:24;:49::i;:::-;9409:256;;;;:::o;6005:394:3:-;6103:13;6144:16;6152:7;6144;:16::i;:::-;6128:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;6234:21;6258:10;:8;:10::i;:::-;6234:34;;6313:1;6295:7;6289:21;:25;:104;;;;;;;;;;;;;;;;;6350:7;6359:18;:7;:16;:18::i;:::-;6333:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6289:104;6275:118;;;6005:394;;;:::o;8298:84:4:-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8366:10:4::1;;;;;;;;;;;8365:11;8352:10;;:24;;;;;;;;;;;;;;;;;;8298:84::o:0;12922:43:3:-;;;;:::o;6964:307:4:-;5621:10;5608:23;;:9;:23;;;5600:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;7040:14:::1;7024:13;:11;:13::i;:::-;:30;7016:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7093:3;;;;;;;;;;;:8;;;7102:10;7114:8;7093:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7160:22;7171:10;7160;:22::i;:::-;7130:14;:26;7145:10;7130:26;;;;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;;;;;7219:15;7189;:27;7205:10;7189:27;;;;;;;;;;;;;;;:45;;;;7241:24;7251:10;7263:1;7241:9;:24::i;:::-;6964:307::o:0;8493:107::-;8551:7;8574:20;8588:5;8574:13;:20::i;:::-;8567:27;;8493:107;;;:::o;5297:49::-;;;;;;;;;;;;;;;;;:::o;7819:186:3:-;7941:4;7964:18;:25;7983:5;7964:25;;;;;;;;;;;;;;;:35;7990:8;7964:35;;;;;;;;;;;;;;;;;;;;;;;;;7957:42;;7819:186;;;;:::o;4754:15:4:-;;;;;;;;;;;;;:::o;8388:99::-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8469:11:4::1;8458:3;;:23;;;;;;;;;;;;;;;;;;8388:99:::0;:::o;1972:201:10:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;854:157:2:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;9057:105:3:-;9114:4;9144:12;;9134:7;:22;9127:29;;9057:105;;;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;12744:172:3:-;12868:2;12841:15;:24;12857:7;12841:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12902:7;12898:2;12882:28;;12891:5;12882:28;;;;;;;;;;;;12744:172;;;:::o;8759:411:4:-;8858:4;8836:27;;:10;:27;;;8828:36;;;;;;8894:1;8878:18;;:4;:18;;;8875:143;;8936:16;8947:4;8936:10;:16::i;:::-;8912:14;:20;8927:4;8912:20;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;8991:15;8967;:21;8983:4;8967:21;;;;;;;;;;;;;;;:39;;;;8875:143;9045:1;9031:16;;:2;:16;;;9028:135;;9085:14;9096:2;9085:10;:14::i;:::-;9063;:18;9078:2;9063:18;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;9136:15;9114;:19;9130:2;9114:19;;;;;;;;;;;;;;;:37;;;;9028:135;8759:411;;:::o;8064:150:3:-;8180:28;8190:4;8196:2;8200:7;8180:9;:28::i;:::-;8064:150;;;:::o;13070:846::-;13132:25;13160:24;;13132:52;;13210:1;13199:8;:12;13191:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;13247:16;13297:1;13286:8;13266:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;13247:51;;13337:1;13320:14;:18;;;;:::i;:::-;13309:8;:29;13305:81;;;13377:1;13360:14;:18;;;;:::i;:::-;13349:29;;13305:81;13501:17;13509:8;13501:7;:17::i;:::-;13493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13573:9;13585:17;13573:29;;13568:297;13609:8;13604:1;:13;13568:297;;13668:1;13637:33;;:11;:14;13649:1;13637:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;13633:225;;;13683:31;13717:14;13729:1;13717:11;:14::i;:::-;13683:48;;13759:89;;;;;;;;13786:9;:14;;;13759:89;;;;;;13813:9;:24;;;13759:89;;;;;13742:11;:14;13754:1;13742:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13672:186;13633:225;13619:3;;;;;:::i;:::-;;;;13568:297;;;;13909:1;13898:8;:12;;;;:::i;:::-;13871:24;:39;;;;13125:791;;13070:846;:::o;9168:98::-;9233:27;9243:2;9247:8;9233:27;;;;;;;;;;;;:9;:27::i;:::-;9168:98;;:::o;4852:606::-;4928:21;;:::i;:::-;4969:16;4977:7;4969;:16::i;:::-;4961:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5041:26;5089:12;5078:7;:23;5074:93;;5158:1;5143:12;5133:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5112:47;;5074:93;5180:12;5195:7;5180:22;;5175:212;5212:18;5204:4;:26;5175:212;;5249:31;5283:11;:17;5295:4;5283:17;;;;;;;;;;;5249:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5339:1;5313:28;;:9;:14;;;:28;;;5309:71;;5361:9;5354:16;;;;;;;5309:71;5240:147;5232:6;;;;;:::i;:::-;;;;5175:212;;;;5395:57;;;;;;;;;;:::i;:::-;;;;;;;;4852:606;;;;:::o;2333:191:10:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2396:128;2333:191;:::o;8499:319:3:-;8644:28;8654:4;8660:2;8664:7;8644:9;:28::i;:::-;8695:48;8718:4;8724:2;8728:7;8737:5;8695:22;:48::i;:::-;8679:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;8499:319;;;;:::o;7712:108:4:-;7772:13;7801;7794:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7712:108;:::o;342:723:11:-;398:13;628:1;619:5;:10;615:53;;;646:10;;;;;;;;;;;;;;;;;;;;;615:53;678:12;693:5;678:20;;709:14;734:78;749:1;741:4;:9;734:78;;767:8;;;;;:::i;:::-;;;;798:2;790:10;;;;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;822:39;;872:154;888:1;879:5;:10;872:154;;916:1;906:11;;;;;:::i;:::-;;;983:2;975:5;:10;;;;:::i;:::-;962:2;:24;;;;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1012:2;1003:11;;;;;:::i;:::-;;;872:154;;;1050:6;1036:21;;;;;342:723;;;;:::o;4606:240:3:-;4667:7;4716:1;4699:19;;:5;:19;;;;4683:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;4807:12;:19;4820:5;4807:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;4799:41;;4792:48;;4606:240;;;:::o;11109:1529::-;11206:35;11244:20;11256:7;11244:11;:20::i;:::-;11206:58;;11273:22;11315:13;:18;;;11299:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;11368:12;:10;:12::i;:::-;11344:36;;:20;11356:7;11344:11;:20::i;:::-;:36;;;11299:81;:142;;;;11391:50;11408:13;:18;;;11428:12;:10;:12::i;:::-;11391:16;:50::i;:::-;11299:142;11273:169;;11467:17;11451:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;11599:4;11577:26;;:13;:18;;;:26;;;11561:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;11688:1;11674:16;;:2;:16;;;;11666:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11741:43;11763:4;11769:2;11773:7;11782:1;11741:21;:43::i;:::-;11841:49;11858:1;11862:7;11871:13;:18;;;11841:8;:49::i;:::-;11929:1;11899:12;:18;11912:4;11899:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11965:1;11937:12;:16;11950:2;11937:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11996:43;;;;;;;;12011:2;11996:43;;;;;;12022:15;11996:43;;;;;11973:11;:20;11985:7;11973:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12267:19;12299:1;12289:7;:11;;;;:::i;:::-;12267:33;;12352:1;12311:43;;:11;:24;12323:11;12311:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12307:236;;;12369:20;12377:11;12369:7;:20::i;:::-;12365:171;;;12429:97;;;;;;;;12456:13;:18;;;12429:97;;;;;;12487:13;:28;;;12429:97;;;;;12402:11;:24;12414:11;12402:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12365:171;12307:236;12575:7;12571:2;12556:27;;12565:4;12556:27;;;;;;;;;;;;12590:42;12611:4;12617:2;12621:7;12630:1;12590:20;:42::i;:::-;11199:1439;;;11109:1529;;;:::o;9605:1272::-;9710:20;9733:12;;9710:35;;9774:1;9760:16;;:2;:16;;;;9752:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9951:21;9959:12;9951:7;:21::i;:::-;9950:22;9942:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10033:12;10021:8;:24;;10013:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10093:61;10123:1;10127:2;10131:12;10145:8;10093:21;:61::i;:::-;10163:30;10196:12;:16;10209:2;10196:16;;;;;;;;;;;;;;;10163:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10238:119;;;;;;;;10288:8;10258:11;:19;;;:39;;;;:::i;:::-;10238:119;;;;;;10341:8;10306:11;:24;;;:44;;;;:::i;:::-;10238:119;;;;;10219:12;:16;10232:2;10219:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10392:43;;;;;;;;10407:2;10392:43;;;;;;10418:15;10392:43;;;;;10364:11;:25;10376:12;10364:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10444:20;10467:12;10444:35;;10493:9;10488:281;10512:8;10508:1;:12;10488:281;;;10566:12;10562:2;10541:38;;10558:1;10541:38;;;;;;;;;;;;10606:59;10637:1;10641:2;10645:12;10659:5;10606:22;:59::i;:::-;10588:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;10747:14;;;;;:::i;:::-;;;;10522:3;;;;;:::i;:::-;;;;10488:281;;;;10792:12;10777;:27;;;;10811:60;10840:1;10844:2;10848:12;10862:8;10811:20;:60::i;:::-;9703:1174;;;9605:1272;;;:::o;14459:690::-;14596:4;14613:15;:2;:13;;;:15::i;:::-;14609:535;;;14668:2;14652:36;;;14689:12;:10;:12::i;:::-;14703:4;14709:7;14718:5;14652:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14639:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14900:1;14883:6;:13;:18;14879:215;;;14916:61;;;;;;;;;;:::i;:::-;;;;;;;;14879:215;15062:6;15056:13;15047:6;15043:2;15039:15;15032:38;14639:464;14784:45;;;14774:55;;;:6;:55;;;;14767:62;;;;;14609:535;15132:4;15125:11;;14459:690;;;;;;;:::o;15611:141::-;;;;;:::o;16138:140::-;;;;;:::o;1210:326:0:-;1270:4;1527:1;1505:7;:19;;;:23;1498:30;;1210:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:12:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:108::-;7050:24;7068:5;7050:24;:::i;:::-;7045:3;7038:37;6973:108;;:::o;7087:118::-;7174:24;7192:5;7174:24;:::i;:::-;7169:3;7162:37;7087:118;;:::o;7211:109::-;7292:21;7307:5;7292:21;:::i;:::-;7287:3;7280:34;7211:109;;:::o;7326:360::-;7412:3;7440:38;7472:5;7440:38;:::i;:::-;7494:70;7557:6;7552:3;7494:70;:::i;:::-;7487:77;;7573:52;7618:6;7613:3;7606:4;7599:5;7595:16;7573:52;:::i;:::-;7650:29;7672:6;7650:29;:::i;:::-;7645:3;7641:39;7634:46;;7416:270;7326:360;;;;:::o;7692:157::-;7792:50;7836:5;7792:50;:::i;:::-;7787:3;7780:63;7692:157;;:::o;7855:185::-;7969:64;8027:5;7969:64;:::i;:::-;7964:3;7957:77;7855:185;;:::o;8046:364::-;8134:3;8162:39;8195:5;8162:39;:::i;:::-;8217:71;8281:6;8276:3;8217:71;:::i;:::-;8210:78;;8297:52;8342:6;8337:3;8330:4;8323:5;8319:16;8297:52;:::i;:::-;8374:29;8396:6;8374:29;:::i;:::-;8369:3;8365:39;8358:46;;8138:272;8046:364;;;;:::o;8416:377::-;8522:3;8550:39;8583:5;8550:39;:::i;:::-;8605:89;8687:6;8682:3;8605:89;:::i;:::-;8598:96;;8703:52;8748:6;8743:3;8736:4;8729:5;8725:16;8703:52;:::i;:::-;8780:6;8775:3;8771:16;8764:23;;8526:267;8416:377;;;;:::o;8799:366::-;8941:3;8962:67;9026:2;9021:3;8962:67;:::i;:::-;8955:74;;9038:93;9127:3;9038:93;:::i;:::-;9156:2;9151:3;9147:12;9140:19;;8799:366;;;:::o;9171:::-;9313:3;9334:67;9398:2;9393:3;9334:67;:::i;:::-;9327:74;;9410:93;9499:3;9410:93;:::i;:::-;9528:2;9523:3;9519:12;9512:19;;9171:366;;;:::o;9543:::-;9685:3;9706:67;9770:2;9765:3;9706:67;:::i;:::-;9699:74;;9782:93;9871:3;9782:93;:::i;:::-;9900:2;9895:3;9891:12;9884:19;;9543:366;;;:::o;9915:::-;10057:3;10078:67;10142:2;10137:3;10078:67;:::i;:::-;10071:74;;10154:93;10243:3;10154:93;:::i;:::-;10272:2;10267:3;10263:12;10256:19;;9915:366;;;:::o;10287:::-;10429:3;10450:67;10514:2;10509:3;10450:67;:::i;:::-;10443:74;;10526:93;10615:3;10526:93;:::i;:::-;10644:2;10639:3;10635:12;10628:19;;10287:366;;;:::o;10659:::-;10801:3;10822:67;10886:2;10881:3;10822:67;:::i;:::-;10815:74;;10898:93;10987:3;10898:93;:::i;:::-;11016:2;11011:3;11007:12;11000:19;;10659:366;;;:::o;11031:::-;11173:3;11194:67;11258:2;11253:3;11194:67;:::i;:::-;11187:74;;11270:93;11359:3;11270:93;:::i;:::-;11388:2;11383:3;11379:12;11372:19;;11031:366;;;:::o;11403:::-;11545:3;11566:67;11630:2;11625:3;11566:67;:::i;:::-;11559:74;;11642:93;11731:3;11642:93;:::i;:::-;11760:2;11755:3;11751:12;11744:19;;11403:366;;;:::o;11775:::-;11917:3;11938:67;12002:2;11997:3;11938:67;:::i;:::-;11931:74;;12014:93;12103:3;12014:93;:::i;:::-;12132:2;12127:3;12123:12;12116:19;;11775:366;;;:::o;12147:::-;12289:3;12310:67;12374:2;12369:3;12310:67;:::i;:::-;12303:74;;12386:93;12475:3;12386:93;:::i;:::-;12504:2;12499:3;12495:12;12488:19;;12147:366;;;:::o;12519:::-;12661:3;12682:67;12746:2;12741:3;12682:67;:::i;:::-;12675:74;;12758:93;12847:3;12758:93;:::i;:::-;12876:2;12871:3;12867:12;12860:19;;12519:366;;;:::o;12891:::-;13033:3;13054:67;13118:2;13113:3;13054:67;:::i;:::-;13047:74;;13130:93;13219:3;13130:93;:::i;:::-;13248:2;13243:3;13239:12;13232:19;;12891:366;;;:::o;13263:::-;13405:3;13426:67;13490:2;13485:3;13426:67;:::i;:::-;13419:74;;13502:93;13591:3;13502:93;:::i;:::-;13620:2;13615:3;13611:12;13604:19;;13263:366;;;:::o;13635:::-;13777:3;13798:67;13862:2;13857:3;13798:67;:::i;:::-;13791:74;;13874:93;13963:3;13874:93;:::i;:::-;13992:2;13987:3;13983:12;13976:19;;13635:366;;;:::o;14007:::-;14149:3;14170:67;14234:2;14229:3;14170:67;:::i;:::-;14163:74;;14246:93;14335:3;14246:93;:::i;:::-;14364:2;14359:3;14355:12;14348:19;;14007:366;;;:::o;14379:::-;14521:3;14542:67;14606:2;14601:3;14542:67;:::i;:::-;14535:74;;14618:93;14707:3;14618:93;:::i;:::-;14736:2;14731:3;14727:12;14720:19;;14379:366;;;:::o;14751:::-;14893:3;14914:67;14978:2;14973:3;14914:67;:::i;:::-;14907:74;;14990:93;15079:3;14990:93;:::i;:::-;15108:2;15103:3;15099:12;15092:19;;14751:366;;;:::o;15123:::-;15265:3;15286:67;15350:2;15345:3;15286:67;:::i;:::-;15279:74;;15362:93;15451:3;15362:93;:::i;:::-;15480:2;15475:3;15471:12;15464:19;;15123:366;;;:::o;15495:::-;15637:3;15658:67;15722:2;15717:3;15658:67;:::i;:::-;15651:74;;15734:93;15823:3;15734:93;:::i;:::-;15852:2;15847:3;15843:12;15836:19;;15495:366;;;:::o;15867:::-;16009:3;16030:67;16094:2;16089:3;16030:67;:::i;:::-;16023:74;;16106:93;16195:3;16106:93;:::i;:::-;16224:2;16219:3;16215:12;16208:19;;15867:366;;;:::o;16239:::-;16381:3;16402:67;16466:2;16461:3;16402:67;:::i;:::-;16395:74;;16478:93;16567:3;16478:93;:::i;:::-;16596:2;16591:3;16587:12;16580:19;;16239:366;;;:::o;16611:::-;16753:3;16774:67;16838:2;16833:3;16774:67;:::i;:::-;16767:74;;16850:93;16939:3;16850:93;:::i;:::-;16968:2;16963:3;16959:12;16952:19;;16611:366;;;:::o;16983:::-;17125:3;17146:67;17210:2;17205:3;17146:67;:::i;:::-;17139:74;;17222:93;17311:3;17222:93;:::i;:::-;17340:2;17335:3;17331:12;17324:19;;16983:366;;;:::o;17355:::-;17497:3;17518:67;17582:2;17577:3;17518:67;:::i;:::-;17511:74;;17594:93;17683:3;17594:93;:::i;:::-;17712:2;17707:3;17703:12;17696:19;;17355:366;;;:::o;17727:::-;17869:3;17890:67;17954:2;17949:3;17890:67;:::i;:::-;17883:74;;17966:93;18055:3;17966:93;:::i;:::-;18084:2;18079:3;18075:12;18068:19;;17727:366;;;:::o;18099:::-;18241:3;18262:67;18326:2;18321:3;18262:67;:::i;:::-;18255:74;;18338:93;18427:3;18338:93;:::i;:::-;18456:2;18451:3;18447:12;18440:19;;18099:366;;;:::o;18471:::-;18613:3;18634:67;18698:2;18693:3;18634:67;:::i;:::-;18627:74;;18710:93;18799:3;18710:93;:::i;:::-;18828:2;18823:3;18819:12;18812:19;;18471:366;;;:::o;18843:::-;18985:3;19006:67;19070:2;19065:3;19006:67;:::i;:::-;18999:74;;19082:93;19171:3;19082:93;:::i;:::-;19200:2;19195:3;19191:12;19184:19;;18843:366;;;:::o;19215:::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:::-;19729:3;19750:67;19814:2;19809:3;19750:67;:::i;:::-;19743:74;;19826:93;19915:3;19826:93;:::i;:::-;19944:2;19939:3;19935:12;19928:19;;19587:366;;;:::o;20029:527::-;20188:4;20183:3;20179:14;20275:4;20268:5;20264:16;20258:23;20294:63;20351:4;20346:3;20342:14;20328:12;20294:63;:::i;:::-;20203:164;20459:4;20452:5;20448:16;20442:23;20478:61;20533:4;20528:3;20524:14;20510:12;20478:61;:::i;:::-;20377:172;20157:399;20029:527;;:::o;20562:118::-;20649:24;20667:5;20649:24;:::i;:::-;20644:3;20637:37;20562:118;;:::o;20686:105::-;20761:23;20778:5;20761:23;:::i;:::-;20756:3;20749:36;20686:105;;:::o;20797:435::-;20977:3;20999:95;21090:3;21081:6;20999:95;:::i;:::-;20992:102;;21111:95;21202:3;21193:6;21111:95;:::i;:::-;21104:102;;21223:3;21216:10;;20797:435;;;;;:::o;21238:222::-;21331:4;21369:2;21358:9;21354:18;21346:26;;21382:71;21450:1;21439:9;21435:17;21426:6;21382:71;:::i;:::-;21238:222;;;;:::o;21466:640::-;21661:4;21699:3;21688:9;21684:19;21676:27;;21713:71;21781:1;21770:9;21766:17;21757:6;21713:71;:::i;:::-;21794:72;21862:2;21851:9;21847:18;21838:6;21794:72;:::i;:::-;21876;21944:2;21933:9;21929:18;21920:6;21876:72;:::i;:::-;21995:9;21989:4;21985:20;21980:2;21969:9;21965:18;21958:48;22023:76;22094:4;22085:6;22023:76;:::i;:::-;22015:84;;21466:640;;;;;;;:::o;22112:386::-;22260:4;22298:2;22287:9;22283:18;22275:26;;22311:71;22379:1;22368:9;22364:17;22355:6;22311:71;:::i;:::-;22392:99;22487:2;22476:9;22472:18;22463:6;22392:99;:::i;:::-;22112:386;;;;;:::o;22504:332::-;22625:4;22663:2;22652:9;22648:18;22640:26;;22676:71;22744:1;22733:9;22729:17;22720:6;22676:71;:::i;:::-;22757:72;22825:2;22814:9;22810:18;22801:6;22757:72;:::i;:::-;22504:332;;;;;:::o;22842:210::-;22929:4;22967:2;22956:9;22952:18;22944:26;;22980:65;23042:1;23031:9;23027:17;23018:6;22980:65;:::i;:::-;22842:210;;;;:::o;23058:248::-;23164:4;23202:2;23191:9;23187:18;23179:26;;23215:84;23296:1;23285:9;23281:17;23272:6;23215:84;:::i;:::-;23058:248;;;;:::o;23312:313::-;23425:4;23463:2;23452:9;23448:18;23440:26;;23512:9;23506:4;23502:20;23498:1;23487:9;23483:17;23476:47;23540:78;23613:4;23604:6;23540:78;:::i;:::-;23532:86;;23312:313;;;;:::o;23631:419::-;23797:4;23835:2;23824:9;23820:18;23812:26;;23884:9;23878:4;23874:20;23870:1;23859:9;23855:17;23848:47;23912:131;24038:4;23912:131;:::i;:::-;23904:139;;23631:419;;;:::o;24056:::-;24222:4;24260:2;24249:9;24245:18;24237:26;;24309:9;24303:4;24299:20;24295:1;24284:9;24280:17;24273:47;24337:131;24463:4;24337:131;:::i;:::-;24329:139;;24056:419;;;:::o;24481:::-;24647:4;24685:2;24674:9;24670:18;24662:26;;24734:9;24728:4;24724:20;24720:1;24709:9;24705:17;24698:47;24762:131;24888:4;24762:131;:::i;:::-;24754:139;;24481:419;;;:::o;24906:::-;25072:4;25110:2;25099:9;25095:18;25087:26;;25159:9;25153:4;25149:20;25145:1;25134:9;25130:17;25123:47;25187:131;25313:4;25187:131;:::i;:::-;25179:139;;24906:419;;;:::o;25331:::-;25497:4;25535:2;25524:9;25520:18;25512:26;;25584:9;25578:4;25574:20;25570:1;25559:9;25555:17;25548:47;25612:131;25738:4;25612:131;:::i;:::-;25604:139;;25331:419;;;:::o;25756:::-;25922:4;25960:2;25949:9;25945:18;25937:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26037:131;26163:4;26037:131;:::i;:::-;26029:139;;25756:419;;;:::o;26181:::-;26347:4;26385:2;26374:9;26370:18;26362:26;;26434:9;26428:4;26424:20;26420:1;26409:9;26405:17;26398:47;26462:131;26588:4;26462:131;:::i;:::-;26454:139;;26181:419;;;:::o;26606:::-;26772:4;26810:2;26799:9;26795:18;26787:26;;26859:9;26853:4;26849:20;26845:1;26834:9;26830:17;26823:47;26887:131;27013:4;26887:131;:::i;:::-;26879:139;;26606:419;;;:::o;27031:::-;27197:4;27235:2;27224:9;27220:18;27212:26;;27284:9;27278:4;27274:20;27270:1;27259:9;27255:17;27248:47;27312:131;27438:4;27312:131;:::i;:::-;27304:139;;27031:419;;;:::o;27456:::-;27622:4;27660:2;27649:9;27645:18;27637:26;;27709:9;27703:4;27699:20;27695:1;27684:9;27680:17;27673:47;27737:131;27863:4;27737:131;:::i;:::-;27729:139;;27456:419;;;:::o;27881:::-;28047:4;28085:2;28074:9;28070:18;28062:26;;28134:9;28128:4;28124:20;28120:1;28109:9;28105:17;28098:47;28162:131;28288:4;28162:131;:::i;:::-;28154:139;;27881:419;;;:::o;28306:::-;28472:4;28510:2;28499:9;28495:18;28487:26;;28559:9;28553:4;28549:20;28545:1;28534:9;28530:17;28523:47;28587:131;28713:4;28587:131;:::i;:::-;28579:139;;28306:419;;;:::o;28731:::-;28897:4;28935:2;28924:9;28920:18;28912:26;;28984:9;28978:4;28974:20;28970:1;28959:9;28955:17;28948:47;29012:131;29138:4;29012:131;:::i;:::-;29004:139;;28731:419;;;:::o;29156:::-;29322:4;29360:2;29349:9;29345:18;29337:26;;29409:9;29403:4;29399:20;29395:1;29384:9;29380:17;29373:47;29437:131;29563:4;29437:131;:::i;:::-;29429:139;;29156:419;;;:::o;29581:::-;29747:4;29785:2;29774:9;29770:18;29762:26;;29834:9;29828:4;29824:20;29820:1;29809:9;29805:17;29798:47;29862:131;29988:4;29862:131;:::i;:::-;29854:139;;29581:419;;;:::o;30006:::-;30172:4;30210:2;30199:9;30195:18;30187:26;;30259:9;30253:4;30249:20;30245:1;30234:9;30230:17;30223:47;30287:131;30413:4;30287:131;:::i;:::-;30279:139;;30006:419;;;:::o;30431:::-;30597:4;30635:2;30624:9;30620:18;30612:26;;30684:9;30678:4;30674:20;30670:1;30659:9;30655:17;30648:47;30712:131;30838:4;30712:131;:::i;:::-;30704:139;;30431:419;;;:::o;30856:::-;31022:4;31060:2;31049:9;31045:18;31037:26;;31109:9;31103:4;31099:20;31095:1;31084:9;31080:17;31073:47;31137:131;31263:4;31137:131;:::i;:::-;31129:139;;30856:419;;;:::o;31281:::-;31447:4;31485:2;31474:9;31470:18;31462:26;;31534:9;31528:4;31524:20;31520:1;31509:9;31505:17;31498:47;31562:131;31688:4;31562:131;:::i;:::-;31554:139;;31281:419;;;:::o;31706:::-;31872:4;31910:2;31899:9;31895:18;31887:26;;31959:9;31953:4;31949:20;31945:1;31934:9;31930:17;31923:47;31987:131;32113:4;31987:131;:::i;:::-;31979:139;;31706:419;;;:::o;32131:::-;32297:4;32335:2;32324:9;32320:18;32312:26;;32384:9;32378:4;32374:20;32370:1;32359:9;32355:17;32348:47;32412:131;32538:4;32412:131;:::i;:::-;32404:139;;32131:419;;;:::o;32556:::-;32722:4;32760:2;32749:9;32745:18;32737:26;;32809:9;32803:4;32799:20;32795:1;32784:9;32780:17;32773:47;32837:131;32963:4;32837:131;:::i;:::-;32829:139;;32556:419;;;:::o;32981:::-;33147:4;33185:2;33174:9;33170:18;33162:26;;33234:9;33228:4;33224:20;33220:1;33209:9;33205:17;33198:47;33262:131;33388:4;33262:131;:::i;:::-;33254:139;;32981:419;;;:::o;33406:::-;33572:4;33610:2;33599:9;33595:18;33587:26;;33659:9;33653:4;33649:20;33645:1;33634:9;33630:17;33623:47;33687:131;33813:4;33687:131;:::i;:::-;33679:139;;33406:419;;;:::o;33831:::-;33997:4;34035:2;34024:9;34020:18;34012:26;;34084:9;34078:4;34074:20;34070:1;34059:9;34055:17;34048:47;34112:131;34238:4;34112:131;:::i;:::-;34104:139;;33831:419;;;:::o;34256:::-;34422:4;34460:2;34449:9;34445:18;34437:26;;34509:9;34503:4;34499:20;34495:1;34484:9;34480:17;34473:47;34537:131;34663:4;34537:131;:::i;:::-;34529:139;;34256:419;;;:::o;34681:::-;34847:4;34885:2;34874:9;34870:18;34862:26;;34934:9;34928:4;34924:20;34920:1;34909:9;34905:17;34898:47;34962:131;35088:4;34962:131;:::i;:::-;34954:139;;34681:419;;;:::o;35106:::-;35272:4;35310:2;35299:9;35295:18;35287:26;;35359:9;35353:4;35349:20;35345:1;35334:9;35330:17;35323:47;35387:131;35513:4;35387:131;:::i;:::-;35379:139;;35106:419;;;:::o;35531:::-;35697:4;35735:2;35724:9;35720:18;35712:26;;35784:9;35778:4;35774:20;35770:1;35759:9;35755:17;35748:47;35812:131;35938:4;35812:131;:::i;:::-;35804:139;;35531:419;;;:::o;35956:::-;36122:4;36160:2;36149:9;36145:18;36137:26;;36209:9;36203:4;36199:20;36195:1;36184:9;36180:17;36173:47;36237:131;36363:4;36237:131;:::i;:::-;36229:139;;35956:419;;;:::o;36381:346::-;36536:4;36574:2;36563:9;36559:18;36551:26;;36587:133;36717:1;36706:9;36702:17;36693:6;36587:133;:::i;:::-;36381:346;;;;:::o;36733:222::-;36826:4;36864:2;36853:9;36849:18;36841:26;;36877:71;36945:1;36934:9;36930:17;36921:6;36877:71;:::i;:::-;36733:222;;;;:::o;36961:129::-;36995:6;37022:20;;:::i;:::-;37012:30;;37051:33;37079:4;37071:6;37051:33;:::i;:::-;36961:129;;;:::o;37096:75::-;37129:6;37162:2;37156:9;37146:19;;37096:75;:::o;37177:307::-;37238:4;37328:18;37320:6;37317:30;37314:56;;;37350:18;;:::i;:::-;37314:56;37388:29;37410:6;37388:29;:::i;:::-;37380:37;;37472:4;37466;37462:15;37454:23;;37177:307;;;:::o;37490:98::-;37541:6;37575:5;37569:12;37559:22;;37490:98;;;:::o;37594:99::-;37646:6;37680:5;37674:12;37664:22;;37594:99;;;:::o;37699:168::-;37782:11;37816:6;37811:3;37804:19;37856:4;37851:3;37847:14;37832:29;;37699:168;;;;:::o;37873:169::-;37957:11;37991:6;37986:3;37979:19;38031:4;38026:3;38022:14;38007:29;;37873:169;;;;:::o;38048:148::-;38150:11;38187:3;38172:18;;38048:148;;;;:::o;38202:273::-;38242:3;38261:20;38279:1;38261:20;:::i;:::-;38256:25;;38295:20;38313:1;38295:20;:::i;:::-;38290:25;;38417:1;38381:34;38377:42;38374:1;38371:49;38368:75;;;38423:18;;:::i;:::-;38368:75;38467:1;38464;38460:9;38453:16;;38202:273;;;;:::o;38481:305::-;38521:3;38540:20;38558:1;38540:20;:::i;:::-;38535:25;;38574:20;38592:1;38574:20;:::i;:::-;38569:25;;38728:1;38660:66;38656:74;38653:1;38650:81;38647:107;;;38734:18;;:::i;:::-;38647:107;38778:1;38775;38771:9;38764:16;;38481:305;;;;:::o;38792:185::-;38832:1;38849:20;38867:1;38849:20;:::i;:::-;38844:25;;38883:20;38901:1;38883:20;:::i;:::-;38878:25;;38922:1;38912:35;;38927:18;;:::i;:::-;38912:35;38969:1;38966;38962:9;38957:14;;38792:185;;;;:::o;38983:348::-;39023:7;39046:20;39064:1;39046:20;:::i;:::-;39041:25;;39080:20;39098:1;39080:20;:::i;:::-;39075:25;;39268:1;39200:66;39196:74;39193:1;39190:81;39185:1;39178:9;39171:17;39167:105;39164:131;;;39275:18;;:::i;:::-;39164:131;39323:1;39320;39316:9;39305:20;;38983:348;;;;:::o;39337:191::-;39377:4;39397:20;39415:1;39397:20;:::i;:::-;39392:25;;39431:20;39449:1;39431:20;:::i;:::-;39426:25;;39470:1;39467;39464:8;39461:34;;;39475:18;;:::i;:::-;39461:34;39520:1;39517;39513:9;39505:17;;39337:191;;;;:::o;39534:::-;39574:4;39594:20;39612:1;39594:20;:::i;:::-;39589:25;;39628:20;39646:1;39628:20;:::i;:::-;39623:25;;39667:1;39664;39661:8;39658:34;;;39672:18;;:::i;:::-;39658:34;39717:1;39714;39710:9;39702:17;;39534:191;;;;:::o;39731:96::-;39768:7;39797:24;39815:5;39797:24;:::i;:::-;39786:35;;39731:96;;;:::o;39833:90::-;39867:7;39910:5;39903:13;39896:21;39885:32;;39833:90;;;:::o;39929:149::-;39965:7;40005:66;39998:5;39994:78;39983:89;;39929:149;;;:::o;40084:118::-;40121:7;40161:34;40154:5;40150:46;40139:57;;40084:118;;;:::o;40208:126::-;40245:7;40285:42;40278:5;40274:54;40263:65;;40208:126;;;:::o;40340:77::-;40377:7;40406:5;40395:16;;40340:77;;;:::o;40423:101::-;40459:7;40499:18;40492:5;40488:30;40477:41;;40423:101;;;:::o;40530:139::-;40593:9;40626:37;40657:5;40626:37;:::i;:::-;40613:50;;40530:139;;;:::o;40675:140::-;40752:9;40785:24;40803:5;40785:24;:::i;:::-;40772:37;;40675:140;;;:::o;40821:126::-;40871:9;40904:37;40935:5;40904:37;:::i;:::-;40891:50;;40821:126;;;:::o;40953:113::-;41003:9;41036:24;41054:5;41036:24;:::i;:::-;41023:37;;40953:113;;;:::o;41072:154::-;41156:6;41151:3;41146;41133:30;41218:1;41209:6;41204:3;41200:16;41193:27;41072:154;;;:::o;41232:307::-;41300:1;41310:113;41324:6;41321:1;41318:13;41310:113;;;41409:1;41404:3;41400:11;41394:18;41390:1;41385:3;41381:11;41374:39;41346:2;41343:1;41339:10;41334:15;;41310:113;;;41441:6;41438:1;41435:13;41432:101;;;41521:1;41512:6;41507:3;41503:16;41496:27;41432:101;41281:258;41232:307;;;:::o;41545:171::-;41584:3;41607:24;41625:5;41607:24;:::i;:::-;41598:33;;41653:4;41646:5;41643:15;41640:41;;;41661:18;;:::i;:::-;41640:41;41708:1;41701:5;41697:13;41690:20;;41545:171;;;:::o;41722:320::-;41766:6;41803:1;41797:4;41793:12;41783:22;;41850:1;41844:4;41840:12;41871:18;41861:81;;41927:4;41919:6;41915:17;41905:27;;41861:81;41989:2;41981:6;41978:14;41958:18;41955:38;41952:84;;;42008:18;;:::i;:::-;41952:84;41773:269;41722:320;;;:::o;42048:281::-;42131:27;42153:4;42131:27;:::i;:::-;42123:6;42119:40;42261:6;42249:10;42246:22;42225:18;42213:10;42210:34;42207:62;42204:88;;;42272:18;;:::i;:::-;42204:88;42312:10;42308:2;42301:22;42091:238;42048:281;;:::o;42335:233::-;42374:3;42397:24;42415:5;42397:24;:::i;:::-;42388:33;;42443:66;42436:5;42433:77;42430:103;;;42513:18;;:::i;:::-;42430:103;42560:1;42553:5;42549:13;42542:20;;42335:233;;;:::o;42574:176::-;42606:1;42623:20;42641:1;42623:20;:::i;:::-;42618:25;;42657:20;42675:1;42657:20;:::i;:::-;42652:25;;42696:1;42686:35;;42701:18;;:::i;:::-;42686:35;42742:1;42739;42735:9;42730:14;;42574:176;;;;:::o;42756:180::-;42804:77;42801:1;42794:88;42901:4;42898:1;42891:15;42925:4;42922:1;42915:15;42942:180;42990:77;42987:1;42980:88;43087:4;43084:1;43077:15;43111:4;43108:1;43101:15;43128:180;43176:77;43173:1;43166:88;43273:4;43270:1;43263:15;43297:4;43294:1;43287:15;43314:180;43362:77;43359:1;43352:88;43459:4;43456:1;43449:15;43483:4;43480:1;43473:15;43500:180;43548:77;43545:1;43538:88;43645:4;43642:1;43635:15;43669:4;43666:1;43659:15;43686:117;43795:1;43792;43785:12;43809:117;43918:1;43915;43908:12;43932:117;44041:1;44038;44031:12;44055:117;44164:1;44161;44154:12;44178:117;44287:1;44284;44277:12;44301:117;44410:1;44407;44400:12;44424:102;44465:6;44516:2;44512:7;44507:2;44500:5;44496:14;44492:28;44482:38;;44424:102;;;:::o;44532:221::-;44672:34;44668:1;44660:6;44656:14;44649:58;44741:4;44736:2;44728:6;44724:15;44717:29;44532:221;:::o;44759:225::-;44899:34;44895:1;44887:6;44883:14;44876:58;44968:8;44963:2;44955:6;44951:15;44944:33;44759:225;:::o;44990:229::-;45130:34;45126:1;45118:6;45114:14;45107:58;45199:12;45194:2;45186:6;45182:15;45175:37;44990:229;:::o;45225:231::-;45365:34;45361:1;45353:6;45349:14;45342:58;45434:14;45429:2;45421:6;45417:15;45410:39;45225:231;:::o;45462:222::-;45602:34;45598:1;45590:6;45586:14;45579:58;45671:5;45666:2;45658:6;45654:15;45647:30;45462:222;:::o;45690:224::-;45830:34;45826:1;45818:6;45814:14;45807:58;45899:7;45894:2;45886:6;45882:15;45875:32;45690:224;:::o;45920:236::-;46060:34;46056:1;46048:6;46044:14;46037:58;46129:19;46124:2;46116:6;46112:15;46105:44;45920:236;:::o;46162:180::-;46302:32;46298:1;46290:6;46286:14;46279:56;46162:180;:::o;46348:244::-;46488:34;46484:1;46476:6;46472:14;46465:58;46557:27;46552:2;46544:6;46540:15;46533:52;46348:244;:::o;46598:174::-;46738:26;46734:1;46726:6;46722:14;46715:50;46598:174;:::o;46778:177::-;46918:29;46914:1;46906:6;46902:14;46895:53;46778:177;:::o;46961:171::-;47101:23;47097:1;47089:6;47085:14;47078:47;46961:171;:::o;47138:168::-;47278:20;47274:1;47266:6;47262:14;47255:44;47138:168;:::o;47312:230::-;47452:34;47448:1;47440:6;47436:14;47429:58;47521:13;47516:2;47508:6;47504:15;47497:38;47312:230;:::o;47548:225::-;47688:34;47684:1;47676:6;47672:14;47665:58;47757:8;47752:2;47744:6;47740:15;47733:33;47548:225;:::o;47779:182::-;47919:34;47915:1;47907:6;47903:14;47896:58;47779:182;:::o;47967:234::-;48107:34;48103:1;48095:6;48091:14;48084:58;48176:17;48171:2;48163:6;48159:15;48152:42;47967:234;:::o;48207:176::-;48347:28;48343:1;48335:6;48331:14;48324:52;48207:176;:::o;48389:237::-;48529:34;48525:1;48517:6;48513:14;48506:58;48598:20;48593:2;48585:6;48581:15;48574:45;48389:237;:::o;48632:168::-;48772:20;48768:1;48760:6;48756:14;48749:44;48632:168;:::o;48806:221::-;48946:34;48942:1;48934:6;48930:14;48923:58;49015:4;49010:2;49002:6;48998:15;48991:29;48806:221;:::o;49033:238::-;49173:34;49169:1;49161:6;49157:14;49150:58;49242:21;49237:2;49229:6;49225:15;49218:46;49033:238;:::o;49277:179::-;49417:31;49413:1;49405:6;49401:14;49394:55;49277:179;:::o;49462:220::-;49602:34;49598:1;49590:6;49586:14;49579:58;49671:3;49666:2;49658:6;49654:15;49647:28;49462:220;:::o;49688:233::-;49828:34;49824:1;49816:6;49812:14;49805:58;49897:16;49892:2;49884:6;49880:15;49873:41;49688:233;:::o;49927:225::-;50067:34;50063:1;50055:6;50051:14;50044:58;50136:8;50131:2;50123:6;50119:15;50112:33;49927:225;:::o;50158:169::-;50298:21;50294:1;50286:6;50282:14;50275:45;50158:169;:::o;50333:234::-;50473:34;50469:1;50461:6;50457:14;50450:58;50542:17;50537:2;50529:6;50525:15;50518:42;50333:234;:::o;50573:232::-;50713:34;50709:1;50701:6;50697:14;50690:58;50782:15;50777:2;50769:6;50765:15;50758:40;50573:232;:::o;50811:221::-;50951:34;50947:1;50939:6;50935:14;50928:58;51020:4;51015:2;51007:6;51003:15;50996:29;50811:221;:::o;51038:122::-;51111:24;51129:5;51111:24;:::i;:::-;51104:5;51101:35;51091:63;;51150:1;51147;51140:12;51091:63;51038:122;:::o;51166:116::-;51236:21;51251:5;51236:21;:::i;:::-;51229:5;51226:32;51216:60;;51272:1;51269;51262:12;51216:60;51166:116;:::o;51288:120::-;51360:23;51377:5;51360:23;:::i;:::-;51353:5;51350:34;51340:62;;51398:1;51395;51388:12;51340:62;51288:120;:::o;51414:122::-;51487:24;51505:5;51487:24;:::i;:::-;51480:5;51477:35;51467:63;;51526:1;51523;51516:12;51467:63;51414:122;:::o

Swarm Source

ipfs://5069cb8956587fe13d2268cd0bfb5a76278aefa94d2b5f5883aa9959d3d5b82a
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.