ETH Price: $2,522.10 (-4.39%)

Token

Elephants for Africa (EFA)
 

Overview

Max Total Supply

221 EFA

Holders

77

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
27 EFA
0x1ed2456ae0fb7ce7ae1e0e0b962462fc0060d26a
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:
Elephants

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-13
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.
*/


interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    //@dev Emitted when `tokenId` token is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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

interface IERC721Metadata is IERC721 {
    //@dev Returns the token collection name.
    function name() external view returns (string memory);

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

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

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

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt to reenter a locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

contract ERC721 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance){}
    function ownerOf(uint256 tokenId) external view returns (address owner){}
    function safeTransferFrom(address from,address to,uint256 tokenId) external{}
    function transferFrom(address from, address to, uint256 tokenId) external{}
    function approve(address to, uint256 tokenId) external{}
    function getApproved(uint256 tokenId) external view returns (address operator){}
    function setApprovalForAll(address operator, bool _approved) external{}
    function isApprovedForAll(address owner, address operator) external view returns (bool){}
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external{}
}

// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract Elephants is IERC721, Ownable, Functional {

    using Address for address;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    string private _baseURI;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    // Specific Functionality
    bool public mintActive;
    bool private _hideTokens;  //for URI redirects
    uint256 public price;
    uint256 public holderPrice;
    uint256 public totalTokens;
    uint256 public numberMinted;

    address private _founder;
    address private _dev;
    
    //contract connectors
    ERC721 CDB;
    ERC721 Toadz;
    ERC721 OG;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "Elephants for Africa";
        _symbol = "EFA";
        
        // Set URI to the propper address from the get-go, no secret mission going on here ;)
        _baseURI = "https://www.geckoprintpublishing.com/client-metadata/elephantsforafrica/";
        _hideTokens = false;
        
        totalTokens = 3000;
        price = 100 * (10 ** 15); // Replace leading value with price in finney
        holderPrice = 69 * (10 ** 15);
        
        _founder = 0x1ED2456aE0fb7ce7ae1E0E0b962462fc0060D26A;
        _dev = 0x2496286BDB820d40C402802F828ae265b244188A;
        
        CDB = ERC721(0x42069ABFE407C60cf4ae4112bEDEaD391dBa1cdB);
        Toadz = ERC721(0x1CB1A5e65610AEFF2551A50f76a87a7d3fB649C6);
        OG = ERC721(0xFFF7F797213d7aE5f654f2bC91c071745843b5B9);
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == Elephants.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        //send to addresses and percentages
        uint256 devcash = (address(this).balance * 30) / 100;
        uint256 foundercash = (address(this).balance * 70) / 100;
        
        (bool success, ) = _founder.call{value: foundercash}("");
        require(success, "Transaction Unsuccessful");
        (success, ) = _dev.call{value: devcash}("");
        require(success, "Transaction Unsuccessful");
    }

    
    function ownerMint(address _to, uint256 qty) external onlyOwner {
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) < totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function replaceElephants(uint256 start, uint256 stop) external onlyOwner {
        for (uint256 i = start; i <= stop; i++){
            _safeMint(OG.ownerOf(i), numberMinted);
            numberMinted ++;
        }
    }
    
    function airDrop(address[] memory list) external onlyOwner {
        uint256 mintSeedValue = numberMinted;
        for (uint256 i = 0; i < list.length; i++) {
            _safeMint(list[i], mintSeedValue + i);
            numberMinted ++;
        }
    }
    
    function mint(uint256 qty) external payable reentryLock {
        require(msg.value >= qty * price, "Mint: Insufficient Funds");
        require((qty + numberMinted) < totalTokens, "Mint: Not enough avaialability");
        require(mintActive, "Currently Closed for Business");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        
        //Handle ETH transactions
        uint256 cashIn = msg.value;
        uint256 payment = (qty * price);
        uint256 cashChange = cashIn - payment;
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            numberMinted ++;
        }
        
        if (cashChange > 0){
            (bool success, ) = msg.sender.call{value: cashChange}("");
            require(success, "Mint: unable to send change to user");
        }
    }
    
    function mintCDB(uint256 qty) external payable reentryLock {
        uint256 tokensHeld = CDB.balanceOf(_msgSender());
        require(tokensHeld > 0, "Must hold CryptoDickButts to use this mint");
        require(msg.value >= qty * holderPrice, "Mint: Insufficient Funds");
        require((qty + numberMinted) < totalTokens, "Mint: Not enough avaialability");
        require(mintActive, "Currently Closed for Business");
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        
        //Handle ETH transactions
        uint256 cashIn = msg.value;
        uint256 payment = (qty * holderPrice);
        uint256 cashChange = cashIn - payment;
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            numberMinted ++;
        }
        
        if (cashChange > 0){
            (bool success, ) = msg.sender.call{value: cashChange}("");
            require(success, "Mint: unable to send change to user");
        }
    }

    function mintToadz(uint256 qty) external payable reentryLock {
        uint256 tokensHeld = Toadz.balanceOf(_msgSender());
        require(tokensHeld > 0, "Must hold CrypToadz to use this mint");
        require(msg.value >= qty * holderPrice, "Mint: Insufficient Funds");
        require((qty + numberMinted) < totalTokens, "Mint: Not enough avaialability");
        require(mintActive, "Currently Closed for Business");

        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        
        //Handle ETH transactions
        uint256 cashIn = msg.value;
        uint256 payment = (qty * holderPrice);
        uint256 cashChange = cashIn - payment;
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            numberMinted ++;
        }
        
        if (cashChange > 0){
            (bool success, ) = msg.sender.call{value: cashChange}("");
            require(success, "Mint: unable to send change to user");
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////

    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }

    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    function setHolderPrice(uint256 newPrice) public onlyOwner {
        holderPrice = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function hideTokens() external onlyOwner {
        _hideTokens = true;
    }
    
    function revealTokens() external onlyOwner {
        _hideTokens = false;
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error
        return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys
    }

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        
        string memory tokenuri;
        
        if (_hideTokens) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked("https://gateway.pinata.cloud/ipfs/QmU2kvZLMHEW5d1ekpCk9nciD8GwpreRAQYm2gFeuipNWt"));
        } else {
            //Input flag data here to send to reveal URI
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked("https://gateway.pinata.cloud/ipfs/QmNuQYejPw8SDNCSY9Mm3LdrbBGsNEfWE6LHuYnzhYRH4t"));
    }
    // *******************************************************************************

    receive() external payable {
    }
    
    fallback() external payable {
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"list","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"holderPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mintCDB","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mintToadz","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"replaceElephants","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setHolderPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c620000406200030a60201b60201c565b6200031260201b60201c565b6040518060400160405280601481526020017f456c657068616e747320666f72204166726963610000000000000000000000008152506001908051906020019062000099929190620003d6565b506040518060400160405280600381526020017f454641000000000000000000000000000000000000000000000000000000000081525060029080519060200190620000e7929190620003d6565b50604051806080016040528060488152602001620058bc604891396003908051906020019062000119929190620003d6565b506000600860016101000a81548160ff021916908315150217905550610bb8600b8190555067016345785d8a000060098190555066f5232269808000600a81905550731ed2456ae0fb7ce7ae1e0e0b962462fc0060d26a600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732496286bdb820d40c402802f828ae265b244188a600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507342069abfe407c60cf4ae4112bedead391dba1cdb600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731cb1a5e65610aeff2551a50f76a87a7d3fb649c6601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fff7f797213d7ae5f654f2bc91c071745843b5b9601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004eb565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003e49062000486565b90600052602060002090601f01602090048101928262000408576000855562000454565b82601f106200042357805160ff191683800117855562000454565b8280016001018555821562000454579182015b828111156200045357825182559160200191906001019062000436565b5b50905062000463919062000467565b5090565b5b808211156200048257600081600090555060010162000468565b5090565b600060028204905060018216806200049f57607f821691505b60208210811415620004b657620004b5620004bc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6153c180620004fb6000396000f3fe6080604052600436106102495760003560e01c806355f804b311610139578063a22cb465116100b6578063c87b56dd1161007a578063c87b56dd146107e2578063c91c04621461081f578063e8a3d48514610836578063e985e9c514610861578063f2fde38b1461089e578063f8b2cb4f146108c757610250565b8063a22cb46514610734578063b0b922631461075d578063b5b3e21414610786578063b88d4fde1461079d578063c6ed3ca5146107c657610250565b80638da5cb5b116100fd5780638da5cb5b1461066e57806391b7f5ed1461069957806395d89b41146106c2578063a035b1fe146106ed578063a0712d681461071857610250565b806355f804b3146105895780636352211e146105b257806370a08231146105ef578063715018a61461062c5780637e1c0c091461064357610250565b806325fd90f3116101c757806342842e0e1161018b57806342842e0e146104b857806342966c68146104e1578063484b973c1461050a57806349a772b51461053357806355ea73281461055e57610250565b806325fd90f31461041f5780632e56f71e1461044a578063381109b4146104615780633ba5939d1461048a5780633ccfd60b146104a157610250565b80630b74f6ee1161020e5780630b74f6ee146103495780631503c5f014610372578063150b7a021461038e57806318160ddd146103cb57806323b872dd146103f657610250565b8062b6849f1461025257806301ffc9a71461027b57806306fdde03146102b8578063081812fc146102e3578063095ea7b31461032057610250565b3661025057005b005b34801561025e57600080fd5b5061027960048036038101906102749190613b31565b610904565b005b34801561028757600080fd5b506102a2600480360381019061029d9190613b7a565b6109f2565b6040516102af9190614304565b60405180910390f35b3480156102c457600080fd5b506102cd610b7b565b6040516102da919061433a565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613c1d565b610c0d565b604051610317919061429d565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613af1565b610c92565b005b34801561035557600080fd5b50610370600480360381019061036b9190613c1d565b610d9c565b005b61038c60048036038101906103879190613c1d565b610e22565b005b34801561039a57600080fd5b506103b560048036038101906103b091906139a6565b6111d0565b6040516103c2919061431f565b60405180910390f35b3480156103d757600080fd5b506103e06111e5565b6040516103ed919061469c565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613953565b6111ef565b005b34801561042b57600080fd5b50610434611248565b6040516104419190614304565b60405180910390f35b34801561045657600080fd5b5061045f61125b565b005b34801561046d57600080fd5b5061048860048036038101906104839190613c77565b6112f4565b005b34801561049657600080fd5b5061049f611463565b005b3480156104ad57600080fd5b506104b66114fc565b005b3480156104c457600080fd5b506104df60048036038101906104da9190613953565b611753565b005b3480156104ed57600080fd5b5061050860048036038101906105039190613c1d565b611773565b005b34801561051657600080fd5b50610531600480360381019061052c9190613af1565b6117c6565b005b34801561053f57600080fd5b5061054861193c565b604051610555919061469c565b60405180910390f35b34801561056a57600080fd5b50610573611942565b604051610580919061469c565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613bd4565b611948565b005b3480156105be57600080fd5b506105d960048036038101906105d49190613c1d565b6119de565b6040516105e6919061429d565b60405180910390f35b3480156105fb57600080fd5b50610616600480360381019061061191906138b9565b611a90565b604051610623919061469c565b60405180910390f35b34801561063857600080fd5b50610641611b48565b005b34801561064f57600080fd5b50610658611bd0565b604051610665919061469c565b60405180910390f35b34801561067a57600080fd5b50610683611bd6565b604051610690919061429d565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613c1d565b611bff565b005b3480156106ce57600080fd5b506106d7611c85565b6040516106e4919061433a565b60405180910390f35b3480156106f957600080fd5b50610702611d17565b60405161070f919061469c565b60405180910390f35b610732600480360381019061072d9190613c1d565b611d1d565b005b34801561074057600080fd5b5061075b60048036038101906107569190613ab1565b611fd1565b005b34801561076957600080fd5b50610784600480360381019061077f9190613c1d565b61213d565b005b34801561079257600080fd5b5061079b6121c3565b005b3480156107a957600080fd5b506107c460048036038101906107bf9190613a2e565b61225c565b005b6107e060048036038101906107db9190613c1d565b6122b7565b005b3480156107ee57600080fd5b5061080960048036038101906108049190613c1d565b612665565b604051610816919061433a565b60405180910390f35b34801561082b57600080fd5b50610834612722565b005b34801561084257600080fd5b5061084b6127bb565b604051610858919061433a565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190613913565b6127e0565b6040516108959190614304565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c091906138b9565b612874565b005b3480156108d357600080fd5b506108ee60048036038101906108e991906138b9565b61296c565b6040516108fb919061469c565b60405180910390f35b61090c6129c7565b73ffffffffffffffffffffffffffffffffffffffff1661092a611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614610980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109779061459c565b60405180910390fd5b6000600c54905060005b82518110156109ed576109c28382815181106109a9576109a8614b02565b5b602002602001015182846109bd91906147cd565b6129cf565b600c60008154809291906109d5906149fb565b919050555080806109e5906149fb565b91505061098a565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610abd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b2557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b74575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610b8a90614998565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb690614998565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b5050505050905090565b6000610c18826129ed565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e9061457c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c9d826119de565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d059061461c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d4e5750610d4d81336127e0565b5b610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d84906144dc565b60405180910390fd5b610d978383612a59565b505050565b610da46129c7565b73ffffffffffffffffffffffffffffffffffffffff16610dc2611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f9061459c565b60405180910390fd5b80600a8190555050565b600060149054906101000a900460ff1615610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e69906144bc565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610ed56129c7565b6040518263ffffffff1660e01b8152600401610ef1919061429d565b60206040518083038186803b158015610f0957600080fd5b505afa158015610f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f419190613c4a565b905060008111610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061449c565b60405180910390fd5b600a5482610f949190614854565b341015610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd906145bc565b60405180910390fd5b600b54600c5483610fe791906147cd565b10611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e9061435c565b60405180910390fd5b600860009054906101000a900460ff16611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d9061445c565b60405180910390fd5b6000600c54905060003490506000600a54856110929190614854565b9050600081836110a291906148ae565b905060005b868110156110f6576110cb6110ba6129c7565b82876110c691906147cd565b6129cf565b600c60008154809291906110de906149fb565b919050555080806110ee906149fb565b9150506110a7565b5060008111156111ae5760003373ffffffffffffffffffffffffffffffffffffffff168260405161112690614273565b60006040518083038185875af1925050503d8060008114611163576040519150601f19603f3d011682016040523d82523d6000602084013e611168565b606091505b50509050806111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a39061437c565b60405180910390fd5b505b505050505060008060146101000a81548160ff02191690831515021790555050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b6111f93382612b12565b611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f9061463c565b60405180910390fd5b611243838383612bf0565b505050565b600860009054906101000a900460ff1681565b6112636129c7565b73ffffffffffffffffffffffffffffffffffffffff16611281611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061459c565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6112fc6129c7565b73ffffffffffffffffffffffffffffffffffffffff1661131a611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113679061459c565b60405180910390fd5b60008290505b81811161145e57611433601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016113db919061469c565b60206040518083038186803b1580156113f357600080fd5b505afa158015611407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142b91906138e6565b600c546129cf565b600c6000815480929190611446906149fb565b91905055508080611456906149fb565b915050611376565b505050565b61146b6129c7565b73ffffffffffffffffffffffffffffffffffffffff16611489611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d69061459c565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6115046129c7565b73ffffffffffffffffffffffffffffffffffffffff16611522611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f9061459c565b60405180910390fd5b60006064601e476115899190614854565b6115939190614823565b9050600060646046476115a69190614854565b6115b09190614823565b90506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516115fa90614273565b60006040518083038185875af1925050503d8060008114611637576040519150601f19603f3d011682016040523d82523d6000602084013e61163c565b606091505b5050905080611680576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611677906143fc565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516116c690614273565b60006040518083038185875af1925050503d8060008114611703576040519150601f19603f3d011682016040523d82523d6000602084013e611708565b606091505b5050809150508061174e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611745906143fc565b60405180910390fd5b505050565b61176e8383836040518060200160405280600081525061225c565b505050565b61177c816119de565b73ffffffffffffffffffffffffffffffffffffffff1661179a6129c7565b73ffffffffffffffffffffffffffffffffffffffff16146117ba57600080fd5b6117c381612e4c565b50565b6117ce6129c7565b73ffffffffffffffffffffffffffffffffffffffff166117ec611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611842576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118399061459c565b60405180910390fd5b600c5481600c5461185391906147cd565b11611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a9061467c565b60405180910390fd5b600b5481600c546118a491906147cd565b106118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db9061453c565b60405180910390fd5b6000600c54905060005b828110156119365761190b84828461190691906147cd565b6129cf565b600c600081548092919061191e906149fb565b9190505550808061192e906149fb565b9150506118ee565b50505050565b600c5481565b600a5481565b6119506129c7565b73ffffffffffffffffffffffffffffffffffffffff1661196e611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb9061459c565b60405180910390fd5b80600390805190602001906119da9291906135af565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e9061451c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af8906144fc565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b506129c7565b73ffffffffffffffffffffffffffffffffffffffff16611b6e611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb9061459c565b60405180910390fd5b611bce6000612f5d565b565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c076129c7565b73ffffffffffffffffffffffffffffffffffffffff16611c25611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c729061459c565b60405180910390fd5b8060098190555050565b606060028054611c9490614998565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc090614998565b8015611d0d5780601f10611ce257610100808354040283529160200191611d0d565b820191906000526020600020905b815481529060010190602001808311611cf057829003601f168201915b5050505050905090565b60095481565b600060149054906101000a900460ff1615611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d64906144bc565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555060095481611d969190614854565b341015611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf906145bc565b60405180910390fd5b600b54600c5482611de991906147cd565b10611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e209061435c565b60405180910390fd5b600860009054906101000a900460ff16611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f9061445c565b60405180910390fd5b6000600c5490506000349050600060095484611e949190614854565b905060008183611ea491906148ae565b905060005b85811015611ef857611ecd611ebc6129c7565b8287611ec891906147cd565b6129cf565b600c6000815480929190611ee0906149fb565b91905055508080611ef0906149fb565b915050611ea9565b506000811115611fb05760003373ffffffffffffffffffffffffffffffffffffffff1682604051611f2890614273565b60006040518083038185875af1925050503d8060008114611f65576040519150601f19603f3d011682016040523d82523d6000602084013e611f6a565b606091505b5050905080611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa59061437c565b60405180910390fd5b505b5050505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612040576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120379061443c565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121319190614304565b60405180910390a35050565b6121456129c7565b73ffffffffffffffffffffffffffffffffffffffff16612163611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b09061459c565b60405180910390fd5b80600b8190555050565b6121cb6129c7565b73ffffffffffffffffffffffffffffffffffffffff166121e9611bd6565b73ffffffffffffffffffffffffffffffffffffffff161461223f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122369061459c565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b6122663383612b12565b6122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c9061463c565b60405180910390fd5b6122b184848484613021565b50505050565b600060149054906101000a900460ff1615612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe906144bc565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161236a6129c7565b6040518263ffffffff1660e01b8152600401612386919061429d565b60206040518083038186803b15801561239e57600080fd5b505afa1580156123b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d69190613c4a565b90506000811161241b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124129061465c565b60405180910390fd5b600a54826124299190614854565b34101561246b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612462906145bc565b60405180910390fd5b600b54600c548361247c91906147cd565b106124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b39061435c565b60405180910390fd5b600860009054906101000a900460ff1661250b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125029061445c565b60405180910390fd5b6000600c54905060003490506000600a54856125279190614854565b90506000818361253791906148ae565b905060005b8681101561258b5761256061254f6129c7565b828761255b91906147cd565b6129cf565b600c6000815480929190612573906149fb565b91905055508080612583906149fb565b91505061253c565b5060008111156126435760003373ffffffffffffffffffffffffffffffffffffffff16826040516125bb90614273565b60006040518083038185875af1925050503d80600081146125f8576040519150601f19603f3d011682016040523d82523d6000602084013e6125fd565b606091505b5050905080612641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126389061437c565b60405180910390fd5b505b505050505060008060146101000a81548160ff02191690831515021790555050565b6060612670826129ed565b6126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a6906145fc565b60405180910390fd5b6060600860019054906101000a900460ff16156126eb576040516020016126d590614288565b6040516020818303038152906040529050612719565b60036126f68461307d565b60405160200161270792919061422f565b60405160208183030381529060405290505b80915050919050565b61272a6129c7565b73ffffffffffffffffffffffffffffffffffffffff16612748611bd6565b73ffffffffffffffffffffffffffffffffffffffff161461279e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127959061459c565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60606040516020016127cc9061425e565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61287c6129c7565b73ffffffffffffffffffffffffffffffffffffffff1661289a611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e79061459c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612957906143bc565b60405180910390fd5b61296981612f5d565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129c09190614823565b9050919050565b600033905090565b6129e98282604051806020016040528060008152506131de565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612acc836119de565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612b1d826129ed565b612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b539061447c565b60405180910390fd5b6000612b67836119de565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612bd657508373ffffffffffffffffffffffffffffffffffffffff16612bbe84610c0d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612be75750612be681856127e0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c10826119de565b73ffffffffffffffffffffffffffffffffffffffff1614612c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5d906145dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccd9061441c565b60405180910390fd5b612ce1838383613239565b612cec600082612a59565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3c91906148ae565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d9391906147cd565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612e57826119de565b9050612e6581600084613239565b612e70600083612a59565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ec091906148ae565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61302c848484612bf0565b6130388484848461323e565b613077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306e9061439c565b60405180910390fd5b50505050565b606060008214156130c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d9565b600082905060005b600082146130f75780806130e0906149fb565b915050600a826130f09190614823565b91506130cd565b60008167ffffffffffffffff81111561311357613112614b31565b5b6040519080825280601f01601f1916602001820160405280156131455781602001600182028036833780820191505090505b5090505b600085146131d25760018261315e91906148ae565b9150600a8561316d9190614a44565b603061317991906147cd565b60f81b81838151811061318f5761318e614b02565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131cb9190614823565b9450613149565b8093505050505b919050565b6131e883836133ce565b6131f5600084848461323e565b613234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322b9061439c565b60405180910390fd5b505050565b505050565b600061325f8473ffffffffffffffffffffffffffffffffffffffff1661359c565b156133c1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016132a394939291906142b8565b602060405180830381600087803b1580156132bd57600080fd5b505af19250505080156132ee57506040513d601f19601f820116820180604052508101906132eb9190613ba7565b60015b613371573d806000811461331e576040519150601f19603f3d011682016040523d82523d6000602084013e613323565b606091505b50600081511415613369576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133609061439c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133c6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561343e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134359061455c565b60405180910390fd5b613447816129ed565b15613487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347e906143dc565b60405180910390fd5b61349360008383613239565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134e391906147cd565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135bb90614998565b90600052602060002090601f0160209004810192826135dd5760008555613624565b82601f106135f657805160ff1916838001178555613624565b82800160010185558215613624579182015b82811115613623578251825591602001919060010190613608565b5b5090506136319190613635565b5090565b5b8082111561364e576000816000905550600101613636565b5090565b6000613665613660846146dc565b6146b7565b9050808382526020820190508285602086028201111561368857613687614b6a565b5b60005b858110156136b8578161369e8882613746565b84526020840193506020830192505060018101905061368b565b5050509392505050565b60006136d56136d084614708565b6146b7565b9050828152602081018484840111156136f1576136f0614b6f565b5b6136fc848285614956565b509392505050565b600061371761371284614739565b6146b7565b90508281526020810184848401111561373357613732614b6f565b5b61373e848285614956565b509392505050565b6000813590506137558161532f565b92915050565b60008151905061376a8161532f565b92915050565b600082601f83011261378557613784614b65565b5b8135613795848260208601613652565b91505092915050565b6000813590506137ad81615346565b92915050565b6000813590506137c28161535d565b92915050565b6000815190506137d78161535d565b92915050565b60008083601f8401126137f3576137f2614b65565b5b8235905067ffffffffffffffff8111156138105761380f614b60565b5b60208301915083600182028301111561382c5761382b614b6a565b5b9250929050565b600082601f83011261384857613847614b65565b5b81356138588482602086016136c2565b91505092915050565b600082601f83011261387657613875614b65565b5b8135613886848260208601613704565b91505092915050565b60008135905061389e81615374565b92915050565b6000815190506138b381615374565b92915050565b6000602082840312156138cf576138ce614b79565b5b60006138dd84828501613746565b91505092915050565b6000602082840312156138fc576138fb614b79565b5b600061390a8482850161375b565b91505092915050565b6000806040838503121561392a57613929614b79565b5b600061393885828601613746565b925050602061394985828601613746565b9150509250929050565b60008060006060848603121561396c5761396b614b79565b5b600061397a86828701613746565b935050602061398b86828701613746565b925050604061399c8682870161388f565b9150509250925092565b6000806000806000608086880312156139c2576139c1614b79565b5b60006139d088828901613746565b95505060206139e188828901613746565b94505060406139f28882890161388f565b935050606086013567ffffffffffffffff811115613a1357613a12614b74565b5b613a1f888289016137dd565b92509250509295509295909350565b60008060008060808587031215613a4857613a47614b79565b5b6000613a5687828801613746565b9450506020613a6787828801613746565b9350506040613a788782880161388f565b925050606085013567ffffffffffffffff811115613a9957613a98614b74565b5b613aa587828801613833565b91505092959194509250565b60008060408385031215613ac857613ac7614b79565b5b6000613ad685828601613746565b9250506020613ae78582860161379e565b9150509250929050565b60008060408385031215613b0857613b07614b79565b5b6000613b1685828601613746565b9250506020613b278582860161388f565b9150509250929050565b600060208284031215613b4757613b46614b79565b5b600082013567ffffffffffffffff811115613b6557613b64614b74565b5b613b7184828501613770565b91505092915050565b600060208284031215613b9057613b8f614b79565b5b6000613b9e848285016137b3565b91505092915050565b600060208284031215613bbd57613bbc614b79565b5b6000613bcb848285016137c8565b91505092915050565b600060208284031215613bea57613be9614b79565b5b600082013567ffffffffffffffff811115613c0857613c07614b74565b5b613c1484828501613861565b91505092915050565b600060208284031215613c3357613c32614b79565b5b6000613c418482850161388f565b91505092915050565b600060208284031215613c6057613c5f614b79565b5b6000613c6e848285016138a4565b91505092915050565b60008060408385031215613c8e57613c8d614b79565b5b6000613c9c8582860161388f565b9250506020613cad8582860161388f565b9150509250929050565b613cc0816148e2565b82525050565b613ccf816148f4565b82525050565b613cde81614900565b82525050565b6000613cef8261477f565b613cf98185614795565b9350613d09818560208601614965565b613d1281614b7e565b840191505092915050565b6000613d288261478a565b613d3281856147b1565b9350613d42818560208601614965565b613d4b81614b7e565b840191505092915050565b6000613d618261478a565b613d6b81856147c2565b9350613d7b818560208601614965565b80840191505092915050565b60008154613d9481614998565b613d9e81866147c2565b94506001821660008114613db95760018114613dca57613dfd565b60ff19831686528186019350613dfd565b613dd38561476a565b60005b83811015613df557815481890152600182019150602081019050613dd6565b838801955050505b50505092915050565b6000613e13601e836147b1565b9150613e1e82614b8f565b602082019050919050565b6000613e366023836147b1565b9150613e4182614bb8565b604082019050919050565b6000613e596032836147b1565b9150613e6482614c07565b604082019050919050565b6000613e7c6026836147b1565b9150613e8782614c56565b604082019050919050565b6000613e9f601c836147b1565b9150613eaa82614ca5565b602082019050919050565b6000613ec26018836147b1565b9150613ecd82614cce565b602082019050919050565b6000613ee56024836147b1565b9150613ef082614cf7565b604082019050919050565b6000613f086019836147b1565b9150613f1382614d46565b602082019050919050565b6000613f2b601d836147b1565b9150613f3682614d6f565b602082019050919050565b6000613f4e602c836147b1565b9150613f5982614d98565b604082019050919050565b6000613f716024836147b1565b9150613f7c82614de7565b604082019050919050565b6000613f946024836147b1565b9150613f9f82614e36565b604082019050919050565b6000613fb76038836147b1565b9150613fc282614e85565b604082019050919050565b6000613fda602a836147b1565b9150613fe582614ed4565b604082019050919050565b6000613ffd6029836147b1565b915061400882614f23565b604082019050919050565b60006140206011836147b1565b915061402b82614f72565b602082019050919050565b60006140436020836147b1565b915061404e82614f9b565b602082019050919050565b6000614066602c836147b1565b915061407182614fc4565b604082019050919050565b60006140896005836147c2565b915061409482615013565b600582019050919050565b60006140ac6020836147b1565b91506140b78261503c565b602082019050919050565b60006140cf6018836147b1565b91506140da82615065565b602082019050919050565b60006140f26029836147b1565b91506140fd8261508e565b604082019050919050565b6000614115602f836147b1565b9150614120826150dd565b604082019050919050565b60006141386021836147b1565b91506141438261512c565b604082019050919050565b600061415b6050836147c2565b91506141668261517b565b605082019050919050565b600061417e6000836147a6565b9150614189826151f0565b600082019050919050565b60006141a16031836147b1565b91506141ac826151f3565b604082019050919050565b60006141c4602a836147b1565b91506141cf82615242565b604082019050919050565b60006141e76050836147c2565b91506141f282615291565b605082019050919050565b600061420a6013836147b1565b915061421582615306565b602082019050919050565b6142298161494c565b82525050565b600061423b8285613d87565b91506142478284613d56565b91506142528261407c565b91508190509392505050565b60006142698261414e565b9150819050919050565b600061427e82614171565b9150819050919050565b6000614293826141da565b9150819050919050565b60006020820190506142b26000830184613cb7565b92915050565b60006080820190506142cd6000830187613cb7565b6142da6020830186613cb7565b6142e76040830185614220565b81810360608301526142f98184613ce4565b905095945050505050565b60006020820190506143196000830184613cc6565b92915050565b60006020820190506143346000830184613cd5565b92915050565b600060208201905081810360008301526143548184613d1d565b905092915050565b6000602082019050818103600083015261437581613e06565b9050919050565b6000602082019050818103600083015261439581613e29565b9050919050565b600060208201905081810360008301526143b581613e4c565b9050919050565b600060208201905081810360008301526143d581613e6f565b9050919050565b600060208201905081810360008301526143f581613e92565b9050919050565b6000602082019050818103600083015261441581613eb5565b9050919050565b6000602082019050818103600083015261443581613ed8565b9050919050565b6000602082019050818103600083015261445581613efb565b9050919050565b6000602082019050818103600083015261447581613f1e565b9050919050565b6000602082019050818103600083015261449581613f41565b9050919050565b600060208201905081810360008301526144b581613f64565b9050919050565b600060208201905081810360008301526144d581613f87565b9050919050565b600060208201905081810360008301526144f581613faa565b9050919050565b6000602082019050818103600083015261451581613fcd565b9050919050565b6000602082019050818103600083015261453581613ff0565b9050919050565b6000602082019050818103600083015261455581614013565b9050919050565b6000602082019050818103600083015261457581614036565b9050919050565b6000602082019050818103600083015261459581614059565b9050919050565b600060208201905081810360008301526145b58161409f565b9050919050565b600060208201905081810360008301526145d5816140c2565b9050919050565b600060208201905081810360008301526145f5816140e5565b9050919050565b6000602082019050818103600083015261461581614108565b9050919050565b600060208201905081810360008301526146358161412b565b9050919050565b6000602082019050818103600083015261465581614194565b9050919050565b60006020820190508181036000830152614675816141b7565b9050919050565b60006020820190508181036000830152614695816141fd565b9050919050565b60006020820190506146b16000830184614220565b92915050565b60006146c16146d2565b90506146cd82826149ca565b919050565b6000604051905090565b600067ffffffffffffffff8211156146f7576146f6614b31565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561472357614722614b31565b5b61472c82614b7e565b9050602081019050919050565b600067ffffffffffffffff82111561475457614753614b31565b5b61475d82614b7e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147d88261494c565b91506147e38361494c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561481857614817614a75565b5b828201905092915050565b600061482e8261494c565b91506148398361494c565b92508261484957614848614aa4565b5b828204905092915050565b600061485f8261494c565b915061486a8361494c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a3576148a2614a75565b5b828202905092915050565b60006148b98261494c565b91506148c48361494c565b9250828210156148d7576148d6614a75565b5b828203905092915050565b60006148ed8261492c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614983578082015181840152602081019050614968565b83811115614992576000848401525b50505050565b600060028204905060018216806149b057607f821691505b602082108114156149c4576149c3614ad3565b5b50919050565b6149d382614b7e565b810181811067ffffffffffffffff821117156149f2576149f1614b31565b5b80604052505050565b6000614a068261494c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a3957614a38614a75565b5b600182019050919050565b6000614a4f8261494c565b9150614a5a8361494c565b925082614a6a57614a69614aa4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f43757272656e746c7920436c6f73656420666f7220427573696e657373000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d75737420686f6c642043727970546f61647a20746f2075736520746869732060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f69706660008201527f732f516d4e755159656a50773853444e435359394d6d334c6472624247734e4560208201527f665745364c4875596e7a68595248347400000000000000000000000000000000604082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d75737420686f6c642043727970746f4469636b427574747320746f2075736560008201527f2074686973206d696e7400000000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f69706660008201527f732f516d55326b765a4c4d484557356431656b70436b396e636944384777707260208201527f65524151596d326746657569704e577400000000000000000000000000000000604082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b615338816148e2565b811461534357600080fd5b50565b61534f816148f4565b811461535a57600080fd5b50565b61536681614900565b811461537157600080fd5b50565b61537d8161494c565b811461538857600080fd5b5056fea264697066735822122019135a2e82bdb62b198a70354af9f3a7544bd3ca36c5b1ff7d4063ed6881b8d864736f6c6343000807003368747470733a2f2f7777772e6765636b6f7072696e747075626c697368696e672e636f6d2f636c69656e742d6d657461646174612f656c657068616e7473666f726166726963612f

Deployed Bytecode

0x6080604052600436106102495760003560e01c806355f804b311610139578063a22cb465116100b6578063c87b56dd1161007a578063c87b56dd146107e2578063c91c04621461081f578063e8a3d48514610836578063e985e9c514610861578063f2fde38b1461089e578063f8b2cb4f146108c757610250565b8063a22cb46514610734578063b0b922631461075d578063b5b3e21414610786578063b88d4fde1461079d578063c6ed3ca5146107c657610250565b80638da5cb5b116100fd5780638da5cb5b1461066e57806391b7f5ed1461069957806395d89b41146106c2578063a035b1fe146106ed578063a0712d681461071857610250565b806355f804b3146105895780636352211e146105b257806370a08231146105ef578063715018a61461062c5780637e1c0c091461064357610250565b806325fd90f3116101c757806342842e0e1161018b57806342842e0e146104b857806342966c68146104e1578063484b973c1461050a57806349a772b51461053357806355ea73281461055e57610250565b806325fd90f31461041f5780632e56f71e1461044a578063381109b4146104615780633ba5939d1461048a5780633ccfd60b146104a157610250565b80630b74f6ee1161020e5780630b74f6ee146103495780631503c5f014610372578063150b7a021461038e57806318160ddd146103cb57806323b872dd146103f657610250565b8062b6849f1461025257806301ffc9a71461027b57806306fdde03146102b8578063081812fc146102e3578063095ea7b31461032057610250565b3661025057005b005b34801561025e57600080fd5b5061027960048036038101906102749190613b31565b610904565b005b34801561028757600080fd5b506102a2600480360381019061029d9190613b7a565b6109f2565b6040516102af9190614304565b60405180910390f35b3480156102c457600080fd5b506102cd610b7b565b6040516102da919061433a565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613c1d565b610c0d565b604051610317919061429d565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613af1565b610c92565b005b34801561035557600080fd5b50610370600480360381019061036b9190613c1d565b610d9c565b005b61038c60048036038101906103879190613c1d565b610e22565b005b34801561039a57600080fd5b506103b560048036038101906103b091906139a6565b6111d0565b6040516103c2919061431f565b60405180910390f35b3480156103d757600080fd5b506103e06111e5565b6040516103ed919061469c565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613953565b6111ef565b005b34801561042b57600080fd5b50610434611248565b6040516104419190614304565b60405180910390f35b34801561045657600080fd5b5061045f61125b565b005b34801561046d57600080fd5b5061048860048036038101906104839190613c77565b6112f4565b005b34801561049657600080fd5b5061049f611463565b005b3480156104ad57600080fd5b506104b66114fc565b005b3480156104c457600080fd5b506104df60048036038101906104da9190613953565b611753565b005b3480156104ed57600080fd5b5061050860048036038101906105039190613c1d565b611773565b005b34801561051657600080fd5b50610531600480360381019061052c9190613af1565b6117c6565b005b34801561053f57600080fd5b5061054861193c565b604051610555919061469c565b60405180910390f35b34801561056a57600080fd5b50610573611942565b604051610580919061469c565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613bd4565b611948565b005b3480156105be57600080fd5b506105d960048036038101906105d49190613c1d565b6119de565b6040516105e6919061429d565b60405180910390f35b3480156105fb57600080fd5b50610616600480360381019061061191906138b9565b611a90565b604051610623919061469c565b60405180910390f35b34801561063857600080fd5b50610641611b48565b005b34801561064f57600080fd5b50610658611bd0565b604051610665919061469c565b60405180910390f35b34801561067a57600080fd5b50610683611bd6565b604051610690919061429d565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613c1d565b611bff565b005b3480156106ce57600080fd5b506106d7611c85565b6040516106e4919061433a565b60405180910390f35b3480156106f957600080fd5b50610702611d17565b60405161070f919061469c565b60405180910390f35b610732600480360381019061072d9190613c1d565b611d1d565b005b34801561074057600080fd5b5061075b60048036038101906107569190613ab1565b611fd1565b005b34801561076957600080fd5b50610784600480360381019061077f9190613c1d565b61213d565b005b34801561079257600080fd5b5061079b6121c3565b005b3480156107a957600080fd5b506107c460048036038101906107bf9190613a2e565b61225c565b005b6107e060048036038101906107db9190613c1d565b6122b7565b005b3480156107ee57600080fd5b5061080960048036038101906108049190613c1d565b612665565b604051610816919061433a565b60405180910390f35b34801561082b57600080fd5b50610834612722565b005b34801561084257600080fd5b5061084b6127bb565b604051610858919061433a565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190613913565b6127e0565b6040516108959190614304565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c091906138b9565b612874565b005b3480156108d357600080fd5b506108ee60048036038101906108e991906138b9565b61296c565b6040516108fb919061469c565b60405180910390f35b61090c6129c7565b73ffffffffffffffffffffffffffffffffffffffff1661092a611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614610980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109779061459c565b60405180910390fd5b6000600c54905060005b82518110156109ed576109c28382815181106109a9576109a8614b02565b5b602002602001015182846109bd91906147cd565b6129cf565b600c60008154809291906109d5906149fb565b919050555080806109e5906149fb565b91505061098a565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610abd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b2557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b74575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610b8a90614998565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb690614998565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b5050505050905090565b6000610c18826129ed565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e9061457c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c9d826119de565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d059061461c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d4e5750610d4d81336127e0565b5b610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d84906144dc565b60405180910390fd5b610d978383612a59565b505050565b610da46129c7565b73ffffffffffffffffffffffffffffffffffffffff16610dc2611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f9061459c565b60405180910390fd5b80600a8190555050565b600060149054906101000a900460ff1615610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e69906144bc565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610ed56129c7565b6040518263ffffffff1660e01b8152600401610ef1919061429d565b60206040518083038186803b158015610f0957600080fd5b505afa158015610f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f419190613c4a565b905060008111610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061449c565b60405180910390fd5b600a5482610f949190614854565b341015610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd906145bc565b60405180910390fd5b600b54600c5483610fe791906147cd565b10611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e9061435c565b60405180910390fd5b600860009054906101000a900460ff16611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d9061445c565b60405180910390fd5b6000600c54905060003490506000600a54856110929190614854565b9050600081836110a291906148ae565b905060005b868110156110f6576110cb6110ba6129c7565b82876110c691906147cd565b6129cf565b600c60008154809291906110de906149fb565b919050555080806110ee906149fb565b9150506110a7565b5060008111156111ae5760003373ffffffffffffffffffffffffffffffffffffffff168260405161112690614273565b60006040518083038185875af1925050503d8060008114611163576040519150601f19603f3d011682016040523d82523d6000602084013e611168565b606091505b50509050806111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a39061437c565b60405180910390fd5b505b505050505060008060146101000a81548160ff02191690831515021790555050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b6111f93382612b12565b611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f9061463c565b60405180910390fd5b611243838383612bf0565b505050565b600860009054906101000a900460ff1681565b6112636129c7565b73ffffffffffffffffffffffffffffffffffffffff16611281611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061459c565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6112fc6129c7565b73ffffffffffffffffffffffffffffffffffffffff1661131a611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113679061459c565b60405180910390fd5b60008290505b81811161145e57611433601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016113db919061469c565b60206040518083038186803b1580156113f357600080fd5b505afa158015611407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142b91906138e6565b600c546129cf565b600c6000815480929190611446906149fb565b91905055508080611456906149fb565b915050611376565b505050565b61146b6129c7565b73ffffffffffffffffffffffffffffffffffffffff16611489611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d69061459c565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6115046129c7565b73ffffffffffffffffffffffffffffffffffffffff16611522611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f9061459c565b60405180910390fd5b60006064601e476115899190614854565b6115939190614823565b9050600060646046476115a69190614854565b6115b09190614823565b90506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516115fa90614273565b60006040518083038185875af1925050503d8060008114611637576040519150601f19603f3d011682016040523d82523d6000602084013e61163c565b606091505b5050905080611680576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611677906143fc565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516116c690614273565b60006040518083038185875af1925050503d8060008114611703576040519150601f19603f3d011682016040523d82523d6000602084013e611708565b606091505b5050809150508061174e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611745906143fc565b60405180910390fd5b505050565b61176e8383836040518060200160405280600081525061225c565b505050565b61177c816119de565b73ffffffffffffffffffffffffffffffffffffffff1661179a6129c7565b73ffffffffffffffffffffffffffffffffffffffff16146117ba57600080fd5b6117c381612e4c565b50565b6117ce6129c7565b73ffffffffffffffffffffffffffffffffffffffff166117ec611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611842576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118399061459c565b60405180910390fd5b600c5481600c5461185391906147cd565b11611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a9061467c565b60405180910390fd5b600b5481600c546118a491906147cd565b106118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db9061453c565b60405180910390fd5b6000600c54905060005b828110156119365761190b84828461190691906147cd565b6129cf565b600c600081548092919061191e906149fb565b9190505550808061192e906149fb565b9150506118ee565b50505050565b600c5481565b600a5481565b6119506129c7565b73ffffffffffffffffffffffffffffffffffffffff1661196e611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb9061459c565b60405180910390fd5b80600390805190602001906119da9291906135af565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e9061451c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af8906144fc565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b506129c7565b73ffffffffffffffffffffffffffffffffffffffff16611b6e611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb9061459c565b60405180910390fd5b611bce6000612f5d565b565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c076129c7565b73ffffffffffffffffffffffffffffffffffffffff16611c25611bd6565b73ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c729061459c565b60405180910390fd5b8060098190555050565b606060028054611c9490614998565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc090614998565b8015611d0d5780601f10611ce257610100808354040283529160200191611d0d565b820191906000526020600020905b815481529060010190602001808311611cf057829003601f168201915b5050505050905090565b60095481565b600060149054906101000a900460ff1615611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d64906144bc565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555060095481611d969190614854565b341015611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf906145bc565b60405180910390fd5b600b54600c5482611de991906147cd565b10611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e209061435c565b60405180910390fd5b600860009054906101000a900460ff16611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f9061445c565b60405180910390fd5b6000600c5490506000349050600060095484611e949190614854565b905060008183611ea491906148ae565b905060005b85811015611ef857611ecd611ebc6129c7565b8287611ec891906147cd565b6129cf565b600c6000815480929190611ee0906149fb565b91905055508080611ef0906149fb565b915050611ea9565b506000811115611fb05760003373ffffffffffffffffffffffffffffffffffffffff1682604051611f2890614273565b60006040518083038185875af1925050503d8060008114611f65576040519150601f19603f3d011682016040523d82523d6000602084013e611f6a565b606091505b5050905080611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa59061437c565b60405180910390fd5b505b5050505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612040576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120379061443c565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121319190614304565b60405180910390a35050565b6121456129c7565b73ffffffffffffffffffffffffffffffffffffffff16612163611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b09061459c565b60405180910390fd5b80600b8190555050565b6121cb6129c7565b73ffffffffffffffffffffffffffffffffffffffff166121e9611bd6565b73ffffffffffffffffffffffffffffffffffffffff161461223f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122369061459c565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b6122663383612b12565b6122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c9061463c565b60405180910390fd5b6122b184848484613021565b50505050565b600060149054906101000a900460ff1615612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe906144bc565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161236a6129c7565b6040518263ffffffff1660e01b8152600401612386919061429d565b60206040518083038186803b15801561239e57600080fd5b505afa1580156123b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d69190613c4a565b90506000811161241b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124129061465c565b60405180910390fd5b600a54826124299190614854565b34101561246b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612462906145bc565b60405180910390fd5b600b54600c548361247c91906147cd565b106124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b39061435c565b60405180910390fd5b600860009054906101000a900460ff1661250b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125029061445c565b60405180910390fd5b6000600c54905060003490506000600a54856125279190614854565b90506000818361253791906148ae565b905060005b8681101561258b5761256061254f6129c7565b828761255b91906147cd565b6129cf565b600c6000815480929190612573906149fb565b91905055508080612583906149fb565b91505061253c565b5060008111156126435760003373ffffffffffffffffffffffffffffffffffffffff16826040516125bb90614273565b60006040518083038185875af1925050503d80600081146125f8576040519150601f19603f3d011682016040523d82523d6000602084013e6125fd565b606091505b5050905080612641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126389061437c565b60405180910390fd5b505b505050505060008060146101000a81548160ff02191690831515021790555050565b6060612670826129ed565b6126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a6906145fc565b60405180910390fd5b6060600860019054906101000a900460ff16156126eb576040516020016126d590614288565b6040516020818303038152906040529050612719565b60036126f68461307d565b60405160200161270792919061422f565b60405160208183030381529060405290505b80915050919050565b61272a6129c7565b73ffffffffffffffffffffffffffffffffffffffff16612748611bd6565b73ffffffffffffffffffffffffffffffffffffffff161461279e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127959061459c565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60606040516020016127cc9061425e565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61287c6129c7565b73ffffffffffffffffffffffffffffffffffffffff1661289a611bd6565b73ffffffffffffffffffffffffffffffffffffffff16146128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e79061459c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612957906143bc565b60405180910390fd5b61296981612f5d565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129c09190614823565b9050919050565b600033905090565b6129e98282604051806020016040528060008152506131de565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612acc836119de565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612b1d826129ed565b612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b539061447c565b60405180910390fd5b6000612b67836119de565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612bd657508373ffffffffffffffffffffffffffffffffffffffff16612bbe84610c0d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612be75750612be681856127e0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c10826119de565b73ffffffffffffffffffffffffffffffffffffffff1614612c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5d906145dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccd9061441c565b60405180910390fd5b612ce1838383613239565b612cec600082612a59565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3c91906148ae565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d9391906147cd565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612e57826119de565b9050612e6581600084613239565b612e70600083612a59565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ec091906148ae565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61302c848484612bf0565b6130388484848461323e565b613077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306e9061439c565b60405180910390fd5b50505050565b606060008214156130c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d9565b600082905060005b600082146130f75780806130e0906149fb565b915050600a826130f09190614823565b91506130cd565b60008167ffffffffffffffff81111561311357613112614b31565b5b6040519080825280601f01601f1916602001820160405280156131455781602001600182028036833780820191505090505b5090505b600085146131d25760018261315e91906148ae565b9150600a8561316d9190614a44565b603061317991906147cd565b60f81b81838151811061318f5761318e614b02565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131cb9190614823565b9450613149565b8093505050505b919050565b6131e883836133ce565b6131f5600084848461323e565b613234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322b9061439c565b60405180910390fd5b505050565b505050565b600061325f8473ffffffffffffffffffffffffffffffffffffffff1661359c565b156133c1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016132a394939291906142b8565b602060405180830381600087803b1580156132bd57600080fd5b505af19250505080156132ee57506040513d601f19601f820116820180604052508101906132eb9190613ba7565b60015b613371573d806000811461331e576040519150601f19603f3d011682016040523d82523d6000602084013e613323565b606091505b50600081511415613369576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133609061439c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133c6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561343e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134359061455c565b60405180910390fd5b613447816129ed565b15613487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347e906143dc565b60405180910390fd5b61349360008383613239565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134e391906147cd565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135bb90614998565b90600052602060002090601f0160209004810192826135dd5760008555613624565b82601f106135f657805160ff1916838001178555613624565b82800160010185558215613624579182015b82811115613623578251825591602001919060010190613608565b5b5090506136319190613635565b5090565b5b8082111561364e576000816000905550600101613636565b5090565b6000613665613660846146dc565b6146b7565b9050808382526020820190508285602086028201111561368857613687614b6a565b5b60005b858110156136b8578161369e8882613746565b84526020840193506020830192505060018101905061368b565b5050509392505050565b60006136d56136d084614708565b6146b7565b9050828152602081018484840111156136f1576136f0614b6f565b5b6136fc848285614956565b509392505050565b600061371761371284614739565b6146b7565b90508281526020810184848401111561373357613732614b6f565b5b61373e848285614956565b509392505050565b6000813590506137558161532f565b92915050565b60008151905061376a8161532f565b92915050565b600082601f83011261378557613784614b65565b5b8135613795848260208601613652565b91505092915050565b6000813590506137ad81615346565b92915050565b6000813590506137c28161535d565b92915050565b6000815190506137d78161535d565b92915050565b60008083601f8401126137f3576137f2614b65565b5b8235905067ffffffffffffffff8111156138105761380f614b60565b5b60208301915083600182028301111561382c5761382b614b6a565b5b9250929050565b600082601f83011261384857613847614b65565b5b81356138588482602086016136c2565b91505092915050565b600082601f83011261387657613875614b65565b5b8135613886848260208601613704565b91505092915050565b60008135905061389e81615374565b92915050565b6000815190506138b381615374565b92915050565b6000602082840312156138cf576138ce614b79565b5b60006138dd84828501613746565b91505092915050565b6000602082840312156138fc576138fb614b79565b5b600061390a8482850161375b565b91505092915050565b6000806040838503121561392a57613929614b79565b5b600061393885828601613746565b925050602061394985828601613746565b9150509250929050565b60008060006060848603121561396c5761396b614b79565b5b600061397a86828701613746565b935050602061398b86828701613746565b925050604061399c8682870161388f565b9150509250925092565b6000806000806000608086880312156139c2576139c1614b79565b5b60006139d088828901613746565b95505060206139e188828901613746565b94505060406139f28882890161388f565b935050606086013567ffffffffffffffff811115613a1357613a12614b74565b5b613a1f888289016137dd565b92509250509295509295909350565b60008060008060808587031215613a4857613a47614b79565b5b6000613a5687828801613746565b9450506020613a6787828801613746565b9350506040613a788782880161388f565b925050606085013567ffffffffffffffff811115613a9957613a98614b74565b5b613aa587828801613833565b91505092959194509250565b60008060408385031215613ac857613ac7614b79565b5b6000613ad685828601613746565b9250506020613ae78582860161379e565b9150509250929050565b60008060408385031215613b0857613b07614b79565b5b6000613b1685828601613746565b9250506020613b278582860161388f565b9150509250929050565b600060208284031215613b4757613b46614b79565b5b600082013567ffffffffffffffff811115613b6557613b64614b74565b5b613b7184828501613770565b91505092915050565b600060208284031215613b9057613b8f614b79565b5b6000613b9e848285016137b3565b91505092915050565b600060208284031215613bbd57613bbc614b79565b5b6000613bcb848285016137c8565b91505092915050565b600060208284031215613bea57613be9614b79565b5b600082013567ffffffffffffffff811115613c0857613c07614b74565b5b613c1484828501613861565b91505092915050565b600060208284031215613c3357613c32614b79565b5b6000613c418482850161388f565b91505092915050565b600060208284031215613c6057613c5f614b79565b5b6000613c6e848285016138a4565b91505092915050565b60008060408385031215613c8e57613c8d614b79565b5b6000613c9c8582860161388f565b9250506020613cad8582860161388f565b9150509250929050565b613cc0816148e2565b82525050565b613ccf816148f4565b82525050565b613cde81614900565b82525050565b6000613cef8261477f565b613cf98185614795565b9350613d09818560208601614965565b613d1281614b7e565b840191505092915050565b6000613d288261478a565b613d3281856147b1565b9350613d42818560208601614965565b613d4b81614b7e565b840191505092915050565b6000613d618261478a565b613d6b81856147c2565b9350613d7b818560208601614965565b80840191505092915050565b60008154613d9481614998565b613d9e81866147c2565b94506001821660008114613db95760018114613dca57613dfd565b60ff19831686528186019350613dfd565b613dd38561476a565b60005b83811015613df557815481890152600182019150602081019050613dd6565b838801955050505b50505092915050565b6000613e13601e836147b1565b9150613e1e82614b8f565b602082019050919050565b6000613e366023836147b1565b9150613e4182614bb8565b604082019050919050565b6000613e596032836147b1565b9150613e6482614c07565b604082019050919050565b6000613e7c6026836147b1565b9150613e8782614c56565b604082019050919050565b6000613e9f601c836147b1565b9150613eaa82614ca5565b602082019050919050565b6000613ec26018836147b1565b9150613ecd82614cce565b602082019050919050565b6000613ee56024836147b1565b9150613ef082614cf7565b604082019050919050565b6000613f086019836147b1565b9150613f1382614d46565b602082019050919050565b6000613f2b601d836147b1565b9150613f3682614d6f565b602082019050919050565b6000613f4e602c836147b1565b9150613f5982614d98565b604082019050919050565b6000613f716024836147b1565b9150613f7c82614de7565b604082019050919050565b6000613f946024836147b1565b9150613f9f82614e36565b604082019050919050565b6000613fb76038836147b1565b9150613fc282614e85565b604082019050919050565b6000613fda602a836147b1565b9150613fe582614ed4565b604082019050919050565b6000613ffd6029836147b1565b915061400882614f23565b604082019050919050565b60006140206011836147b1565b915061402b82614f72565b602082019050919050565b60006140436020836147b1565b915061404e82614f9b565b602082019050919050565b6000614066602c836147b1565b915061407182614fc4565b604082019050919050565b60006140896005836147c2565b915061409482615013565b600582019050919050565b60006140ac6020836147b1565b91506140b78261503c565b602082019050919050565b60006140cf6018836147b1565b91506140da82615065565b602082019050919050565b60006140f26029836147b1565b91506140fd8261508e565b604082019050919050565b6000614115602f836147b1565b9150614120826150dd565b604082019050919050565b60006141386021836147b1565b91506141438261512c565b604082019050919050565b600061415b6050836147c2565b91506141668261517b565b605082019050919050565b600061417e6000836147a6565b9150614189826151f0565b600082019050919050565b60006141a16031836147b1565b91506141ac826151f3565b604082019050919050565b60006141c4602a836147b1565b91506141cf82615242565b604082019050919050565b60006141e76050836147c2565b91506141f282615291565b605082019050919050565b600061420a6013836147b1565b915061421582615306565b602082019050919050565b6142298161494c565b82525050565b600061423b8285613d87565b91506142478284613d56565b91506142528261407c565b91508190509392505050565b60006142698261414e565b9150819050919050565b600061427e82614171565b9150819050919050565b6000614293826141da565b9150819050919050565b60006020820190506142b26000830184613cb7565b92915050565b60006080820190506142cd6000830187613cb7565b6142da6020830186613cb7565b6142e76040830185614220565b81810360608301526142f98184613ce4565b905095945050505050565b60006020820190506143196000830184613cc6565b92915050565b60006020820190506143346000830184613cd5565b92915050565b600060208201905081810360008301526143548184613d1d565b905092915050565b6000602082019050818103600083015261437581613e06565b9050919050565b6000602082019050818103600083015261439581613e29565b9050919050565b600060208201905081810360008301526143b581613e4c565b9050919050565b600060208201905081810360008301526143d581613e6f565b9050919050565b600060208201905081810360008301526143f581613e92565b9050919050565b6000602082019050818103600083015261441581613eb5565b9050919050565b6000602082019050818103600083015261443581613ed8565b9050919050565b6000602082019050818103600083015261445581613efb565b9050919050565b6000602082019050818103600083015261447581613f1e565b9050919050565b6000602082019050818103600083015261449581613f41565b9050919050565b600060208201905081810360008301526144b581613f64565b9050919050565b600060208201905081810360008301526144d581613f87565b9050919050565b600060208201905081810360008301526144f581613faa565b9050919050565b6000602082019050818103600083015261451581613fcd565b9050919050565b6000602082019050818103600083015261453581613ff0565b9050919050565b6000602082019050818103600083015261455581614013565b9050919050565b6000602082019050818103600083015261457581614036565b9050919050565b6000602082019050818103600083015261459581614059565b9050919050565b600060208201905081810360008301526145b58161409f565b9050919050565b600060208201905081810360008301526145d5816140c2565b9050919050565b600060208201905081810360008301526145f5816140e5565b9050919050565b6000602082019050818103600083015261461581614108565b9050919050565b600060208201905081810360008301526146358161412b565b9050919050565b6000602082019050818103600083015261465581614194565b9050919050565b60006020820190508181036000830152614675816141b7565b9050919050565b60006020820190508181036000830152614695816141fd565b9050919050565b60006020820190506146b16000830184614220565b92915050565b60006146c16146d2565b90506146cd82826149ca565b919050565b6000604051905090565b600067ffffffffffffffff8211156146f7576146f6614b31565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561472357614722614b31565b5b61472c82614b7e565b9050602081019050919050565b600067ffffffffffffffff82111561475457614753614b31565b5b61475d82614b7e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147d88261494c565b91506147e38361494c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561481857614817614a75565b5b828201905092915050565b600061482e8261494c565b91506148398361494c565b92508261484957614848614aa4565b5b828204905092915050565b600061485f8261494c565b915061486a8361494c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a3576148a2614a75565b5b828202905092915050565b60006148b98261494c565b91506148c48361494c565b9250828210156148d7576148d6614a75565b5b828203905092915050565b60006148ed8261492c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614983578082015181840152602081019050614968565b83811115614992576000848401525b50505050565b600060028204905060018216806149b057607f821691505b602082108114156149c4576149c3614ad3565b5b50919050565b6149d382614b7e565b810181811067ffffffffffffffff821117156149f2576149f1614b31565b5b80604052505050565b6000614a068261494c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a3957614a38614a75565b5b600182019050919050565b6000614a4f8261494c565b9150614a5a8361494c565b925082614a6a57614a69614aa4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f43757272656e746c7920436c6f73656420666f7220427573696e657373000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d75737420686f6c642043727970546f61647a20746f2075736520746869732060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f69706660008201527f732f516d4e755159656a50773853444e435359394d6d334c6472624247734e4560208201527f665745364c4875596e7a68595248347400000000000000000000000000000000604082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d75737420686f6c642043727970746f4469636b427574747320746f2075736560008201527f2074686973206d696e7400000000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f69706660008201527f732f516d55326b765a4c4d484557356431656b70436b396e636944384777707260208201527f65524151596d326746657569704e577400000000000000000000000000000000604082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b615338816148e2565b811461534357600080fd5b50565b61534f816148f4565b811461535a57600080fd5b50565b61536681614900565b811461537157600080fd5b50565b61537d8161494c565b811461538857600080fd5b5056fea264697066735822122019135a2e82bdb62b198a70354af9f3a7544bd3ca36c5b1ff7d4063ed6881b8d864736f6c63430008070033

Deployed Bytecode Sourcemap

17703:21757:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21529:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19838:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38121:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27599:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27133:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25696:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23823:1073;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37065:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25918:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28483:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18450:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25508:80;;;;;;;;;;;;;:::i;:::-;;21291:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26146:81;;;;;;;;;;;;;:::i;:::-;;20279:463;;;;;;;;;;;;;:::i;:::-;;28891:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24967:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20756:523;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18624:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18558:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25310:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26832:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26562:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14833:94;;;;;;;;;;;;;:::i;:::-;;18591:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14182:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25600:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38262;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18531:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21801:929;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27892:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25808:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26056:78;;;;;;;;;;;;;:::i;:::-;;29147:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22742:1073;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38437:632;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25419:77;;;;;;;;;;;;;:::i;:::-;;39081:197;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28252:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15082:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26239:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21529:260;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21599:21:::1;21623:12;;21599:36;;21651:9;21646:136;21670:4;:11;21666:1;:15;21646:136;;;21703:37;21713:4;21718:1;21713:7;;;;;;;;:::i;:::-;;;;;;;;21738:1;21722:13;:17;;;;:::i;:::-;21703:9;:37::i;:::-;21755:12;;:15;;;;;;;;;:::i;:::-;;;;;;21683:3;;;;;:::i;:::-;;;;21646:136;;;;21588:201;21529:260:::0;:::o;19838:359::-;19923:4;19963:25;19948:40;;;:11;:40;;;;:109;;;;20024:33;20009:48;;;:11;:48;;;;19948:109;:170;;;;20093:25;20078:40;;;:11;:40;;;;19948:170;:241;;;;20154:35;;;20139:50;;;:11;:50;;;;19948:241;19940:249;;19838:359;;;:::o;38121:84::-;38160:13;38192:5;38185:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38121:84;:::o;27599:221::-;27675:7;27703:16;27711:7;27703;:16::i;:::-;27695:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27788:15;:24;27804:7;27788:24;;;;;;;;;;;;;;;;;;;;;27781:31;;27599:221;;;:::o;27133:400::-;27214:13;27230:16;27238:7;27230;:16::i;:::-;27214:32;;27271:5;27265:11;;:2;:11;;;;27257:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27363:5;27349:19;;:10;:19;;;:58;;;;27372:35;27389:5;27396:10;27372:16;:35::i;:::-;27349:58;27327:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;27504:21;27513:2;27517:7;27504:8;:21::i;:::-;27203:330;27133:400;;:::o;25696:100::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25780:8:::1;25766:11;:22;;;;25696:100:::0;:::o;23823:1073::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;23895::::1;23916:5;;;;;;;;;;;:15;;;23932:12;:10;:12::i;:::-;23916:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23895:50;;23977:1;23964:10;:14;23956:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24057:11;;24051:3;:17;;;;:::i;:::-;24038:9;:30;;24030:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24139:11;;24123:12;;24117:3;:18;;;;:::i;:::-;24116:34;24108:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24204:10;;;;;;;;;;;24196:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;24261:21;24285:12;;24261:36;;24398:14;24415:9;24398:26;;24435:15;24460:11;;24454:3;:17;;;;:::i;:::-;24435:37;;24483:18;24513:7;24504:6;:16;;;;:::i;:::-;24483:37;;24568:9;24564:132;24587:3;24583:1;:7;24564:132;;;24612:42;24622:12;:10;:12::i;:::-;24652:1;24636:13;:17;;;;:::i;:::-;24612:9;:42::i;:::-;24669:12;;:15;;;;;;;;;:::i;:::-;;;;;;24592:3;;;;;:::i;:::-;;;;24564:132;;;;24733:1;24720:10;:14;24716:173;;;24751:12;24769:10;:15;;24792:10;24769:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24750:57;;;24830:7;24822:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24735:154;24716:173;23884:1012;;;;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;23823:1073;:::o;37065:215::-;37182:6;37242:30;;;37235:37;;37065:215;;;;;;;:::o;25918:126::-;25964:7;25991:12;;25984:19;;25918:126;:::o;28483:337::-;28678:39;28697:10;28709:7;28678:18;:39::i;:::-;28670:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;28784:28;28794:4;28800:2;28804:7;28784:9;:28::i;:::-;28483:337;;;:::o;18450:22::-;;;;;;;;;;;;;:::o;25508:80::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25575:5:::1;25562:10;;:18;;;;;;;;;;;;;;;;;;25508:80::o:0;21291:226::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21381:9:::1;21393:5;21381:17;;21376:134;21405:4;21400:1;:9;21376:134;;21430:38;21440:2;;;;;;;;;;;:10;;;21451:1;21440:13;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21455:12;;21430:9;:38::i;:::-;21483:12;;:15;;;;;;;;;:::i;:::-;;;;;;21411:3;;;;;:::i;:::-;;;;21376:134;;;;21291:226:::0;;:::o;26146:81::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26214:5:::1;26200:11;;:19;;;;;;;;;;;;;;;;;;26146:81::o:0;20279:463::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20374:15:::1;20423:3;20417:2;20393:21;:26;;;;:::i;:::-;20392:34;;;;:::i;:::-;20374:52;;20437:19;20490:3;20484:2;20460:21;:26;;;;:::i;:::-;20459:34;;;;:::i;:::-;20437:56;;20515:12;20533:8;;;;;;;;;;;:13;;20554:11;20533:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20514:56;;;20589:7;20581:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20650:4;;;;;;;;;;;:9;;20667:7;20650:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20636:43;;;;;20698:7;20690:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20318:424;;;20279:463::o:0;28891:185::-;29029:39;29046:4;29052:2;29056:7;29029:39;;;;;;;;;;;;:16;:39::i;:::-;28891:185;;;:::o;24967:125::-;25042:16;25050:7;25042;:16::i;:::-;25026:32;;:12;:10;:12::i;:::-;:32;;;25018:41;;;;;;25070:14;25076:7;25070:5;:14::i;:::-;24967:125;:::o;20756:523::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20862:12:::1;;20855:3;20840:12;;:18;;;;:::i;:::-;20839:35;20831:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20940:11;;20933:3;20918:12;;:18;;;;:::i;:::-;20917:34;20909:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20994:21;21018:12;;20994:36;;21100:9;21096:176;21119:3;21115:1;:7;21096:176;;;21144:33;21154:3;21175:1;21159:13;:17;;;;:::i;:::-;21144:9;:33::i;:::-;21192:12;;:15;;;;;;;;;:::i;:::-;;;;;;21124:3;;;;;:::i;:::-;;;;21096:176;;;;20820:459;20756:523:::0;;:::o;18624:27::-;;;;:::o;18558:26::-;;;;:::o;25310:95::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25391:6:::1;25380:8;:17;;;;;;;;;;;;:::i;:::-;;25310:95:::0;:::o;26832:239::-;26904:7;26924:13;26940:7;:16;26948:7;26940:16;;;;;;;;;;;;;;;;;;;;;26924:32;;26992:1;26975:19;;:5;:19;;;;26967:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27058:5;27051:12;;;26832:239;;;:::o;26562:208::-;26634:7;26679:1;26662:19;;:5;:19;;;;26654:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26746:9;:16;26756:5;26746:16;;;;;;;;;;;;;;;;26739:23;;26562:208;;;:::o;14833:94::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14898:21:::1;14916:1;14898:9;:21::i;:::-;14833:94::o:0;18591:26::-;;;;:::o;14182:87::-;14228:7;14255:6;;;;;;;;;;;14248:13;;14182:87;:::o;25600:88::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25672:8:::1;25664:5;:16;;;;25600:88:::0;:::o;38262:::-;38303:13;38335:7;38328:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38262:88;:::o;18531:20::-;;;;:::o;21801:929::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;21895:5:::1;;21889:3;:11;;;;:::i;:::-;21876:9;:24;;21868:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21971:11;;21955:12;;21949:3;:18;;;;:::i;:::-;21948:34;21940:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22036:10;;;;;;;;;;;22028:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:21;22125:12;;22101:36;;22238:14;22255:9;22238:26;;22275:15;22300:5;;22294:3;:11;;;;:::i;:::-;22275:31;;22317:18;22347:7;22338:6;:16;;;;:::i;:::-;22317:37;;22402:9;22398:132;22421:3;22417:1;:7;22398:132;;;22446:42;22456:12;:10;:12::i;:::-;22486:1;22470:13;:17;;;;:::i;:::-;22446:9;:42::i;:::-;22503:12;;:15;;;;;;;;;:::i;:::-;;;;;;22426:3;;;;;:::i;:::-;;;;22398:132;;;;22567:1;22554:10;:14;22550:173;;;22585:12;22603:10;:15;;22626:10;22603:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22584:57;;;22664:7;22656:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;22569:154;22550:173;21857:873;;;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;21801:929;:::o;27892:289::-;28007:10;27995:22;;:8;:22;;;;27987:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28103:8;28060:18;:30;28079:10;28060:30;;;;;;;;;;;;;;;:40;28091:8;28060:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;28154:8;28127:46;;28142:10;28127:46;;;28164:8;28127:46;;;;;;:::i;:::-;;;;;;;;27892:289;;:::o;25808:102::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25893:9:::1;25879:11;:23;;;;25808:102:::0;:::o;26056:78::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26122:4:::1;26108:11;;:18;;;;;;;;;;;;;;;;;;26056:78::o:0;29147:326::-;29322:39;29341:10;29353:7;29322:18;:39::i;:::-;29314:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;29426:39;29440:4;29446:2;29450:7;29459:5;29426:13;:39::i;:::-;29147:326;;;;:::o;22742:1073::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;22812::::1;22833:3;;;;;;;;;;;:13;;;22847:12;:10;:12::i;:::-;22833:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22812:48;;22892:1;22879:10;:14;22871:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22978:11;;22972:3;:17;;;;:::i;:::-;22959:9;:30;;22951:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23060:11;;23044:12;;23038:3;:18;;;;:::i;:::-;23037:34;23029:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23125:10;;;;;;;;;;;23117:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23180:21;23204:12;;23180:36;;23317:14;23334:9;23317:26;;23354:15;23379:11;;23373:3;:17;;;;:::i;:::-;23354:37;;23402:18;23432:7;23423:6;:16;;;;:::i;:::-;23402:37;;23487:9;23483:132;23506:3;23502:1;:7;23483:132;;;23531:42;23541:12;:10;:12::i;:::-;23571:1;23555:13;:17;;;;:::i;:::-;23531:9;:42::i;:::-;23588:12;;:15;;;;;;;;;:::i;:::-;;;;;;23511:3;;;;;:::i;:::-;;;;23483:132;;;;23652:1;23639:10;:14;23635:173;;;23670:12;23688:10;:15;;23711:10;23688:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23669:57;;;23749:7;23741:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;23654:154;23635:173;22801:1014;;;;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;22742:1073;:::o;38437:632::-;38495:13;38528:16;38536:7;38528;:16::i;:::-;38520:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38617:22;38664:11;;;;;;;;;;;38660:366;;;38749:100;;;;;;;:::i;:::-;;;;;;;;;;;;;38731:119;;38660:366;;;38976:8;38986:17;38995:7;38986:8;:17::i;:::-;38959:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38941:73;;38660:366;39053:8;39046:15;;;38437:632;;;:::o;25419:77::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25484:4:::1;25471:10;;:17;;;;;;;;;;;;;;;;;;25419:77::o:0;39081:197::-;39125:13;39169:100;;;;;;;:::i;:::-;;;;;;;;;;;;;39155:115;;39081:197;:::o;28252:164::-;28349:4;28373:18;:25;28392:5;28373:25;;;;;;;;;;;;;;;:35;28399:8;28373:35;;;;;;;;;;;;;;;;;;;;;;;;;28366:42;;28252:164;;;;:::o;15082:192::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15191:1:::1;15171:22;;:8;:22;;;;15163:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15247:19;15257:8;15247:9;:19::i;:::-;15082:192:::0;:::o;26239:259::-;26304:7;26446:6;26419:9;:23;26429:12;26419:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;26412:41;;26239:259;;;:::o;13565:98::-;13618:7;13645:10;13638:17;;13565:98;:::o;31960:110::-;32036:26;32046:2;32050:7;32036:26;;;;;;;;;;;;:9;:26::i;:::-;31960:110;;:::o;30983:127::-;31048:4;31100:1;31072:30;;:7;:16;31080:7;31072:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31065:37;;30983:127;;;:::o;34944:167::-;35046:2;35019:15;:24;35035:7;35019:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35095:7;35091:2;35064:39;;35073:16;35081:7;35073;:16::i;:::-;35064:39;;;;;;;;;;;;34944:167;;:::o;31277:341::-;31370:4;31395:16;31403:7;31395;:16::i;:::-;31387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31471:13;31487:16;31495:7;31487;:16::i;:::-;31471:32;;31533:5;31522:16;;:7;:16;;;:51;;;;31566:7;31542:31;;:20;31554:7;31542:11;:20::i;:::-;:31;;;31522:51;:87;;;;31577:32;31594:5;31601:7;31577:16;:32::i;:::-;31522:87;31514:96;;;31277:341;;;;:::o;34255:571::-;34407:4;34387:24;;:16;34395:7;34387;:16::i;:::-;:24;;;34379:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;34490:1;34476:16;;:2;:16;;;;34468:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34546:39;34567:4;34573:2;34577:7;34546:20;:39::i;:::-;34650:29;34667:1;34671:7;34650:8;:29::i;:::-;34711:1;34692:9;:15;34702:4;34692:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34740:1;34723:9;:13;34733:2;34723:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34771:2;34752:7;:16;34760:7;34752:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34810:7;34806:2;34791:27;;34800:4;34791:27;;;;;;;;;;;;34255:571;;;:::o;33565:353::-;33625:13;33641:16;33649:7;33641;:16::i;:::-;33625:32;;33670:48;33691:5;33706:1;33710:7;33670:20;:48::i;:::-;33759:29;33776:1;33780:7;33759:8;:29::i;:::-;33821:1;33801:9;:16;33811:5;33801:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;33840:7;:16;33848:7;33840:16;;;;;;;;;;;;33833:23;;;;;;;;;;;33902:7;33898:1;33874:36;;33883:5;33874:36;;;;;;;;;;;;33614:304;33565:353;:::o;15282:173::-;15338:16;15357:6;;;;;;;;;;;15338:25;;15383:8;15374:6;;:17;;;;;;;;;;;;;;;;;;15438:8;15407:40;;15428:8;15407:40;;;;;;;;;;;;15327:128;15282:173;:::o;30355:315::-;30512:28;30522:4;30528:2;30532:7;30512:9;:28::i;:::-;30559:48;30582:4;30588:2;30592:7;30601:5;30559:22;:48::i;:::-;30551:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30355:315;;;;:::o;15498:532::-;15554:13;15593:1;15584:5;:10;15580:53;;;15611:10;;;;;;;;;;;;;;;;;;;;;15580:53;15643:12;15658:5;15643:20;;15674:14;15699:78;15714:1;15706:4;:9;15699:78;;15732:8;;;;;:::i;:::-;;;;15763:2;15755:10;;;;;:::i;:::-;;;15699:78;;;15787:19;15819:6;15809:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15787:39;;15837:154;15853:1;15844:5;:10;15837:154;;15881:1;15871:11;;;;;:::i;:::-;;;15948:2;15940:5;:10;;;;:::i;:::-;15927:2;:24;;;;:::i;:::-;15914:39;;15897:6;15904;15897:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15977:2;15968:11;;;;;:::i;:::-;;;15837:154;;;16015:6;16001:21;;;;;15498:532;;;;:::o;32297:321::-;32427:18;32433:2;32437:7;32427:5;:18::i;:::-;32478:54;32509:1;32513:2;32517:7;32526:5;32478:22;:54::i;:::-;32456:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32297:321;;;:::o;37852:126::-;;;;:::o;35676:801::-;35831:4;35852:15;:2;:13;;;:15::i;:::-;35848:622;;;35904:2;35888:36;;;35925:10;35937:4;35943:7;35952:5;35888:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35884:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36149:1;36132:6;:13;:18;36128:272;;;36175:60;;;;;;;;;;:::i;:::-;;;;;;;;36128:272;36350:6;36344:13;36335:6;36331:2;36327:15;36320:38;35884:531;36019:45;;;36009:55;;;:6;:55;;;;36002:62;;;;;35848:622;36454:4;36447:11;;35676:801;;;;;;;:::o;32954:382::-;33048:1;33034:16;;:2;:16;;;;33026:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33107:16;33115:7;33107;:16::i;:::-;33106:17;33098:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33169:45;33198:1;33202:2;33206:7;33169:20;:45::i;:::-;33244:1;33227:9;:13;33237:2;33227:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33275:2;33256:7;:16;33264:7;33256:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33320:7;33316:2;33295:33;;33312:1;33295:33;;;;;;;;;;;;32954:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:370::-;1968:5;2017:3;2010:4;2002:6;1998:17;1994:27;1984:122;;2025:79;;:::i;:::-;1984:122;2142:6;2129:20;2167:94;2257:3;2249:6;2242:4;2234:6;2230:17;2167:94;:::i;:::-;2158:103;;1974:293;1897:370;;;;:::o;2273:133::-;2316:5;2354:6;2341:20;2332:29;;2370:30;2394:5;2370:30;:::i;:::-;2273:133;;;;:::o;2412:137::-;2457:5;2495:6;2482:20;2473:29;;2511:32;2537:5;2511:32;:::i;:::-;2412:137;;;;:::o;2555:141::-;2611:5;2642:6;2636:13;2627:22;;2658:32;2684:5;2658:32;:::i;:::-;2555:141;;;;:::o;2715:552::-;2772:8;2782:6;2832:3;2825:4;2817:6;2813:17;2809:27;2799:122;;2840:79;;:::i;:::-;2799:122;2953:6;2940:20;2930:30;;2983:18;2975:6;2972:30;2969:117;;;3005:79;;:::i;:::-;2969:117;3119:4;3111:6;3107:17;3095:29;;3173:3;3165:4;3157:6;3153:17;3143:8;3139:32;3136:41;3133:128;;;3180:79;;:::i;:::-;3133:128;2715:552;;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3644:340::-;3700:5;3749:3;3742:4;3734:6;3730:17;3726:27;3716:122;;3757:79;;:::i;:::-;3716:122;3874:6;3861:20;3899:79;3974:3;3966:6;3959:4;3951:6;3947:17;3899:79;:::i;:::-;3890:88;;3706:278;3644:340;;;;:::o;3990:139::-;4036:5;4074:6;4061:20;4052:29;;4090:33;4117:5;4090:33;:::i;:::-;3990:139;;;;:::o;4135:143::-;4192:5;4223:6;4217:13;4208:22;;4239:33;4266:5;4239:33;:::i;:::-;4135:143;;;;:::o;4284:329::-;4343:6;4392:2;4380:9;4371:7;4367:23;4363:32;4360:119;;;4398:79;;:::i;:::-;4360:119;4518:1;4543:53;4588:7;4579:6;4568:9;4564:22;4543:53;:::i;:::-;4533:63;;4489:117;4284:329;;;;:::o;4619:351::-;4689:6;4738:2;4726:9;4717:7;4713:23;4709:32;4706:119;;;4744:79;;:::i;:::-;4706:119;4864:1;4889:64;4945:7;4936:6;4925:9;4921:22;4889:64;:::i;:::-;4879:74;;4835:128;4619:351;;;;:::o;4976:474::-;5044:6;5052;5101:2;5089:9;5080:7;5076:23;5072:32;5069:119;;;5107:79;;:::i;:::-;5069:119;5227:1;5252:53;5297:7;5288:6;5277:9;5273:22;5252:53;:::i;:::-;5242:63;;5198:117;5354:2;5380:53;5425:7;5416:6;5405:9;5401:22;5380:53;:::i;:::-;5370:63;;5325:118;4976:474;;;;;:::o;5456:619::-;5533:6;5541;5549;5598:2;5586:9;5577:7;5573:23;5569:32;5566:119;;;5604:79;;:::i;:::-;5566:119;5724:1;5749:53;5794:7;5785:6;5774:9;5770:22;5749:53;:::i;:::-;5739:63;;5695:117;5851:2;5877:53;5922:7;5913:6;5902:9;5898:22;5877:53;:::i;:::-;5867:63;;5822:118;5979:2;6005:53;6050:7;6041:6;6030:9;6026:22;6005:53;:::i;:::-;5995:63;;5950:118;5456:619;;;;;:::o;6081:963::-;6178:6;6186;6194;6202;6210;6259:3;6247:9;6238:7;6234:23;6230:33;6227:120;;;6266:79;;:::i;:::-;6227:120;6386:1;6411:53;6456:7;6447:6;6436:9;6432:22;6411:53;:::i;:::-;6401:63;;6357:117;6513:2;6539:53;6584:7;6575:6;6564:9;6560:22;6539:53;:::i;:::-;6529:63;;6484:118;6641:2;6667:53;6712:7;6703:6;6692:9;6688:22;6667:53;:::i;:::-;6657:63;;6612:118;6797:2;6786:9;6782:18;6769:32;6828:18;6820:6;6817:30;6814:117;;;6850:79;;:::i;:::-;6814:117;6963:64;7019:7;7010:6;6999:9;6995:22;6963:64;:::i;:::-;6945:82;;;;6740:297;6081:963;;;;;;;;:::o;7050:943::-;7145:6;7153;7161;7169;7218:3;7206:9;7197:7;7193:23;7189:33;7186:120;;;7225:79;;:::i;:::-;7186:120;7345:1;7370:53;7415:7;7406:6;7395:9;7391:22;7370:53;:::i;:::-;7360:63;;7316:117;7472:2;7498:53;7543:7;7534:6;7523:9;7519:22;7498:53;:::i;:::-;7488:63;;7443:118;7600:2;7626:53;7671:7;7662:6;7651:9;7647:22;7626:53;:::i;:::-;7616:63;;7571:118;7756:2;7745:9;7741:18;7728:32;7787:18;7779:6;7776:30;7773:117;;;7809:79;;:::i;:::-;7773:117;7914:62;7968:7;7959:6;7948:9;7944:22;7914:62;:::i;:::-;7904:72;;7699:287;7050:943;;;;;;;:::o;7999:468::-;8064:6;8072;8121:2;8109:9;8100:7;8096:23;8092:32;8089:119;;;8127:79;;:::i;:::-;8089:119;8247:1;8272:53;8317:7;8308:6;8297:9;8293:22;8272:53;:::i;:::-;8262:63;;8218:117;8374:2;8400:50;8442:7;8433:6;8422:9;8418:22;8400:50;:::i;:::-;8390:60;;8345:115;7999:468;;;;;:::o;8473:474::-;8541:6;8549;8598:2;8586:9;8577:7;8573:23;8569:32;8566:119;;;8604:79;;:::i;:::-;8566:119;8724:1;8749:53;8794:7;8785:6;8774:9;8770:22;8749:53;:::i;:::-;8739:63;;8695:117;8851:2;8877:53;8922:7;8913:6;8902:9;8898:22;8877:53;:::i;:::-;8867:63;;8822:118;8473:474;;;;;:::o;8953:539::-;9037:6;9086:2;9074:9;9065:7;9061:23;9057:32;9054:119;;;9092:79;;:::i;:::-;9054:119;9240:1;9229:9;9225:17;9212:31;9270:18;9262:6;9259:30;9256:117;;;9292:79;;:::i;:::-;9256:117;9397:78;9467:7;9458:6;9447:9;9443:22;9397:78;:::i;:::-;9387:88;;9183:302;8953:539;;;;:::o;9498:327::-;9556:6;9605:2;9593:9;9584:7;9580:23;9576:32;9573:119;;;9611:79;;:::i;:::-;9573:119;9731:1;9756:52;9800:7;9791:6;9780:9;9776:22;9756:52;:::i;:::-;9746:62;;9702:116;9498:327;;;;:::o;9831:349::-;9900:6;9949:2;9937:9;9928:7;9924:23;9920:32;9917:119;;;9955:79;;:::i;:::-;9917:119;10075:1;10100:63;10155:7;10146:6;10135:9;10131:22;10100:63;:::i;:::-;10090:73;;10046:127;9831:349;;;;:::o;10186:509::-;10255:6;10304:2;10292:9;10283:7;10279:23;10275:32;10272:119;;;10310:79;;:::i;:::-;10272:119;10458:1;10447:9;10443:17;10430:31;10488:18;10480:6;10477:30;10474:117;;;10510:79;;:::i;:::-;10474:117;10615:63;10670:7;10661:6;10650:9;10646:22;10615:63;:::i;:::-;10605:73;;10401:287;10186:509;;;;:::o;10701:329::-;10760:6;10809:2;10797:9;10788:7;10784:23;10780:32;10777:119;;;10815:79;;:::i;:::-;10777:119;10935:1;10960:53;11005:7;10996:6;10985:9;10981:22;10960:53;:::i;:::-;10950:63;;10906:117;10701:329;;;;:::o;11036:351::-;11106:6;11155:2;11143:9;11134:7;11130:23;11126:32;11123:119;;;11161:79;;:::i;:::-;11123:119;11281:1;11306:64;11362:7;11353:6;11342:9;11338:22;11306:64;:::i;:::-;11296:74;;11252:128;11036:351;;;;:::o;11393:474::-;11461:6;11469;11518:2;11506:9;11497:7;11493:23;11489:32;11486:119;;;11524:79;;:::i;:::-;11486:119;11644:1;11669:53;11714:7;11705:6;11694:9;11690:22;11669:53;:::i;:::-;11659:63;;11615:117;11771:2;11797:53;11842:7;11833:6;11822:9;11818:22;11797:53;:::i;:::-;11787:63;;11742:118;11393:474;;;;;:::o;11873:118::-;11960:24;11978:5;11960:24;:::i;:::-;11955:3;11948:37;11873:118;;:::o;11997:109::-;12078:21;12093:5;12078:21;:::i;:::-;12073:3;12066:34;11997:109;;:::o;12112:115::-;12197:23;12214:5;12197:23;:::i;:::-;12192:3;12185:36;12112:115;;:::o;12233:360::-;12319:3;12347:38;12379:5;12347:38;:::i;:::-;12401:70;12464:6;12459:3;12401:70;:::i;:::-;12394:77;;12480:52;12525:6;12520:3;12513:4;12506:5;12502:16;12480:52;:::i;:::-;12557:29;12579:6;12557:29;:::i;:::-;12552:3;12548:39;12541:46;;12323:270;12233:360;;;;:::o;12599:364::-;12687:3;12715:39;12748:5;12715:39;:::i;:::-;12770:71;12834:6;12829:3;12770:71;:::i;:::-;12763:78;;12850:52;12895:6;12890:3;12883:4;12876:5;12872:16;12850:52;:::i;:::-;12927:29;12949:6;12927:29;:::i;:::-;12922:3;12918:39;12911:46;;12691:272;12599:364;;;;:::o;12969:377::-;13075:3;13103:39;13136:5;13103:39;:::i;:::-;13158:89;13240:6;13235:3;13158:89;:::i;:::-;13151:96;;13256:52;13301:6;13296:3;13289:4;13282:5;13278:16;13256:52;:::i;:::-;13333:6;13328:3;13324:16;13317:23;;13079:267;12969:377;;;;:::o;13376:845::-;13479:3;13516:5;13510:12;13545:36;13571:9;13545:36;:::i;:::-;13597:89;13679:6;13674:3;13597:89;:::i;:::-;13590:96;;13717:1;13706:9;13702:17;13733:1;13728:137;;;;13879:1;13874:341;;;;13695:520;;13728:137;13812:4;13808:9;13797;13793:25;13788:3;13781:38;13848:6;13843:3;13839:16;13832:23;;13728:137;;13874:341;13941:38;13973:5;13941:38;:::i;:::-;14001:1;14015:154;14029:6;14026:1;14023:13;14015:154;;;14103:7;14097:14;14093:1;14088:3;14084:11;14077:35;14153:1;14144:7;14140:15;14129:26;;14051:4;14048:1;14044:12;14039:17;;14015:154;;;14198:6;14193:3;14189:16;14182:23;;13881:334;;13695:520;;13483:738;;13376:845;;;;:::o;14227:366::-;14369:3;14390:67;14454:2;14449:3;14390:67;:::i;:::-;14383:74;;14466:93;14555:3;14466:93;:::i;:::-;14584:2;14579:3;14575:12;14568:19;;14227:366;;;:::o;14599:::-;14741:3;14762:67;14826:2;14821:3;14762:67;:::i;:::-;14755:74;;14838:93;14927:3;14838:93;:::i;:::-;14956:2;14951:3;14947:12;14940:19;;14599:366;;;:::o;14971:::-;15113:3;15134:67;15198:2;15193:3;15134:67;:::i;:::-;15127:74;;15210:93;15299:3;15210:93;:::i;:::-;15328:2;15323:3;15319:12;15312:19;;14971:366;;;:::o;15343:::-;15485:3;15506:67;15570:2;15565:3;15506:67;:::i;:::-;15499:74;;15582:93;15671:3;15582:93;:::i;:::-;15700:2;15695:3;15691:12;15684:19;;15343:366;;;:::o;15715:::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:::-;16229:3;16250:67;16314:2;16309:3;16250:67;:::i;:::-;16243:74;;16326:93;16415:3;16326:93;:::i;:::-;16444:2;16439:3;16435:12;16428:19;;16087:366;;;:::o;16459:::-;16601:3;16622:67;16686:2;16681:3;16622:67;:::i;:::-;16615:74;;16698:93;16787:3;16698:93;:::i;:::-;16816:2;16811:3;16807:12;16800:19;;16459:366;;;:::o;16831:::-;16973:3;16994:67;17058:2;17053:3;16994:67;:::i;:::-;16987:74;;17070:93;17159:3;17070:93;:::i;:::-;17188:2;17183:3;17179:12;17172:19;;16831:366;;;:::o;17203:::-;17345:3;17366:67;17430:2;17425:3;17366:67;:::i;:::-;17359:74;;17442:93;17531:3;17442:93;:::i;:::-;17560:2;17555:3;17551:12;17544:19;;17203:366;;;:::o;17575:::-;17717:3;17738:67;17802:2;17797:3;17738:67;:::i;:::-;17731:74;;17814:93;17903:3;17814:93;:::i;:::-;17932:2;17927:3;17923:12;17916:19;;17575:366;;;:::o;17947:::-;18089:3;18110:67;18174:2;18169:3;18110:67;:::i;:::-;18103:74;;18186:93;18275:3;18186:93;:::i;:::-;18304:2;18299:3;18295:12;18288:19;;17947:366;;;:::o;18319:::-;18461:3;18482:67;18546:2;18541:3;18482:67;:::i;:::-;18475:74;;18558:93;18647:3;18558:93;:::i;:::-;18676:2;18671:3;18667:12;18660:19;;18319:366;;;:::o;18691:::-;18833:3;18854:67;18918:2;18913:3;18854:67;:::i;:::-;18847:74;;18930:93;19019:3;18930:93;:::i;:::-;19048:2;19043:3;19039:12;19032:19;;18691:366;;;:::o;19063:::-;19205:3;19226:67;19290:2;19285:3;19226:67;:::i;:::-;19219:74;;19302:93;19391:3;19302:93;:::i;:::-;19420:2;19415:3;19411:12;19404:19;;19063:366;;;:::o;19435:::-;19577:3;19598:67;19662:2;19657:3;19598:67;:::i;:::-;19591:74;;19674:93;19763:3;19674:93;:::i;:::-;19792:2;19787:3;19783:12;19776:19;;19435:366;;;:::o;19807:::-;19949:3;19970:67;20034:2;20029:3;19970:67;:::i;:::-;19963:74;;20046:93;20135:3;20046:93;:::i;:::-;20164:2;20159:3;20155:12;20148:19;;19807:366;;;:::o;20179:::-;20321:3;20342:67;20406:2;20401:3;20342:67;:::i;:::-;20335:74;;20418:93;20507:3;20418:93;:::i;:::-;20536:2;20531:3;20527:12;20520:19;;20179:366;;;:::o;20551:::-;20693:3;20714:67;20778:2;20773:3;20714:67;:::i;:::-;20707:74;;20790:93;20879:3;20790:93;:::i;:::-;20908:2;20903:3;20899:12;20892:19;;20551:366;;;:::o;20923:400::-;21083:3;21104:84;21186:1;21181:3;21104:84;:::i;:::-;21097:91;;21197:93;21286:3;21197:93;:::i;:::-;21315:1;21310:3;21306:11;21299:18;;20923:400;;;:::o;21329:366::-;21471:3;21492:67;21556:2;21551:3;21492:67;:::i;:::-;21485:74;;21568:93;21657:3;21568:93;:::i;:::-;21686:2;21681:3;21677:12;21670:19;;21329:366;;;:::o;21701:::-;21843:3;21864:67;21928:2;21923:3;21864:67;:::i;:::-;21857:74;;21940:93;22029:3;21940:93;:::i;:::-;22058:2;22053:3;22049:12;22042:19;;21701:366;;;:::o;22073:::-;22215:3;22236:67;22300:2;22295:3;22236:67;:::i;:::-;22229:74;;22312:93;22401:3;22312:93;:::i;:::-;22430:2;22425:3;22421:12;22414:19;;22073:366;;;:::o;22445:::-;22587:3;22608:67;22672:2;22667:3;22608:67;:::i;:::-;22601:74;;22684:93;22773:3;22684:93;:::i;:::-;22802:2;22797:3;22793:12;22786:19;;22445:366;;;:::o;22817:::-;22959:3;22980:67;23044:2;23039:3;22980:67;:::i;:::-;22973:74;;23056:93;23145:3;23056:93;:::i;:::-;23174:2;23169:3;23165:12;23158:19;;22817:366;;;:::o;23189:402::-;23349:3;23370:85;23452:2;23447:3;23370:85;:::i;:::-;23363:92;;23464:93;23553:3;23464:93;:::i;:::-;23582:2;23577:3;23573:12;23566:19;;23189:402;;;:::o;23597:398::-;23756:3;23777:83;23858:1;23853:3;23777:83;:::i;:::-;23770:90;;23869:93;23958:3;23869:93;:::i;:::-;23987:1;23982:3;23978:11;23971:18;;23597:398;;;:::o;24001:366::-;24143:3;24164:67;24228:2;24223:3;24164:67;:::i;:::-;24157:74;;24240:93;24329:3;24240:93;:::i;:::-;24358:2;24353:3;24349:12;24342:19;;24001:366;;;:::o;24373:::-;24515:3;24536:67;24600:2;24595:3;24536:67;:::i;:::-;24529:74;;24612:93;24701:3;24612:93;:::i;:::-;24730:2;24725:3;24721:12;24714:19;;24373:366;;;:::o;24745:402::-;24905:3;24926:85;25008:2;25003:3;24926:85;:::i;:::-;24919:92;;25020:93;25109:3;25020:93;:::i;:::-;25138:2;25133:3;25129:12;25122:19;;24745:402;;;:::o;25153:366::-;25295:3;25316:67;25380:2;25375:3;25316:67;:::i;:::-;25309:74;;25392:93;25481:3;25392:93;:::i;:::-;25510:2;25505:3;25501:12;25494:19;;25153:366;;;:::o;25525:118::-;25612:24;25630:5;25612:24;:::i;:::-;25607:3;25600:37;25525:118;;:::o;25649:695::-;25927:3;25949:92;26037:3;26028:6;25949:92;:::i;:::-;25942:99;;26058:95;26149:3;26140:6;26058:95;:::i;:::-;26051:102;;26170:148;26314:3;26170:148;:::i;:::-;26163:155;;26335:3;26328:10;;25649:695;;;;;:::o;26350:381::-;26535:3;26557:148;26701:3;26557:148;:::i;:::-;26550:155;;26722:3;26715:10;;26350:381;;;:::o;26737:379::-;26921:3;26943:147;27086:3;26943:147;:::i;:::-;26936:154;;27107:3;27100:10;;26737:379;;;:::o;27122:381::-;27307:3;27329:148;27473:3;27329:148;:::i;:::-;27322:155;;27494:3;27487:10;;27122:381;;;:::o;27509:222::-;27602:4;27640:2;27629:9;27625:18;27617:26;;27653:71;27721:1;27710:9;27706:17;27697:6;27653:71;:::i;:::-;27509:222;;;;:::o;27737:640::-;27932:4;27970:3;27959:9;27955:19;27947:27;;27984:71;28052:1;28041:9;28037:17;28028:6;27984:71;:::i;:::-;28065:72;28133:2;28122:9;28118:18;28109:6;28065:72;:::i;:::-;28147;28215:2;28204:9;28200:18;28191:6;28147:72;:::i;:::-;28266:9;28260:4;28256:20;28251:2;28240:9;28236:18;28229:48;28294:76;28365:4;28356:6;28294:76;:::i;:::-;28286:84;;27737:640;;;;;;;:::o;28383:210::-;28470:4;28508:2;28497:9;28493:18;28485:26;;28521:65;28583:1;28572:9;28568:17;28559:6;28521:65;:::i;:::-;28383:210;;;;:::o;28599:218::-;28690:4;28728:2;28717:9;28713:18;28705:26;;28741:69;28807:1;28796:9;28792:17;28783:6;28741:69;:::i;:::-;28599:218;;;;:::o;28823:313::-;28936:4;28974:2;28963:9;28959:18;28951:26;;29023:9;29017:4;29013:20;29009:1;28998:9;28994:17;28987:47;29051:78;29124:4;29115:6;29051:78;:::i;:::-;29043:86;;28823:313;;;;:::o;29142:419::-;29308:4;29346:2;29335:9;29331:18;29323:26;;29395:9;29389:4;29385:20;29381:1;29370:9;29366:17;29359:47;29423:131;29549:4;29423:131;:::i;:::-;29415:139;;29142:419;;;:::o;29567:::-;29733:4;29771:2;29760:9;29756:18;29748:26;;29820:9;29814:4;29810:20;29806:1;29795:9;29791:17;29784:47;29848:131;29974:4;29848:131;:::i;:::-;29840:139;;29567:419;;;:::o;29992:::-;30158:4;30196:2;30185:9;30181:18;30173:26;;30245:9;30239:4;30235:20;30231:1;30220:9;30216:17;30209:47;30273:131;30399:4;30273:131;:::i;:::-;30265:139;;29992:419;;;:::o;30417:::-;30583:4;30621:2;30610:9;30606:18;30598:26;;30670:9;30664:4;30660:20;30656:1;30645:9;30641:17;30634:47;30698:131;30824:4;30698:131;:::i;:::-;30690:139;;30417:419;;;:::o;30842:::-;31008:4;31046:2;31035:9;31031:18;31023:26;;31095:9;31089:4;31085:20;31081:1;31070:9;31066:17;31059:47;31123:131;31249:4;31123:131;:::i;:::-;31115:139;;30842:419;;;:::o;31267:::-;31433:4;31471:2;31460:9;31456:18;31448:26;;31520:9;31514:4;31510:20;31506:1;31495:9;31491:17;31484:47;31548:131;31674:4;31548:131;:::i;:::-;31540:139;;31267:419;;;:::o;31692:::-;31858:4;31896:2;31885:9;31881:18;31873:26;;31945:9;31939:4;31935:20;31931:1;31920:9;31916:17;31909:47;31973:131;32099:4;31973:131;:::i;:::-;31965:139;;31692:419;;;:::o;32117:::-;32283:4;32321:2;32310:9;32306:18;32298:26;;32370:9;32364:4;32360:20;32356:1;32345:9;32341:17;32334:47;32398:131;32524:4;32398:131;:::i;:::-;32390:139;;32117:419;;;:::o;32542:::-;32708:4;32746:2;32735:9;32731:18;32723:26;;32795:9;32789:4;32785:20;32781:1;32770:9;32766:17;32759:47;32823:131;32949:4;32823:131;:::i;:::-;32815:139;;32542:419;;;:::o;32967:::-;33133:4;33171:2;33160:9;33156:18;33148:26;;33220:9;33214:4;33210:20;33206:1;33195:9;33191:17;33184:47;33248:131;33374:4;33248:131;:::i;:::-;33240:139;;32967:419;;;:::o;33392:::-;33558:4;33596:2;33585:9;33581:18;33573:26;;33645:9;33639:4;33635:20;33631:1;33620:9;33616:17;33609:47;33673:131;33799:4;33673:131;:::i;:::-;33665:139;;33392:419;;;:::o;33817:::-;33983:4;34021:2;34010:9;34006:18;33998:26;;34070:9;34064:4;34060:20;34056:1;34045:9;34041:17;34034:47;34098:131;34224:4;34098:131;:::i;:::-;34090:139;;33817:419;;;:::o;34242:::-;34408:4;34446:2;34435:9;34431:18;34423:26;;34495:9;34489:4;34485:20;34481:1;34470:9;34466:17;34459:47;34523:131;34649:4;34523:131;:::i;:::-;34515:139;;34242:419;;;:::o;34667:::-;34833:4;34871:2;34860:9;34856:18;34848:26;;34920:9;34914:4;34910:20;34906:1;34895:9;34891:17;34884:47;34948:131;35074:4;34948:131;:::i;:::-;34940:139;;34667:419;;;:::o;35092:::-;35258:4;35296:2;35285:9;35281:18;35273:26;;35345:9;35339:4;35335:20;35331:1;35320:9;35316:17;35309:47;35373:131;35499:4;35373:131;:::i;:::-;35365:139;;35092:419;;;:::o;35517:::-;35683:4;35721:2;35710:9;35706:18;35698:26;;35770:9;35764:4;35760:20;35756:1;35745:9;35741:17;35734:47;35798:131;35924:4;35798:131;:::i;:::-;35790:139;;35517:419;;;:::o;35942:::-;36108:4;36146:2;36135:9;36131:18;36123:26;;36195:9;36189:4;36185:20;36181:1;36170:9;36166:17;36159:47;36223:131;36349:4;36223:131;:::i;:::-;36215:139;;35942:419;;;:::o;36367:::-;36533:4;36571:2;36560:9;36556:18;36548:26;;36620:9;36614:4;36610:20;36606:1;36595:9;36591:17;36584:47;36648:131;36774:4;36648:131;:::i;:::-;36640:139;;36367:419;;;:::o;36792:::-;36958:4;36996:2;36985:9;36981:18;36973:26;;37045:9;37039:4;37035:20;37031:1;37020:9;37016:17;37009:47;37073:131;37199:4;37073:131;:::i;:::-;37065:139;;36792:419;;;:::o;37217:::-;37383:4;37421:2;37410:9;37406:18;37398:26;;37470:9;37464:4;37460:20;37456:1;37445:9;37441:17;37434:47;37498:131;37624:4;37498:131;:::i;:::-;37490:139;;37217:419;;;:::o;37642:::-;37808:4;37846:2;37835:9;37831:18;37823:26;;37895:9;37889:4;37885:20;37881:1;37870:9;37866:17;37859:47;37923:131;38049:4;37923:131;:::i;:::-;37915:139;;37642:419;;;:::o;38067:::-;38233:4;38271:2;38260:9;38256:18;38248:26;;38320:9;38314:4;38310:20;38306:1;38295:9;38291:17;38284:47;38348:131;38474:4;38348:131;:::i;:::-;38340:139;;38067:419;;;:::o;38492:::-;38658:4;38696:2;38685:9;38681:18;38673:26;;38745:9;38739:4;38735:20;38731:1;38720:9;38716:17;38709:47;38773:131;38899:4;38773:131;:::i;:::-;38765:139;;38492:419;;;:::o;38917:::-;39083:4;39121:2;39110:9;39106:18;39098:26;;39170:9;39164:4;39160:20;39156:1;39145:9;39141:17;39134:47;39198:131;39324:4;39198:131;:::i;:::-;39190:139;;38917:419;;;:::o;39342:::-;39508:4;39546:2;39535:9;39531:18;39523:26;;39595:9;39589:4;39585:20;39581:1;39570:9;39566:17;39559:47;39623:131;39749:4;39623:131;:::i;:::-;39615:139;;39342:419;;;:::o;39767:::-;39933:4;39971:2;39960:9;39956:18;39948:26;;40020:9;40014:4;40010:20;40006:1;39995:9;39991:17;39984:47;40048:131;40174:4;40048:131;:::i;:::-;40040:139;;39767:419;;;:::o;40192:222::-;40285:4;40323:2;40312:9;40308:18;40300:26;;40336:71;40404:1;40393:9;40389:17;40380:6;40336:71;:::i;:::-;40192:222;;;;:::o;40420:129::-;40454:6;40481:20;;:::i;:::-;40471:30;;40510:33;40538:4;40530:6;40510:33;:::i;:::-;40420:129;;;:::o;40555:75::-;40588:6;40621:2;40615:9;40605:19;;40555:75;:::o;40636:311::-;40713:4;40803:18;40795:6;40792:30;40789:56;;;40825:18;;:::i;:::-;40789:56;40875:4;40867:6;40863:17;40855:25;;40935:4;40929;40925:15;40917:23;;40636:311;;;:::o;40953:307::-;41014:4;41104:18;41096:6;41093:30;41090:56;;;41126:18;;:::i;:::-;41090:56;41164:29;41186:6;41164:29;:::i;:::-;41156:37;;41248:4;41242;41238:15;41230:23;;40953:307;;;:::o;41266:308::-;41328:4;41418:18;41410:6;41407:30;41404:56;;;41440:18;;:::i;:::-;41404:56;41478:29;41500:6;41478:29;:::i;:::-;41470:37;;41562:4;41556;41552:15;41544:23;;41266:308;;;:::o;41580:141::-;41629:4;41652:3;41644:11;;41675:3;41672:1;41665:14;41709:4;41706:1;41696:18;41688:26;;41580:141;;;:::o;41727:98::-;41778:6;41812:5;41806:12;41796:22;;41727:98;;;:::o;41831:99::-;41883:6;41917:5;41911:12;41901:22;;41831:99;;;:::o;41936:168::-;42019:11;42053:6;42048:3;42041:19;42093:4;42088:3;42084:14;42069:29;;41936:168;;;;:::o;42110:147::-;42211:11;42248:3;42233:18;;42110:147;;;;:::o;42263:169::-;42347:11;42381:6;42376:3;42369:19;42421:4;42416:3;42412:14;42397:29;;42263:169;;;;:::o;42438:148::-;42540:11;42577:3;42562:18;;42438:148;;;;:::o;42592:305::-;42632:3;42651:20;42669:1;42651:20;:::i;:::-;42646:25;;42685:20;42703:1;42685:20;:::i;:::-;42680:25;;42839:1;42771:66;42767:74;42764:1;42761:81;42758:107;;;42845:18;;:::i;:::-;42758:107;42889:1;42886;42882:9;42875:16;;42592:305;;;;:::o;42903:185::-;42943:1;42960:20;42978:1;42960:20;:::i;:::-;42955:25;;42994:20;43012:1;42994:20;:::i;:::-;42989:25;;43033:1;43023:35;;43038:18;;:::i;:::-;43023:35;43080:1;43077;43073:9;43068:14;;42903:185;;;;:::o;43094:348::-;43134:7;43157:20;43175:1;43157:20;:::i;:::-;43152:25;;43191:20;43209:1;43191:20;:::i;:::-;43186:25;;43379:1;43311:66;43307:74;43304:1;43301:81;43296:1;43289:9;43282:17;43278:105;43275:131;;;43386:18;;:::i;:::-;43275:131;43434:1;43431;43427:9;43416:20;;43094:348;;;;:::o;43448:191::-;43488:4;43508:20;43526:1;43508:20;:::i;:::-;43503:25;;43542:20;43560:1;43542:20;:::i;:::-;43537:25;;43581:1;43578;43575:8;43572:34;;;43586:18;;:::i;:::-;43572:34;43631:1;43628;43624:9;43616:17;;43448:191;;;;:::o;43645:96::-;43682:7;43711:24;43729:5;43711:24;:::i;:::-;43700:35;;43645:96;;;:::o;43747:90::-;43781:7;43824:5;43817:13;43810:21;43799:32;;43747:90;;;:::o;43843:149::-;43879:7;43919:66;43912:5;43908:78;43897:89;;43843:149;;;:::o;43998:126::-;44035:7;44075:42;44068:5;44064:54;44053:65;;43998:126;;;:::o;44130:77::-;44167:7;44196:5;44185:16;;44130:77;;;:::o;44213:154::-;44297:6;44292:3;44287;44274:30;44359:1;44350:6;44345:3;44341:16;44334:27;44213:154;;;:::o;44373:307::-;44441:1;44451:113;44465:6;44462:1;44459:13;44451:113;;;44550:1;44545:3;44541:11;44535:18;44531:1;44526:3;44522:11;44515:39;44487:2;44484:1;44480:10;44475:15;;44451:113;;;44582:6;44579:1;44576:13;44573:101;;;44662:1;44653:6;44648:3;44644:16;44637:27;44573:101;44422:258;44373:307;;;:::o;44686:320::-;44730:6;44767:1;44761:4;44757:12;44747:22;;44814:1;44808:4;44804:12;44835:18;44825:81;;44891:4;44883:6;44879:17;44869:27;;44825:81;44953:2;44945:6;44942:14;44922:18;44919:38;44916:84;;;44972:18;;:::i;:::-;44916:84;44737:269;44686:320;;;:::o;45012:281::-;45095:27;45117:4;45095:27;:::i;:::-;45087:6;45083:40;45225:6;45213:10;45210:22;45189:18;45177:10;45174:34;45171:62;45168:88;;;45236:18;;:::i;:::-;45168:88;45276:10;45272:2;45265:22;45055:238;45012:281;;:::o;45299:233::-;45338:3;45361:24;45379:5;45361:24;:::i;:::-;45352:33;;45407:66;45400:5;45397:77;45394:103;;;45477:18;;:::i;:::-;45394:103;45524:1;45517:5;45513:13;45506:20;;45299:233;;;:::o;45538:176::-;45570:1;45587:20;45605:1;45587:20;:::i;:::-;45582:25;;45621:20;45639:1;45621:20;:::i;:::-;45616:25;;45660:1;45650:35;;45665:18;;:::i;:::-;45650:35;45706:1;45703;45699:9;45694:14;;45538:176;;;;:::o;45720:180::-;45768:77;45765:1;45758:88;45865:4;45862:1;45855:15;45889:4;45886:1;45879:15;45906:180;45954:77;45951:1;45944:88;46051:4;46048:1;46041:15;46075:4;46072:1;46065:15;46092:180;46140:77;46137:1;46130:88;46237:4;46234:1;46227:15;46261:4;46258:1;46251:15;46278:180;46326:77;46323:1;46316:88;46423:4;46420:1;46413:15;46447:4;46444:1;46437:15;46464:180;46512:77;46509:1;46502:88;46609:4;46606:1;46599:15;46633:4;46630:1;46623:15;46650:117;46759:1;46756;46749:12;46773:117;46882:1;46879;46872:12;46896:117;47005:1;47002;46995:12;47019:117;47128:1;47125;47118:12;47142:117;47251:1;47248;47241:12;47265:117;47374:1;47371;47364:12;47388:102;47429:6;47480:2;47476:7;47471:2;47464:5;47460:14;47456:28;47446:38;;47388:102;;;:::o;47496:180::-;47636:32;47632:1;47624:6;47620:14;47613:56;47496:180;:::o;47682:222::-;47822:34;47818:1;47810:6;47806:14;47799:58;47891:5;47886:2;47878:6;47874:15;47867:30;47682:222;:::o;47910:237::-;48050:34;48046:1;48038:6;48034:14;48027:58;48119:20;48114:2;48106:6;48102:15;48095:45;47910:237;:::o;48153:225::-;48293:34;48289:1;48281:6;48277:14;48270:58;48362:8;48357:2;48349:6;48345:15;48338:33;48153:225;:::o;48384:178::-;48524:30;48520:1;48512:6;48508:14;48501:54;48384:178;:::o;48568:174::-;48708:26;48704:1;48696:6;48692:14;48685:50;48568:174;:::o;48748:223::-;48888:34;48884:1;48876:6;48872:14;48865:58;48957:6;48952:2;48944:6;48940:15;48933:31;48748:223;:::o;48977:175::-;49117:27;49113:1;49105:6;49101:14;49094:51;48977:175;:::o;49158:179::-;49298:31;49294:1;49286:6;49282:14;49275:55;49158:179;:::o;49343:231::-;49483:34;49479:1;49471:6;49467:14;49460:58;49552:14;49547:2;49539:6;49535:15;49528:39;49343:231;:::o;49580:223::-;49720:34;49716:1;49708:6;49704:14;49697:58;49789:6;49784:2;49776:6;49772:15;49765:31;49580:223;:::o;49809:::-;49949:34;49945:1;49937:6;49933:14;49926:58;50018:6;50013:2;50005:6;50001:15;49994:31;49809:223;:::o;50038:243::-;50178:34;50174:1;50166:6;50162:14;50155:58;50247:26;50242:2;50234:6;50230:15;50223:51;50038:243;:::o;50287:229::-;50427:34;50423:1;50415:6;50411:14;50404:58;50496:12;50491:2;50483:6;50479:15;50472:37;50287:229;:::o;50522:228::-;50662:34;50658:1;50650:6;50646:14;50639:58;50731:11;50726:2;50718:6;50714:15;50707:36;50522:228;:::o;50756:167::-;50896:19;50892:1;50884:6;50880:14;50873:43;50756:167;:::o;50929:182::-;51069:34;51065:1;51057:6;51053:14;51046:58;50929:182;:::o;51117:231::-;51257:34;51253:1;51245:6;51241:14;51234:58;51326:14;51321:2;51313:6;51309:15;51302:39;51117:231;:::o;51354:155::-;51494:7;51490:1;51482:6;51478:14;51471:31;51354:155;:::o;51515:182::-;51655:34;51651:1;51643:6;51639:14;51632:58;51515:182;:::o;51703:174::-;51843:26;51839:1;51831:6;51827:14;51820:50;51703:174;:::o;51883:228::-;52023:34;52019:1;52011:6;52007:14;52000:58;52092:11;52087:2;52079:6;52075:15;52068:36;51883:228;:::o;52117:234::-;52257:34;52253:1;52245:6;52241:14;52234:58;52326:17;52321:2;52313:6;52309:15;52302:42;52117:234;:::o;52357:220::-;52497:34;52493:1;52485:6;52481:14;52474:58;52566:3;52561:2;52553:6;52549:15;52542:28;52357:220;:::o;52583:316::-;52723:34;52719:1;52711:6;52707:14;52700:58;52796:34;52791:2;52783:6;52779:15;52772:59;52869:18;52864:2;52856:6;52852:15;52845:43;52583:316;:::o;52909:118::-;;:::o;53037:248::-;53181:34;53177:1;53169:6;53165:14;53158:58;53254:19;53249:2;53241:6;53237:15;53230:44;53037:248;:::o;53295:241::-;53439:34;53435:1;53427:6;53423:14;53416:58;53512:12;53507:2;53499:6;53495:15;53488:37;53295:241;:::o;53546:332::-;53690:34;53686:1;53678:6;53674:14;53667:58;53767:34;53762:2;53754:6;53750:15;53743:59;53844:18;53839:2;53831:6;53827:15;53820:43;53546:332;:::o;53892:185::-;54040:21;54036:1;54028:6;54024:14;54017:45;53892:185;:::o;54091:138::-;54172:24;54190:5;54172:24;:::i;:::-;54165:5;54162:35;54152:63;;54211:1;54208;54201:12;54152:63;54091:138;:::o;54243:132::-;54321:21;54336:5;54321:21;:::i;:::-;54314:5;54311:32;54301:60;;54357:1;54354;54347:12;54301:60;54243:132;:::o;54389:136::-;54469:23;54486:5;54469:23;:::i;:::-;54462:5;54459:34;54449:62;;54507:1;54504;54497:12;54449:62;54389:136;:::o;54539:138::-;54620:24;54638:5;54620:24;:::i;:::-;54613:5;54610:35;54600:63;;54659:1;54656;54649:12;54600:63;54539:138;:::o

Swarm Source

ipfs://19135a2e82bdb62b198a70354af9f3a7544bd3ca36c5b1ff7d4063ed6881b8d8
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.