ETH Price: $2,529.25 (+0.24%)

Contract

0x7c2D9A82573881dd20c38547BEa415936d048B9E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...179527742023-08-20 1:46:11376 days ago1692495971IN
Whitetail: WWHC Token
0 ETH0.0005338811.47085352
Set Base URI169284302023-03-28 21:14:23521 days ago1680038063IN
Whitetail: WWHC Token
0 ETH0.00120127.5359495
Set Approval For...165015372023-01-27 23:49:47581 days ago1674863387IN
Whitetail: WWHC Token
0 ETH0.0007164915.39428217
Reveal161505482022-12-09 23:53:11630 days ago1670629991IN
Whitetail: WWHC Token
0 ETH0.0006750114.64727893
Reveal161497762022-12-09 21:17:47630 days ago1670620667IN
Whitetail: WWHC Token
0 ETH0.0021778533.00529395
Reveal161496402022-12-09 20:50:35630 days ago1670619035IN
Whitetail: WWHC Token
0 ETH0.0018809742.86830776
Set Approval For...160302952022-11-23 4:24:47646 days ago1669177487IN
Whitetail: WWHC Token
0 ETH0.0006252213.4332637
Pause Mint159672542022-11-14 9:02:59655 days ago1668416579IN
Whitetail: WWHC Token
0 ETH0.0004003613.88948055
Set Approval For...156005202022-09-24 3:26:35706 days ago1663989995IN
Whitetail: WWHC Token
0 ETH0.000258185.54723022
Set Approval For...155299912022-09-14 0:33:48717 days ago1663115628IN
Whitetail: WWHC Token
0 ETH0.0006182813.28424612
Transfer From153555102022-08-17 0:16:29745 days ago1660695389IN
Whitetail: WWHC Token
0 ETH0.0003436.21539351
Withdraw152080182022-07-24 22:32:10768 days ago1658701930IN
Whitetail: WWHC Token
0 ETH0.000178327.57906921
Withdraw152080182022-07-24 22:32:10768 days ago1658701930IN
Whitetail: WWHC Token
0 ETH0.000727667.57906921
Set Approval For...151193032022-07-11 4:51:25781 days ago1657515085IN
Whitetail: WWHC Token
0 ETH0.0006230513.38663899
Mint149475252022-06-12 1:44:41810 days ago1654998281IN
Whitetail: WWHC Token
0.15 ETH0.0020552726.14914754
Set Approval For...148811182022-05-31 21:46:59822 days ago1654033619IN
Whitetail: WWHC Token
0 ETH0.0026998557.9031646
Set Approval For...146772672022-04-29 5:12:11854 days ago1651209131IN
Whitetail: WWHC Token
0 ETH0.002266548.60933594
Withdraw145974612022-04-16 16:34:59867 days ago1650126899IN
Whitetail: WWHC Token
0 ETH0.0087780572.53991966
Set Approval For...145607162022-04-10 22:49:31873 days ago1649630971IN
Whitetail: WWHC Token
0 ETH0.0019302141.39700957
Set Approval For...145222362022-04-04 22:38:17879 days ago1649111897IN
Whitetail: WWHC Token
0 ETH0.0026743357.35594439
Set Approval For...144910682022-03-31 1:37:00883 days ago1648690620IN
Whitetail: WWHC Token
0 ETH0.0013718829.42258519
Transfer From144895972022-03-30 20:10:05884 days ago1648671005IN
Whitetail: WWHC Token
0 ETH0.0036378365.90393745
Set Approval For...144141792022-03-19 2:33:18895 days ago1647657198IN
Whitetail: WWHC Token
0 ETH0.003411473.16379266
Set Approval For...144083752022-03-18 4:58:36896 days ago1647579516IN
Whitetail: WWHC Token
0 ETH0.0020123743.15896039
Mint143856692022-03-14 15:57:57900 days ago1647273477IN
Whitetail: WWHC Token
0.15 ETH0.0032315341.11470117
View all transactions

Latest 10 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
152080182022-07-24 22:32:10768 days ago1658701930
Whitetail: WWHC Token
0.00225 ETH
152080182022-07-24 22:32:10768 days ago1658701930
Whitetail: WWHC Token
0.015 ETH
152080182022-07-24 22:32:10768 days ago1658701930
Whitetail: WWHC Token
0.04425 ETH
152080182022-07-24 22:32:10768 days ago1658701930
Whitetail: WWHC Token
0.04425 ETH
152080182022-07-24 22:32:10768 days ago1658701930
Whitetail: WWHC Token
0.04425 ETH
145974612022-04-16 16:34:59867 days ago1650126899
Whitetail: WWHC Token
0.087 ETH
145974612022-04-16 16:34:59867 days ago1650126899
Whitetail: WWHC Token
0.58 ETH
145974612022-04-16 16:34:59867 days ago1650126899
Whitetail: WWHC Token
1.711 ETH
145974612022-04-16 16:34:59867 days ago1650126899
Whitetail: WWHC Token
1.711 ETH
145974612022-04-16 16:34:59867 days ago1650126899
Whitetail: WWHC Token
1.711 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WWHC

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-26
*/

//SPDX-License-Identifier: MIT
pragma solidity 0.8.11;

error NotOwner();

abstract contract LilOwnable {
    address internal _owner;

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

    constructor() {
        _owner = msg.sender;
    }

    function owner() external view returns (address) {
        return _owner;
    }

    function transferOwnership(address _newOwner) external {
        if (msg.sender != _owner) revert NotOwner();

        _owner = _newOwner;
    }

    function renounceOwnership() public {
        if (msg.sender != _owner) revert NotOwner();

        _owner = address(0);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        pure
        virtual
        returns (bool)
    {
        return interfaceId == 0x7f5828d0; // ERC165 Interface ID for ERC173
    }
}


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

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


/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
/// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC.
abstract contract ERC721 {
    /*///////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*///////////////////////////////////////////////////////////////
                          METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*///////////////////////////////////////////////////////////////
                            ERC721 STORAGE                        
    //////////////////////////////////////////////////////////////*/

    mapping(address => uint256) public balanceOf;

    mapping(uint256 => address) public ownerOf;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*///////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            balanceOf[from]--;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            balanceOf[to]++;
        }

        ownerOf[id] = to;

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

    function _burn(uint256 id) internal virtual {
        address owner = ownerOf[id];

        require(ownerOf[id] != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            balanceOf[owner]--;
        }

        delete ownerOf[id];

        delete getApproved[id];

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

    /*///////////////////////////////////////////////////////////////
                       INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
interface ERC721TokenReceiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 id,
        bytes calldata data
    ) external returns (bytes4);
}


/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*///////////////////////////////////////////////////////////////
                                  EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*///////////////////////////////////////////////////////////////
                             METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*///////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*///////////////////////////////////////////////////////////////
                             EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    bytes32 public constant PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*///////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*///////////////////////////////////////////////////////////////
                              ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*///////////////////////////////////////////////////////////////
                              EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            bytes32 digest = keccak256(
                abi.encodePacked(
                    "\x19\x01",
                    DOMAIN_SEPARATOR(),
                    keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
                )
            );

            address recoveredAddress = ecrecover(digest, v, r, s);

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

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

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}


/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol)
/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
library SafeTransferLib {
    /*///////////////////////////////////////////////////////////////
                            ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferETH(address to, uint256 amount) internal {
        bool callStatus;

        assembly {
            // Transfer the ETH and store if it succeeded or not.
            callStatus := call(gas(), to, amount, 0, 0, 0, 0)
        }

        require(callStatus, "ETH_TRANSFER_FAILED");
    }

    /*///////////////////////////////////////////////////////////////
                           ERC20 OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferFrom(
        ERC20 token,
        address from,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument.
            mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 100 because the calldata length is 4 + 32 * 3.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED");
    }

    function safeTransfer(
        ERC20 token,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 68 because the calldata length is 4 + 32 * 2.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED");
    }

    function safeApprove(
        ERC20 token,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 68 because the calldata length is 4 + 32 * 2.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED");
    }

    /*///////////////////////////////////////////////////////////////
                         INTERNAL HELPER LOGIC
    //////////////////////////////////////////////////////////////*/

    function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) {
        assembly {
            // Get how many bytes the call returned.
            let returnDataSize := returndatasize()

            // If the call reverted:
            if iszero(callStatus) {
                // Copy the revert message into memory.
                returndatacopy(0, 0, returnDataSize)

                // Revert with the same message.
                revert(0, returnDataSize)
            }

            switch returnDataSize
            case 32 {
                // Copy the return data into memory.
                returndatacopy(0, 0, returnDataSize)

                // Set success to whether it returned true.
                success := iszero(iszero(mload(0)))
            }
            case 0 {
                // There was no return data.
                success := 1
            }
            default {
                // It returned some malformed input.
                success := 0
            }
        }
    }
}


/// @notice Arithmetic library with operations for fixed-point numbers.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)
library FixedPointMathLib {
    /*///////////////////////////////////////////////////////////////
                            COMMON BASE UNITS
    //////////////////////////////////////////////////////////////*/

    uint256 internal constant YAD = 1e8;
    uint256 internal constant WAD = 1e18;
    uint256 internal constant RAY = 1e27;
    uint256 internal constant RAD = 1e45;

    /*///////////////////////////////////////////////////////////////
                         FIXED POINT OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function fmul(
        uint256 x,
        uint256 y,
        uint256 baseUnit
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * y in z for now.
            z := mul(x, y)

            // Equivalent to require(x == 0 || (x * y) / x == y)
            if iszero(or(iszero(x), eq(div(z, x), y))) {
                revert(0, 0)
            }

            // If baseUnit is zero this will return zero instead of reverting.
            z := div(z, baseUnit)
        }
    }

    function fdiv(
        uint256 x,
        uint256 y,
        uint256 baseUnit
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * baseUnit in z for now.
            z := mul(x, baseUnit)

            // Equivalent to require(y != 0 && (x == 0 || (x * baseUnit) / x == baseUnit))
            if iszero(and(iszero(iszero(y)), or(iszero(x), eq(div(z, x), baseUnit)))) {
                revert(0, 0)
            }

            // We ensure y is not zero above, so there is never division by zero here.
            z := div(z, y)
        }
    }

    function fpow(
        uint256 x,
        uint256 n,
        uint256 baseUnit
    ) internal pure returns (uint256 z) {
        assembly {
            switch x
            case 0 {
                switch n
                case 0 {
                    // 0 ** 0 = 1
                    z := baseUnit
                }
                default {
                    // 0 ** n = 0
                    z := 0
                }
            }
            default {
                switch mod(n, 2)
                case 0 {
                    // If n is even, store baseUnit in z for now.
                    z := baseUnit
                }
                default {
                    // If n is odd, store x in z for now.
                    z := x
                }

                // Shifting right by 1 is like dividing by 2.
                let half := shr(1, baseUnit)

                for {
                    // Shift n right by 1 before looping to halve it.
                    n := shr(1, n)
                } n {
                    // Shift n right by 1 each iteration to halve it.
                    n := shr(1, n)
                } {
                    // Revert immediately if x ** 2 would overflow.
                    // Equivalent to iszero(eq(div(xx, x), x)) here.
                    if shr(128, x) {
                        revert(0, 0)
                    }

                    // Store x squared.
                    let xx := mul(x, x)

                    // Round to the nearest number.
                    let xxRound := add(xx, half)

                    // Revert if xx + half overflowed.
                    if lt(xxRound, xx) {
                        revert(0, 0)
                    }

                    // Set x to scaled xxRound.
                    x := div(xxRound, baseUnit)

                    // If n is even:
                    if mod(n, 2) {
                        // Compute z * x.
                        let zx := mul(z, x)

                        // If z * x overflowed:
                        if iszero(eq(div(zx, x), z)) {
                            // Revert if x is non-zero.
                            if iszero(iszero(x)) {
                                revert(0, 0)
                            }
                        }

                        // Round to the nearest number.
                        let zxRound := add(zx, half)

                        // Revert if zx + half overflowed.
                        if lt(zxRound, zx) {
                            revert(0, 0)
                        }

                        // Return properly scaled zxRound.
                        z := div(zxRound, baseUnit)
                    }
                }
            }
        }
    }

    /*///////////////////////////////////////////////////////////////
                        GENERAL NUMBER UTILITIES
    //////////////////////////////////////////////////////////////*/

    function sqrt(uint256 x) internal pure returns (uint256 z) {
        assembly {
            // Start off with z at 1.
            z := 1

            // Used below to help find a nearby power of 2.
            let y := x

            // Find the lowest power of 2 that is at least sqrt(x).
            if iszero(lt(y, 0x100000000000000000000000000000000)) {
                y := shr(128, y) // Like dividing by 2 ** 128.
                z := shl(64, z)
            }
            if iszero(lt(y, 0x10000000000000000)) {
                y := shr(64, y) // Like dividing by 2 ** 64.
                z := shl(32, z)
            }
            if iszero(lt(y, 0x100000000)) {
                y := shr(32, y) // Like dividing by 2 ** 32.
                z := shl(16, z)
            }
            if iszero(lt(y, 0x10000)) {
                y := shr(16, y) // Like dividing by 2 ** 16.
                z := shl(8, z)
            }
            if iszero(lt(y, 0x100)) {
                y := shr(8, y) // Like dividing by 2 ** 8.
                z := shl(4, z)
            }
            if iszero(lt(y, 0x10)) {
                y := shr(4, y) // Like dividing by 2 ** 4.
                z := shl(2, z)
            }
            if iszero(lt(y, 0x8)) {
                // Equivalent to 2 ** z.
                z := shl(1, z)
            }

            // Shifting right by 1 is like dividing by 2.
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))

            // Compute a rounded down version of z.
            let zRoundDown := div(x, z)

            // If zRoundDown is smaller, use it.
            if lt(zRoundDown, z) {
                z := zRoundDown
            }
        }
    }
}

/*

__        ___     _ _       _        _ _ 
\ \      / / |__ (_) |_ ___| |_ __ _(_) |
 \ \ /\ / /| '_ \| | __/ _ \ __/ _` | | |
  \ V  V / | | | | | ||  __/ || (_| | | |
   \_/\_/  |_| |_|_|\__\___|\__\__,_|_|_|


*/

error DoesNotExist();
error NoTokensLeft();
error NotEnoughETH();
error TooManyMintAtOnce();
error NotOnWhitelist();
error WhitelistMintNotStarted();
error MintNotStarted();
error EmptyBalance();
error NoReserveTokensLeft();

/// @title  WWHC contract 
/// @author @CrossChainLabs (https://canthedevsdosomething.com) 
contract WWHC is LilOwnable, ERC721 {
    using Strings for uint256;

    uint256 public constant TOTAL_SUPPLY = 5555;
    uint256 public constant PRICE_PER_WHITELIST_MINT = 0.1 ether;
    uint256 public constant PRICE_PER_PUBLIC_MINT = 0.15 ether;
    uint256 public maxWhitelistMintAmount = 10;
    uint256 public maxPublicMintAmount = 20;

    bool public whitelistMintStarted = false;
    bool public mintStarted = false;
    bool public revealed = false;

    uint256 public totalMinted;

    bytes32 private _merkleRoot;

    string public baseURI;
    string public nonRevealedURI;

    address[5] private _royaltyAddresses;

    mapping(address => uint256) private _royaltyShares;

    modifier onlyOwner() {
        require(msg.sender == _owner, "Ownable: caller is not the owner");
        _;
    }
    
    constructor(
        string memory _nonRevealedURI,
        bytes32 _initMerkleRoot,
        address[5] memory _contributorAddresses
    ) payable ERC721("Whitetail", "WWHC") {
        nonRevealedURI = _nonRevealedURI;
        _merkleRoot = _initMerkleRoot;

        _royaltyAddresses[0] = _contributorAddresses[0]; 
        _royaltyAddresses[1] = _contributorAddresses[1];
        _royaltyAddresses[2] = _contributorAddresses[2];
        _royaltyAddresses[3] = _contributorAddresses[3]; 
        _royaltyAddresses[4] = _contributorAddresses[4]; 

        _royaltyShares[_royaltyAddresses[0]] = 295;
        _royaltyShares[_royaltyAddresses[1]] = 295;
        _royaltyShares[_royaltyAddresses[2]] = 295;
        _royaltyShares[_royaltyAddresses[3]] = 100;
        _royaltyShares[_royaltyAddresses[4]] = 15;
        
        for (uint256 i=0; i < 100; i++) {
            _mint(msg.sender, totalMinted + 1);
            totalMinted++;
        }
    }

    /// @dev    Add a hashed address to the merkle tree as a leaf
    /// @param  account Leaf address for MerkleTree
    /// @return bytes32 hashed version of the merkle leaf address
    function _leaf(address account) private pure returns (bytes32) {
        return keccak256(abi.encodePacked(account));
    }

    /// @dev    Verify the whitelist using the merkle tree
    /// @param  leaf Hashed address leaf from _leaf() to search for
    /// @param  proof Submitted root proof from MerkleTree
    /// @return bool True if address is allowed to mint
    function verifyWhitelist(bytes32 leaf, bytes32[] memory proof) private view returns (bool) {
        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash < proofElement) {
                computedHash = keccak256(
                    abi.encodePacked(computedHash, proofElement)
                );
            } else {
                computedHash = keccak256(
                    abi.encodePacked(proofElement, computedHash)
                );
            }
        }

        return computedHash == _merkleRoot;
    }

    function mint(uint16 amount) external payable {
        if (totalMinted + amount > TOTAL_SUPPLY) revert NoTokensLeft();
        if (!mintStarted) revert MintNotStarted();
        if (msg.value < amount * PRICE_PER_PUBLIC_MINT) revert NotEnoughETH();
        if (amount > maxPublicMintAmount) revert TooManyMintAtOnce();

        unchecked {
            for (uint16 index = 0; index < amount; index++) {
                _mint(msg.sender, totalMinted + 1);
                totalMinted++;
            }
        }
    }

    function whitelistMint(uint16 amount, bytes32[] memory _proof) external payable {
        if (totalMinted + amount > TOTAL_SUPPLY) revert NoTokensLeft();
        if (!whitelistMintStarted) revert WhitelistMintNotStarted();
        if (msg.value < amount * PRICE_PER_WHITELIST_MINT) revert NotEnoughETH();
        if (amount > maxWhitelistMintAmount) revert TooManyMintAtOnce();
        if (verifyWhitelist(_leaf(msg.sender), _proof) == false) revert NotOnWhitelist();
        
        unchecked {
            for (uint16 index = 0; index < amount; index++) {
                _mint(msg.sender, totalMinted + 1);
                totalMinted++;
            }
        }
    }

    function tokenURI(uint256 id) public view virtual override returns (string memory) {
        if (ownerOf[id] == address(0)) revert DoesNotExist();

        if (revealed == false) {
            return string(abi.encodePacked(nonRevealedURI, id.toString()));
        }
        return string(abi.encodePacked(baseURI, id.toString()));
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function startWhitelistMint() public onlyOwner {
        whitelistMintStarted = true;
    }
    
    function startMint() public onlyOwner {
        mintStarted = true;
    }

    function pauseMint() public onlyOwner {
        whitelistMintStarted = false;
        mintStarted = false;
    }

    function reveal(string memory _baseUri) public onlyOwner {
        setBaseURI(_baseUri);
        revealed = true;
    }

    function setMerkleRoot(bytes32 _merkleRootValue) external onlyOwner returns (bytes32) {
        _merkleRoot = _merkleRootValue;
        return _merkleRoot;
    }

    function withdraw() external onlyOwner {
        if (address(this).balance == 0) revert EmptyBalance();
        uint256 balance = address(this).balance;

        for (uint256 i = 0; i < _royaltyAddresses.length; i++) {
            payable(_royaltyAddresses[i]).transfer(
                balance * _royaltyShares[_royaltyAddresses[i]] / 1000
            );
        }
    }

    /// @dev Tells interfacing contracts what they can do with this one
    function supportsInterface(bytes4 interfaceId)
        public
        pure
        override(LilOwnable, ERC721)
        returns (bool)
    {
        return
            interfaceId == 0x7f5828d0 || // ERC165 Interface ID for ERC173
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f || // ERC165 Interface ID for ERC165
            interfaceId == 0x01ffc9a7; // ERC165 Interface ID for ERC721Metadata
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_nonRevealedURI","type":"string"},{"internalType":"bytes32","name":"_initMerkleRoot","type":"bytes32"},{"internalType":"address[5]","name":"_contributorAddresses","type":"address[5]"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"DoesNotExist","type":"error"},{"inputs":[],"name":"EmptyBalance","type":"error"},{"inputs":[],"name":"MintNotStarted","type":"error"},{"inputs":[],"name":"NoTokensLeft","type":"error"},{"inputs":[],"name":"NotEnoughETH","type":"error"},{"inputs":[],"name":"NotOnWhitelist","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"TooManyMintAtOnce","type":"error"},{"inputs":[],"name":"WhitelistMintNotStarted","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PRICE_PER_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PER_WHITELIST_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelistMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"amount","type":"uint16"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRootValue","type":"bytes32"}],"name":"setMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","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":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"amount","type":"uint16"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a60075560146008556000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff0219169083151502179055506000600960026101000a81548160ff021916908315150217905550604051620046e4380380620046e4833981810160405281019062000084919062000c74565b6040518060400160405280600981526020017f57686974657461696c00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5757484300000000000000000000000000000000000000000000000000000000815250336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816001908051906020019062000148929190620008be565b50806002908051906020019062000161929190620008be565b50505082600d90805190602001906200017c929190620008be565b5081600b81905550806000600581106200019b576200019a62000cef565b5b6020020151600e600060058110620001b857620001b762000cef565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001600581106200020e576200020d62000cef565b5b6020020151600e6001600581106200022b576200022a62000cef565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060026005811062000281576200028062000cef565b5b6020020151600e6002600581106200029e576200029d62000cef565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360058110620002f457620002f362000cef565b5b6020020151600e60036005811062000311576200031062000cef565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060046005811062000367576200036662000cef565b5b6020020151600e60046005811062000384576200038362000cef565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012760136000600e600060058110620003e257620003e162000cef565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061012760136000600e60016005811062000461576200046062000cef565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061012760136000600e600260058110620004e057620004df62000cef565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550606460136000600e6003600581106200055e576200055d62000cef565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60136000600e600460058110620005dc57620005db62000cef565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b60648110156200069b576200066b336001600a546200065f919062000d57565b620006a560201b60201c565b600a6000815480929190620006809062000db4565b91905055508080620006929062000db4565b9150506200063f565b5050505062000f5c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000718576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070f9062000e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49062000ed5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054620008cc9062000f26565b90600052602060002090601f016020900481019282620008f057600085556200093c565b82601f106200090b57805160ff19168380011785556200093c565b828001600101855582156200093c579182015b828111156200093b5782518255916020019190600101906200091e565b5b5090506200094b91906200094f565b5090565b5b808211156200096a57600081600090555060010162000950565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620009d7826200098c565b810181811067ffffffffffffffff82111715620009f957620009f86200099d565b5b80604052505050565b600062000a0e6200096e565b905062000a1c8282620009cc565b919050565b600067ffffffffffffffff82111562000a3f5762000a3e6200099d565b5b62000a4a826200098c565b9050602081019050919050565b60005b8381101562000a7757808201518184015260208101905062000a5a565b8381111562000a87576000848401525b50505050565b600062000aa462000a9e8462000a21565b62000a02565b90508281526020810184848401111562000ac35762000ac262000987565b5b62000ad084828562000a57565b509392505050565b600082601f83011262000af05762000aef62000982565b5b815162000b0284826020860162000a8d565b91505092915050565b6000819050919050565b62000b208162000b0b565b811462000b2c57600080fd5b50565b60008151905062000b408162000b15565b92915050565b600067ffffffffffffffff82111562000b645762000b636200099d565b5b602082029050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ba18262000b74565b9050919050565b62000bb38162000b94565b811462000bbf57600080fd5b50565b60008151905062000bd38162000ba8565b92915050565b600062000bf062000bea8462000b46565b62000a02565b9050806020840283018581111562000c0d5762000c0c62000b6f565b5b835b8181101562000c3a578062000c25888262000bc2565b84526020840193505060208101905062000c0f565b5050509392505050565b600082601f83011262000c5c5762000c5b62000982565b5b600562000c6b84828562000bd9565b91505092915050565b600080600060e0848603121562000c905762000c8f62000978565b5b600084015167ffffffffffffffff81111562000cb15762000cb06200097d565b5b62000cbf8682870162000ad8565b935050602062000cd28682870162000b2f565b925050604062000ce58682870162000c44565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d648262000d1e565b915062000d718362000d1e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000da95762000da862000d28565b5b828201905092915050565b600062000dc18262000d1e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000df75762000df662000d28565b5b600182019050919050565b600082825260208201905092915050565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b600062000e4b60118362000e02565b915062000e588262000e13565b602082019050919050565b6000602082019050818103600083015262000e7e8162000e3c565b9050919050565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b600062000ebd600e8362000e02565b915062000eca8262000e85565b602082019050919050565b6000602082019050818103600083015262000ef08162000eae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f3f57607f821691505b6020821081141562000f565762000f5562000ef7565b5b50919050565b6137788062000f6c6000396000f3fe60806040526004361061020f5760003560e01c80636c0360eb11610118578063a9722cf3116100a0578063c87b56dd1161006f578063c87b56dd14610727578063cd85cdb514610764578063e985e9c51461077b578063f2fde38b146107b8578063f96407fa146107e15761020f565b8063a9722cf3146106a0578063b182e818146106cb578063b70196d7146106e7578063b88d4fde146106fe5761020f565b80638da5cb5b116100e75780638da5cb5b146105cb578063902d55a5146105f657806395d89b4114610621578063a22cb4651461064c578063a2309ff8146106755761020f565b80636c0360eb1461050f57806370a082311461053a578063715018a6146105775780637cb647591461058e5761020f565b80632be095611161019b5780634c2612471161016a5780634c2612471461042a578063518302271461045357806355f804b31461047e5780636352211e146104a757806369eb16a3146104e45761020f565b80632be09561146103a85780632f0d3e20146103bf5780633ccfd60b146103ea57806342842e0e146104015761020f565b8063081812fc116101e2578063081812fc146102d2578063095ea7b31461030f5780631cfddb1f1461033857806323b872dd1461036357806323cf0a221461038c5761020f565b806301ffc9a71461021457806303d8acef14610251578063055ea1411461027c57806306fdde03146102a7575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906126ed565b61080c565b6040516102489190612735565b60405180910390f35b34801561025d57600080fd5b506102666108ce565b6040516102739190612769565b60405180910390f35b34801561028857600080fd5b506102916108d4565b60405161029e919061281d565b60405180910390f35b3480156102b357600080fd5b506102bc610962565b6040516102c9919061281d565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f4919061286b565b6109f0565b60405161030691906128d9565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190612920565b610a23565b005b34801561034457600080fd5b5061034d610c0c565b60405161035a9190612735565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612960565b610c1f565b005b6103a660048036038101906103a191906129ed565b61101f565b005b3480156103b457600080fd5b506103bd611188565b005b3480156103cb57600080fd5b506103d4611233565b6040516103e19190612769565b60405180910390f35b3480156103f657600080fd5b506103ff61123f565b005b34801561040d57600080fd5b5061042860048036038101906104239190612960565b611438565b005b34801561043657600080fd5b50610451600480360381019061044c9190612b4f565b611570565b005b34801561045f57600080fd5b50610468611625565b6040516104759190612735565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612b4f565b611638565b005b3480156104b357600080fd5b506104ce60048036038101906104c9919061286b565b6116e0565b6040516104db91906128d9565b60405180910390f35b3480156104f057600080fd5b506104f9611713565b6040516105069190612769565b60405180910390f35b34801561051b57600080fd5b5061052461171f565b604051610531919061281d565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190612b98565b6117ad565b60405161056e9190612769565b60405180910390f35b34801561058357600080fd5b5061058c6117c5565b005b34801561059a57600080fd5b506105b560048036038101906105b09190612bfb565b61188d565b6040516105c29190612c37565b60405180910390f35b3480156105d757600080fd5b506105e061192f565b6040516105ed91906128d9565b60405180910390f35b34801561060257600080fd5b5061060b611958565b6040516106189190612769565b60405180910390f35b34801561062d57600080fd5b5061063661195e565b604051610643919061281d565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612c7e565b6119ec565b005b34801561068157600080fd5b5061068a611ae9565b6040516106979190612769565b60405180910390f35b3480156106ac57600080fd5b506106b5611aef565b6040516106c29190612735565b60405180910390f35b6106e560048036038101906106e09190612d86565b611b02565b005b3480156106f357600080fd5b506106fc611cbc565b005b34801561070a57600080fd5b5061072560048036038101906107209190612e83565b611d67565b005b34801561073357600080fd5b5061074e6004803603810190610749919061286b565b611ea2565b60405161075b919061281d565b60405180910390f35b34801561077057600080fd5b50610779611fbf565b005b34801561078757600080fd5b506107a2600480360381019061079d9190612f06565b612085565b6040516107af9190612735565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da9190612b98565b6120b4565b005b3480156107ed57600080fd5b506107f661217c565b6040516108039190612769565b60405180910390f35b6000637f5828d060e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086757506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108975750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c757506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60085481565b600d80546108e190612f75565b80601f016020809104026020016040519081016040528092919081815260200182805461090d90612f75565b801561095a5780601f1061092f5761010080835404028352916020019161095a565b820191906000526020600020905b81548152906001019060200180831161093d57829003601f168201915b505050505081565b6001805461096f90612f75565b80601f016020809104026020016040519081016040528092919081815260200182805461099b90612f75565b80156109e85780601f106109bd576101008083540402835291602001916109e8565b820191906000526020600020905b8154815290600101906020018083116109cb57829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b1b5750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190612ff3565b60405180910390fd5b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600960009054906101000a900460ff1681565b6004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb79061305f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d27906130cb565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dc857506005600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e595750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90612ff3565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6115b38161ffff16600a54611034919061311a565b111561106c576040517f7364ba1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600960019054906101000a900460ff166110b2576040517f06290e4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670214e8348c4f00008161ffff166110ca9190613170565b341015611103576040517f583aa02600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008548161ffff161115611143576040517f9defc75000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8161ffff168161ffff16101561118457611165336001600a5401612182565b600a600081548092919060010191905055508080600101915050611146565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90613216565b60405180910390fd5b6001600960016101000a81548160ff021916908315150217905550565b670214e8348c4f000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613216565b60405180910390fd5b6000471415611308576040517f2313b4b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600047905060005b600581101561143457600e816005811061132d5761132c613236565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e860136000600e866005811061138357611382613236565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856113eb9190613170565b6113f59190613294565b9081150290604051600060405180830381858888f19350505050158015611420573d6000803e3d6000fd5b50808061142c906132c5565b915050611310565b5050565b611443838383610c1f565b60008273ffffffffffffffffffffffffffffffffffffffff163b148061152c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016114c893929190613345565b6020604051808303816000875af11580156114e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150b91906133a4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b61156b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115629061341d565b60405180910390fd5b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590613216565b60405180910390fd5b61160781611638565b6001600960026101000a81548160ff02191690831515021790555050565b600960029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90613216565b60405180910390fd5b80600c90805190602001906116dc9291906125de565b5050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b67016345785d8a000081565b600c805461172c90612f75565b80601f016020809104026020016040519081016040528092919081815260200182805461175890612f75565b80156117a55780601f1061177a576101008083540402835291602001916117a5565b820191906000526020600020905b81548152906001019060200180831161178857829003601f168201915b505050505081565b60036020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461184a576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191590613216565b60405180910390fd5b81600b81905550600b549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115b381565b6002805461196b90612f75565b80601f016020809104026020016040519081016040528092919081815260200182805461199790612f75565b80156119e45780601f106119b9576101008083540402835291602001916119e4565b820191906000526020600020905b8154815290600101906020018083116119c757829003601f168201915b505050505081565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611add9190612735565b60405180910390a35050565b600a5481565b600960019054906101000a900460ff1681565b6115b38261ffff16600a54611b17919061311a565b1115611b4f576040517f7364ba1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600960009054906101000a900460ff16611b95576040517fef4604b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67016345785d8a00008261ffff16611bad9190613170565b341015611be6576040517f583aa02600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007548261ffff161115611c26576040517f9defc75000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515611c3c611c3633612395565b836123c5565b15151415611c76576040517f522fc3bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8261ffff168161ffff161015611cb757611c98336001600a5401612182565b600a600081548092919060010191905055508080600101915050611c79565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190613216565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b611d72848484610c1f565b60008373ffffffffffffffffffffffffffffffffffffffff163b1480611e5d575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401611df99493929190613481565b6020604051808303816000875af1158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c91906133a4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e939061341d565b60405180910390fd5b50505050565b6060600073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f3e576040517fb0ce759100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600960029054906101000a900460ff1615151415611f8c57600d611f658361247d565b604051602001611f7692919061359d565b6040516020818303038152906040529050611fba565b600c611f978361247d565b604051602001611fa892919061359d565b60405160208183030381529060405290505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490613216565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff021916908315150217905550565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612139576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e9906130cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228b9061360d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000816040516020016123a89190613675565b604051602081830303815290604052805190602001209050919050565b60008083905060005b835181101561246e5760008482815181106123ec576123eb613236565b5b602002602001015190508083101561242e5782816040516020016124119291906136b1565b60405160208183030381529060405280519060200120925061245a565b80836040516020016124419291906136b1565b6040516020818303038152906040528051906020012092505b508080612466906132c5565b9150506123ce565b50600b54811491505092915050565b606060008214156124c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125d9565b600082905060005b600082146124f75780806124e0906132c5565b915050600a826124f09190613294565b91506124cd565b60008167ffffffffffffffff81111561251357612512612a24565b5b6040519080825280601f01601f1916602001820160405280156125455781602001600182028036833780820191505090505b5090505b600085146125d25760018261255e91906136dd565b9150600a8561256d9190613711565b6030612579919061311a565b60f81b81838151811061258f5761258e613236565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125cb9190613294565b9450612549565b8093505050505b919050565b8280546125ea90612f75565b90600052602060002090601f01602090048101928261260c5760008555612653565b82601f1061262557805160ff1916838001178555612653565b82800160010185558215612653579182015b82811115612652578251825591602001919060010190612637565b5b5090506126609190612664565b5090565b5b8082111561267d576000816000905550600101612665565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126ca81612695565b81146126d557600080fd5b50565b6000813590506126e7816126c1565b92915050565b6000602082840312156127035761270261268b565b5b6000612711848285016126d8565b91505092915050565b60008115159050919050565b61272f8161271a565b82525050565b600060208201905061274a6000830184612726565b92915050565b6000819050919050565b61276381612750565b82525050565b600060208201905061277e600083018461275a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127be5780820151818401526020810190506127a3565b838111156127cd576000848401525b50505050565b6000601f19601f8301169050919050565b60006127ef82612784565b6127f9818561278f565b93506128098185602086016127a0565b612812816127d3565b840191505092915050565b6000602082019050818103600083015261283781846127e4565b905092915050565b61284881612750565b811461285357600080fd5b50565b6000813590506128658161283f565b92915050565b6000602082840312156128815761288061268b565b5b600061288f84828501612856565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128c382612898565b9050919050565b6128d3816128b8565b82525050565b60006020820190506128ee60008301846128ca565b92915050565b6128fd816128b8565b811461290857600080fd5b50565b60008135905061291a816128f4565b92915050565b600080604083850312156129375761293661268b565b5b60006129458582860161290b565b925050602061295685828601612856565b9150509250929050565b6000806000606084860312156129795761297861268b565b5b60006129878682870161290b565b93505060206129988682870161290b565b92505060406129a986828701612856565b9150509250925092565b600061ffff82169050919050565b6129ca816129b3565b81146129d557600080fd5b50565b6000813590506129e7816129c1565b92915050565b600060208284031215612a0357612a0261268b565b5b6000612a11848285016129d8565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a5c826127d3565b810181811067ffffffffffffffff82111715612a7b57612a7a612a24565b5b80604052505050565b6000612a8e612681565b9050612a9a8282612a53565b919050565b600067ffffffffffffffff821115612aba57612ab9612a24565b5b612ac3826127d3565b9050602081019050919050565b82818337600083830152505050565b6000612af2612aed84612a9f565b612a84565b905082815260208101848484011115612b0e57612b0d612a1f565b5b612b19848285612ad0565b509392505050565b600082601f830112612b3657612b35612a1a565b5b8135612b46848260208601612adf565b91505092915050565b600060208284031215612b6557612b6461268b565b5b600082013567ffffffffffffffff811115612b8357612b82612690565b5b612b8f84828501612b21565b91505092915050565b600060208284031215612bae57612bad61268b565b5b6000612bbc8482850161290b565b91505092915050565b6000819050919050565b612bd881612bc5565b8114612be357600080fd5b50565b600081359050612bf581612bcf565b92915050565b600060208284031215612c1157612c1061268b565b5b6000612c1f84828501612be6565b91505092915050565b612c3181612bc5565b82525050565b6000602082019050612c4c6000830184612c28565b92915050565b612c5b8161271a565b8114612c6657600080fd5b50565b600081359050612c7881612c52565b92915050565b60008060408385031215612c9557612c9461268b565b5b6000612ca38582860161290b565b9250506020612cb485828601612c69565b9150509250929050565b600067ffffffffffffffff821115612cd957612cd8612a24565b5b602082029050602081019050919050565b600080fd5b6000612d02612cfd84612cbe565b612a84565b90508083825260208201905060208402830185811115612d2557612d24612cea565b5b835b81811015612d4e5780612d3a8882612be6565b845260208401935050602081019050612d27565b5050509392505050565b600082601f830112612d6d57612d6c612a1a565b5b8135612d7d848260208601612cef565b91505092915050565b60008060408385031215612d9d57612d9c61268b565b5b6000612dab858286016129d8565b925050602083013567ffffffffffffffff811115612dcc57612dcb612690565b5b612dd885828601612d58565b9150509250929050565b600067ffffffffffffffff821115612dfd57612dfc612a24565b5b612e06826127d3565b9050602081019050919050565b6000612e26612e2184612de2565b612a84565b905082815260208101848484011115612e4257612e41612a1f565b5b612e4d848285612ad0565b509392505050565b600082601f830112612e6a57612e69612a1a565b5b8135612e7a848260208601612e13565b91505092915050565b60008060008060808587031215612e9d57612e9c61268b565b5b6000612eab8782880161290b565b9450506020612ebc8782880161290b565b9350506040612ecd87828801612856565b925050606085013567ffffffffffffffff811115612eee57612eed612690565b5b612efa87828801612e55565b91505092959194509250565b60008060408385031215612f1d57612f1c61268b565b5b6000612f2b8582860161290b565b9250506020612f3c8582860161290b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f8d57607f821691505b60208210811415612fa157612fa0612f46565b5b50919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b6000612fdd600e8361278f565b9150612fe882612fa7565b602082019050919050565b6000602082019050818103600083015261300c81612fd0565b9050919050565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b6000613049600a8361278f565b915061305482613013565b602082019050919050565b600060208201905081810360008301526130788161303c565b9050919050565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b60006130b560118361278f565b91506130c08261307f565b602082019050919050565b600060208201905081810360008301526130e4816130a8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061312582612750565b915061313083612750565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613165576131646130eb565b5b828201905092915050565b600061317b82612750565b915061318683612750565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131bf576131be6130eb565b5b828202905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061320060208361278f565b915061320b826131ca565b602082019050919050565b6000602082019050818103600083015261322f816131f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061329f82612750565b91506132aa83612750565b9250826132ba576132b9613265565b5b828204905092915050565b60006132d082612750565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613303576133026130eb565b5b600182019050919050565b600082825260208201905092915050565b50565b600061332f60008361330e565b915061333a8261331f565b600082019050919050565b600060808201905061335a60008301866128ca565b61336760208301856128ca565b613374604083018461275a565b818103606083015261338581613322565b9050949350505050565b60008151905061339e816126c1565b92915050565b6000602082840312156133ba576133b961268b565b5b60006133c88482850161338f565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b600061340760108361278f565b9150613412826133d1565b602082019050919050565b60006020820190508181036000830152613436816133fa565b9050919050565b600081519050919050565b60006134538261343d565b61345d818561330e565b935061346d8185602086016127a0565b613476816127d3565b840191505092915050565b600060808201905061349660008301876128ca565b6134a360208301866128ca565b6134b0604083018561275a565b81810360608301526134c28184613448565b905095945050505050565b600081905092915050565b60008190508160005260206000209050919050565b600081546134fa81612f75565b61350481866134cd565b9450600182166000811461351f576001811461353057613563565b60ff19831686528186019350613563565b613539856134d8565b60005b8381101561355b5781548189015260018201915060208101905061353c565b838801955050505b50505092915050565b600061357782612784565b61358181856134cd565b93506135918185602086016127a0565b80840191505092915050565b60006135a982856134ed565b91506135b5828461356c565b91508190509392505050565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b60006135f7600e8361278f565b9150613602826135c1565b602082019050919050565b60006020820190508181036000830152613626816135ea565b9050919050565b60008160601b9050919050565b60006136458261362d565b9050919050565b60006136578261363a565b9050919050565b61366f61366a826128b8565b61364c565b82525050565b6000613681828461365e565b60148201915081905092915050565b6000819050919050565b6136ab6136a682612bc5565b613690565b82525050565b60006136bd828561369a565b6020820191506136cd828461369a565b6020820191508190509392505050565b60006136e882612750565b91506136f383612750565b925082821015613706576137056130eb565b5b828203905092915050565b600061371c82612750565b915061372783612750565b92508261373757613736613265565b5b82820690509291505056fea26469706673582212200c2e0460c844c825d381d5e8c278d78899cae4fd568bd5cfc9fa0091aa270fbf64736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000e0a8050e682d966447aab67ff471d92b34bb47befc79e8f8f06ddd233de6bf3fc90000000000000000000000003f4239321e820d890950df63f8a64192c2f4db930000000000000000000000002967087b17c3a8fd45af40e6965e55aa6cfa418b00000000000000000000000086e43ba422488221276cdb6fb9c8e93ad72edf16000000000000000000000000abeec041894dce885fdc04cbddecee09ce2c53c20000000000000000000000005b588e36ff358d4376a76fb163fd69da02a2a9a5000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d57476f6667635a4265436461445538724e697465736742697271686836567061686970736131446e4d6b37762f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636c0360eb11610118578063a9722cf3116100a0578063c87b56dd1161006f578063c87b56dd14610727578063cd85cdb514610764578063e985e9c51461077b578063f2fde38b146107b8578063f96407fa146107e15761020f565b8063a9722cf3146106a0578063b182e818146106cb578063b70196d7146106e7578063b88d4fde146106fe5761020f565b80638da5cb5b116100e75780638da5cb5b146105cb578063902d55a5146105f657806395d89b4114610621578063a22cb4651461064c578063a2309ff8146106755761020f565b80636c0360eb1461050f57806370a082311461053a578063715018a6146105775780637cb647591461058e5761020f565b80632be095611161019b5780634c2612471161016a5780634c2612471461042a578063518302271461045357806355f804b31461047e5780636352211e146104a757806369eb16a3146104e45761020f565b80632be09561146103a85780632f0d3e20146103bf5780633ccfd60b146103ea57806342842e0e146104015761020f565b8063081812fc116101e2578063081812fc146102d2578063095ea7b31461030f5780631cfddb1f1461033857806323b872dd1461036357806323cf0a221461038c5761020f565b806301ffc9a71461021457806303d8acef14610251578063055ea1411461027c57806306fdde03146102a7575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906126ed565b61080c565b6040516102489190612735565b60405180910390f35b34801561025d57600080fd5b506102666108ce565b6040516102739190612769565b60405180910390f35b34801561028857600080fd5b506102916108d4565b60405161029e919061281d565b60405180910390f35b3480156102b357600080fd5b506102bc610962565b6040516102c9919061281d565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f4919061286b565b6109f0565b60405161030691906128d9565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190612920565b610a23565b005b34801561034457600080fd5b5061034d610c0c565b60405161035a9190612735565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612960565b610c1f565b005b6103a660048036038101906103a191906129ed565b61101f565b005b3480156103b457600080fd5b506103bd611188565b005b3480156103cb57600080fd5b506103d4611233565b6040516103e19190612769565b60405180910390f35b3480156103f657600080fd5b506103ff61123f565b005b34801561040d57600080fd5b5061042860048036038101906104239190612960565b611438565b005b34801561043657600080fd5b50610451600480360381019061044c9190612b4f565b611570565b005b34801561045f57600080fd5b50610468611625565b6040516104759190612735565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612b4f565b611638565b005b3480156104b357600080fd5b506104ce60048036038101906104c9919061286b565b6116e0565b6040516104db91906128d9565b60405180910390f35b3480156104f057600080fd5b506104f9611713565b6040516105069190612769565b60405180910390f35b34801561051b57600080fd5b5061052461171f565b604051610531919061281d565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190612b98565b6117ad565b60405161056e9190612769565b60405180910390f35b34801561058357600080fd5b5061058c6117c5565b005b34801561059a57600080fd5b506105b560048036038101906105b09190612bfb565b61188d565b6040516105c29190612c37565b60405180910390f35b3480156105d757600080fd5b506105e061192f565b6040516105ed91906128d9565b60405180910390f35b34801561060257600080fd5b5061060b611958565b6040516106189190612769565b60405180910390f35b34801561062d57600080fd5b5061063661195e565b604051610643919061281d565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612c7e565b6119ec565b005b34801561068157600080fd5b5061068a611ae9565b6040516106979190612769565b60405180910390f35b3480156106ac57600080fd5b506106b5611aef565b6040516106c29190612735565b60405180910390f35b6106e560048036038101906106e09190612d86565b611b02565b005b3480156106f357600080fd5b506106fc611cbc565b005b34801561070a57600080fd5b5061072560048036038101906107209190612e83565b611d67565b005b34801561073357600080fd5b5061074e6004803603810190610749919061286b565b611ea2565b60405161075b919061281d565b60405180910390f35b34801561077057600080fd5b50610779611fbf565b005b34801561078757600080fd5b506107a2600480360381019061079d9190612f06565b612085565b6040516107af9190612735565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da9190612b98565b6120b4565b005b3480156107ed57600080fd5b506107f661217c565b6040516108039190612769565b60405180910390f35b6000637f5828d060e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086757506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108975750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c757506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60085481565b600d80546108e190612f75565b80601f016020809104026020016040519081016040528092919081815260200182805461090d90612f75565b801561095a5780601f1061092f5761010080835404028352916020019161095a565b820191906000526020600020905b81548152906001019060200180831161093d57829003601f168201915b505050505081565b6001805461096f90612f75565b80601f016020809104026020016040519081016040528092919081815260200182805461099b90612f75565b80156109e85780601f106109bd576101008083540402835291602001916109e8565b820191906000526020600020905b8154815290600101906020018083116109cb57829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b1b5750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190612ff3565b60405180910390fd5b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600960009054906101000a900460ff1681565b6004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb79061305f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d27906130cb565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dc857506005600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e595750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90612ff3565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6115b38161ffff16600a54611034919061311a565b111561106c576040517f7364ba1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600960019054906101000a900460ff166110b2576040517f06290e4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670214e8348c4f00008161ffff166110ca9190613170565b341015611103576040517f583aa02600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008548161ffff161115611143576040517f9defc75000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8161ffff168161ffff16101561118457611165336001600a5401612182565b600a600081548092919060010191905055508080600101915050611146565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90613216565b60405180910390fd5b6001600960016101000a81548160ff021916908315150217905550565b670214e8348c4f000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613216565b60405180910390fd5b6000471415611308576040517f2313b4b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600047905060005b600581101561143457600e816005811061132d5761132c613236565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e860136000600e866005811061138357611382613236565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856113eb9190613170565b6113f59190613294565b9081150290604051600060405180830381858888f19350505050158015611420573d6000803e3d6000fd5b50808061142c906132c5565b915050611310565b5050565b611443838383610c1f565b60008273ffffffffffffffffffffffffffffffffffffffff163b148061152c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016114c893929190613345565b6020604051808303816000875af11580156114e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150b91906133a4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b61156b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115629061341d565b60405180910390fd5b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590613216565b60405180910390fd5b61160781611638565b6001600960026101000a81548160ff02191690831515021790555050565b600960029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90613216565b60405180910390fd5b80600c90805190602001906116dc9291906125de565b5050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b67016345785d8a000081565b600c805461172c90612f75565b80601f016020809104026020016040519081016040528092919081815260200182805461175890612f75565b80156117a55780601f1061177a576101008083540402835291602001916117a5565b820191906000526020600020905b81548152906001019060200180831161178857829003601f168201915b505050505081565b60036020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461184a576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191590613216565b60405180910390fd5b81600b81905550600b549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115b381565b6002805461196b90612f75565b80601f016020809104026020016040519081016040528092919081815260200182805461199790612f75565b80156119e45780601f106119b9576101008083540402835291602001916119e4565b820191906000526020600020905b8154815290600101906020018083116119c757829003601f168201915b505050505081565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611add9190612735565b60405180910390a35050565b600a5481565b600960019054906101000a900460ff1681565b6115b38261ffff16600a54611b17919061311a565b1115611b4f576040517f7364ba1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600960009054906101000a900460ff16611b95576040517fef4604b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67016345785d8a00008261ffff16611bad9190613170565b341015611be6576040517f583aa02600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007548261ffff161115611c26576040517f9defc75000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515611c3c611c3633612395565b836123c5565b15151415611c76576040517f522fc3bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8261ffff168161ffff161015611cb757611c98336001600a5401612182565b600a600081548092919060010191905055508080600101915050611c79565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190613216565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b611d72848484610c1f565b60008373ffffffffffffffffffffffffffffffffffffffff163b1480611e5d575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401611df99493929190613481565b6020604051808303816000875af1158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c91906133a4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e939061341d565b60405180910390fd5b50505050565b6060600073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f3e576040517fb0ce759100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600960029054906101000a900460ff1615151415611f8c57600d611f658361247d565b604051602001611f7692919061359d565b6040516020818303038152906040529050611fba565b600c611f978361247d565b604051602001611fa892919061359d565b60405160208183030381529060405290505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490613216565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff021916908315150217905550565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612139576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e9906130cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228b9061360d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000816040516020016123a89190613675565b604051602081830303815290604052805190602001209050919050565b60008083905060005b835181101561246e5760008482815181106123ec576123eb613236565b5b602002602001015190508083101561242e5782816040516020016124119291906136b1565b60405160208183030381529060405280519060200120925061245a565b80836040516020016124419291906136b1565b6040516020818303038152906040528051906020012092505b508080612466906132c5565b9150506123ce565b50600b54811491505092915050565b606060008214156124c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125d9565b600082905060005b600082146124f75780806124e0906132c5565b915050600a826124f09190613294565b91506124cd565b60008167ffffffffffffffff81111561251357612512612a24565b5b6040519080825280601f01601f1916602001820160405280156125455781602001600182028036833780820191505090505b5090505b600085146125d25760018261255e91906136dd565b9150600a8561256d9190613711565b6030612579919061311a565b60f81b81838151811061258f5761258e613236565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125cb9190613294565b9450612549565b8093505050505b919050565b8280546125ea90612f75565b90600052602060002090601f01602090048101928261260c5760008555612653565b82601f1061262557805160ff1916838001178555612653565b82800160010185558215612653579182015b82811115612652578251825591602001919060010190612637565b5b5090506126609190612664565b5090565b5b8082111561267d576000816000905550600101612665565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126ca81612695565b81146126d557600080fd5b50565b6000813590506126e7816126c1565b92915050565b6000602082840312156127035761270261268b565b5b6000612711848285016126d8565b91505092915050565b60008115159050919050565b61272f8161271a565b82525050565b600060208201905061274a6000830184612726565b92915050565b6000819050919050565b61276381612750565b82525050565b600060208201905061277e600083018461275a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127be5780820151818401526020810190506127a3565b838111156127cd576000848401525b50505050565b6000601f19601f8301169050919050565b60006127ef82612784565b6127f9818561278f565b93506128098185602086016127a0565b612812816127d3565b840191505092915050565b6000602082019050818103600083015261283781846127e4565b905092915050565b61284881612750565b811461285357600080fd5b50565b6000813590506128658161283f565b92915050565b6000602082840312156128815761288061268b565b5b600061288f84828501612856565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128c382612898565b9050919050565b6128d3816128b8565b82525050565b60006020820190506128ee60008301846128ca565b92915050565b6128fd816128b8565b811461290857600080fd5b50565b60008135905061291a816128f4565b92915050565b600080604083850312156129375761293661268b565b5b60006129458582860161290b565b925050602061295685828601612856565b9150509250929050565b6000806000606084860312156129795761297861268b565b5b60006129878682870161290b565b93505060206129988682870161290b565b92505060406129a986828701612856565b9150509250925092565b600061ffff82169050919050565b6129ca816129b3565b81146129d557600080fd5b50565b6000813590506129e7816129c1565b92915050565b600060208284031215612a0357612a0261268b565b5b6000612a11848285016129d8565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a5c826127d3565b810181811067ffffffffffffffff82111715612a7b57612a7a612a24565b5b80604052505050565b6000612a8e612681565b9050612a9a8282612a53565b919050565b600067ffffffffffffffff821115612aba57612ab9612a24565b5b612ac3826127d3565b9050602081019050919050565b82818337600083830152505050565b6000612af2612aed84612a9f565b612a84565b905082815260208101848484011115612b0e57612b0d612a1f565b5b612b19848285612ad0565b509392505050565b600082601f830112612b3657612b35612a1a565b5b8135612b46848260208601612adf565b91505092915050565b600060208284031215612b6557612b6461268b565b5b600082013567ffffffffffffffff811115612b8357612b82612690565b5b612b8f84828501612b21565b91505092915050565b600060208284031215612bae57612bad61268b565b5b6000612bbc8482850161290b565b91505092915050565b6000819050919050565b612bd881612bc5565b8114612be357600080fd5b50565b600081359050612bf581612bcf565b92915050565b600060208284031215612c1157612c1061268b565b5b6000612c1f84828501612be6565b91505092915050565b612c3181612bc5565b82525050565b6000602082019050612c4c6000830184612c28565b92915050565b612c5b8161271a565b8114612c6657600080fd5b50565b600081359050612c7881612c52565b92915050565b60008060408385031215612c9557612c9461268b565b5b6000612ca38582860161290b565b9250506020612cb485828601612c69565b9150509250929050565b600067ffffffffffffffff821115612cd957612cd8612a24565b5b602082029050602081019050919050565b600080fd5b6000612d02612cfd84612cbe565b612a84565b90508083825260208201905060208402830185811115612d2557612d24612cea565b5b835b81811015612d4e5780612d3a8882612be6565b845260208401935050602081019050612d27565b5050509392505050565b600082601f830112612d6d57612d6c612a1a565b5b8135612d7d848260208601612cef565b91505092915050565b60008060408385031215612d9d57612d9c61268b565b5b6000612dab858286016129d8565b925050602083013567ffffffffffffffff811115612dcc57612dcb612690565b5b612dd885828601612d58565b9150509250929050565b600067ffffffffffffffff821115612dfd57612dfc612a24565b5b612e06826127d3565b9050602081019050919050565b6000612e26612e2184612de2565b612a84565b905082815260208101848484011115612e4257612e41612a1f565b5b612e4d848285612ad0565b509392505050565b600082601f830112612e6a57612e69612a1a565b5b8135612e7a848260208601612e13565b91505092915050565b60008060008060808587031215612e9d57612e9c61268b565b5b6000612eab8782880161290b565b9450506020612ebc8782880161290b565b9350506040612ecd87828801612856565b925050606085013567ffffffffffffffff811115612eee57612eed612690565b5b612efa87828801612e55565b91505092959194509250565b60008060408385031215612f1d57612f1c61268b565b5b6000612f2b8582860161290b565b9250506020612f3c8582860161290b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f8d57607f821691505b60208210811415612fa157612fa0612f46565b5b50919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b6000612fdd600e8361278f565b9150612fe882612fa7565b602082019050919050565b6000602082019050818103600083015261300c81612fd0565b9050919050565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b6000613049600a8361278f565b915061305482613013565b602082019050919050565b600060208201905081810360008301526130788161303c565b9050919050565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b60006130b560118361278f565b91506130c08261307f565b602082019050919050565b600060208201905081810360008301526130e4816130a8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061312582612750565b915061313083612750565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613165576131646130eb565b5b828201905092915050565b600061317b82612750565b915061318683612750565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131bf576131be6130eb565b5b828202905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061320060208361278f565b915061320b826131ca565b602082019050919050565b6000602082019050818103600083015261322f816131f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061329f82612750565b91506132aa83612750565b9250826132ba576132b9613265565b5b828204905092915050565b60006132d082612750565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613303576133026130eb565b5b600182019050919050565b600082825260208201905092915050565b50565b600061332f60008361330e565b915061333a8261331f565b600082019050919050565b600060808201905061335a60008301866128ca565b61336760208301856128ca565b613374604083018461275a565b818103606083015261338581613322565b9050949350505050565b60008151905061339e816126c1565b92915050565b6000602082840312156133ba576133b961268b565b5b60006133c88482850161338f565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b600061340760108361278f565b9150613412826133d1565b602082019050919050565b60006020820190508181036000830152613436816133fa565b9050919050565b600081519050919050565b60006134538261343d565b61345d818561330e565b935061346d8185602086016127a0565b613476816127d3565b840191505092915050565b600060808201905061349660008301876128ca565b6134a360208301866128ca565b6134b0604083018561275a565b81810360608301526134c28184613448565b905095945050505050565b600081905092915050565b60008190508160005260206000209050919050565b600081546134fa81612f75565b61350481866134cd565b9450600182166000811461351f576001811461353057613563565b60ff19831686528186019350613563565b613539856134d8565b60005b8381101561355b5781548189015260018201915060208101905061353c565b838801955050505b50505092915050565b600061357782612784565b61358181856134cd565b93506135918185602086016127a0565b80840191505092915050565b60006135a982856134ed565b91506135b5828461356c565b91508190509392505050565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b60006135f7600e8361278f565b9150613602826135c1565b602082019050919050565b60006020820190508181036000830152613626816135ea565b9050919050565b60008160601b9050919050565b60006136458261362d565b9050919050565b60006136578261363a565b9050919050565b61366f61366a826128b8565b61364c565b82525050565b6000613681828461365e565b60148201915081905092915050565b6000819050919050565b6136ab6136a682612bc5565b613690565b82525050565b60006136bd828561369a565b6020820191506136cd828461369a565b6020820191508190509392505050565b60006136e882612750565b91506136f383612750565b925082821015613706576137056130eb565b5b828203905092915050565b600061371c82612750565b915061372783612750565b92508261373757613736613265565b5b82820690509291505056fea26469706673582212200c2e0460c844c825d381d5e8c278d78899cae4fd568bd5cfc9fa0091aa270fbf64736f6c634300080b0033

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

00000000000000000000000000000000000000000000000000000000000000e0a8050e682d966447aab67ff471d92b34bb47befc79e8f8f06ddd233de6bf3fc90000000000000000000000003f4239321e820d890950df63f8a64192c2f4db930000000000000000000000002967087b17c3a8fd45af40e6965e55aa6cfa418b00000000000000000000000086e43ba422488221276cdb6fb9c8e93ad72edf16000000000000000000000000abeec041894dce885fdc04cbddecee09ce2c53c20000000000000000000000005b588e36ff358d4376a76fb163fd69da02a2a9a5000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d57476f6667635a4265436461445538724e697465736742697271686836567061686970736131446e4d6b37762f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _nonRevealedURI (string): https://ipfs.io/ipfs/QmWGofgcZBeCdaDU8rNitesgBirqhh6Vpahipsa1DnMk7v/
Arg [1] : _initMerkleRoot (bytes32): 0xa8050e682d966447aab67ff471d92b34bb47befc79e8f8f06ddd233de6bf3fc9
Arg [2] : _contributorAddresses (address[5]): 0x3F4239321E820d890950dF63f8A64192C2F4dB93,0x2967087B17C3A8fd45aF40e6965E55aa6cfA418b,0x86e43ba422488221276CDb6Fb9C8e93AD72EdF16,0xAbEec041894DCE885fdc04cbDDecEE09CE2C53c2,0x5B588e36FF358D4376A76FB163fd69Da02A2A9a5

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : a8050e682d966447aab67ff471d92b34bb47befc79e8f8f06ddd233de6bf3fc9
Arg [2] : 0000000000000000000000003f4239321e820d890950df63f8a64192c2f4db93
Arg [3] : 0000000000000000000000002967087b17c3a8fd45af40e6965e55aa6cfa418b
Arg [4] : 00000000000000000000000086e43ba422488221276cdb6fb9c8e93ad72edf16
Arg [5] : 000000000000000000000000abeec041894dce885fdc04cbddecee09ce2c53c2
Arg [6] : 0000000000000000000000005b588e36ff358d4376a76fb163fd69da02a2a9a5
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [8] : 68747470733a2f2f697066732e696f2f697066732f516d57476f6667635a4265
Arg [9] : 436461445538724e697465736742697271686836567061686970736131446e4d
Arg [10] : 6b37762f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

28756:6289:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34564:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29064:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29333:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2724:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3177:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3804:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29112:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4316:764;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31799:527;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33595:75;;;;;;;;;;;;;:::i;:::-;;28950:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34103:380;;;;;;;;;;;;;:::i;:::-;;5088:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33801:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29197:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33378:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3126:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28883:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29305:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3073:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;570:130;;;;;;;;;;;;;:::i;:::-;;33931:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;325:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28833:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2751:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4101:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29234:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29159:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32334:684;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33490:93;;;;;;;;;;;;;:::i;:::-;;5505:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33026:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33678:115;;;;;;;;;;;;;:::i;:::-;;3232:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;414:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29015:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34564:478;34697:4;34754:10;34739:25;;:11;:25;;;;:101;;;;34830:10;34815:25;;:11;:25;;;;34739:101;:177;;;;34906:10;34891:25;;:11;:25;;;;34739:177;:253;;;;34982:10;34967:25;;:11;:25;;;;34739:253;34719:273;;34564:478;;;:::o;29064:39::-;;;;:::o;29333:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2724:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3177:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;3804:289::-;3876:13;3892:7;:11;3900:2;3892:11;;;;;;;;;;;;;;;;;;;;;3876:27;;3938:5;3924:19;;:10;:19;;;:58;;;;3947:16;:23;3964:5;3947:23;;;;;;;;;;;;;;;:35;3971:10;3947:35;;;;;;;;;;;;;;;;;;;;;;;;;3924:58;3916:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4032:7;4014:11;:15;4026:2;4014:15;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;4082:2;4073:7;4057:28;;4066:5;4057:28;;;;;;;;;;;;3865:228;3804:289;;:::o;29112:40::-;;;;;;;;;;;;;:::o;4316:764::-;4452:7;:11;4460:2;4452:11;;;;;;;;;;;;;;;;;;;;;4444:19;;:4;:19;;;4436:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;4513:1;4499:16;;:2;:16;;;;4491:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4586:4;4572:18;;:10;:18;;;:51;;;;4608:11;:15;4620:2;4608:15;;;;;;;;;;;;;;;;;;;;;4594:29;;:10;:29;;;4572:51;:89;;;;4627:16;:22;4644:4;4627:22;;;;;;;;;;;;;;;:34;4650:10;4627:34;;;;;;;;;;;;;;;;;;;;;;;;;4572:89;4550:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;4908:9;:15;4918:4;4908:15;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;4942:9;:13;4952:2;4942:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;4995:2;4981:7;:11;4989:2;4981:11;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;5017:11;:15;5029:2;5017:15;;;;;;;;;;;;5010:22;;;;;;;;;;;5069:2;5065;5050:22;;5059:4;5050:22;;;;;;;;;;;;4316:764;;;:::o;31799:527::-;28872:4;31874:6;31860:20;;:11;;:20;;;;:::i;:::-;:35;31856:62;;;31904:14;;;;;;;;;;;;;;31856:62;31934:11;;;;;;;;;;;31929:41;;31954:16;;;;;;;;;;;;;;31929:41;28998:10;31997:6;:30;;;;;;:::i;:::-;31985:9;:42;31981:69;;;32036:14;;;;;;;;;;;;;;31981:69;32074:19;;32065:6;:28;;;32061:60;;;32102:19;;;;;;;;;;;;;;32061:60;32164:12;32159:149;32190:6;32182:14;;:5;:14;;;32159:149;;;32226:34;32232:10;32258:1;32244:11;;:15;32226:5;:34::i;:::-;32279:11;;:13;;;;;;;;;;;;;32198:7;;;;;;;32159:149;;;;31799:527;:::o;33595:75::-;29528:6;;;;;;;;;;29514:20;;:10;:20;;;29506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33658:4:::1;33644:11;;:18;;;;;;;;;;;;;;;;;;33595:75::o:0;28950:58::-;28998:10;28950:58;:::o;34103:380::-;29528:6;;;;;;;;;;29514:20;;:10;:20;;;29506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34182:1:::1;34157:21;:26;34153:53;;;34192:14;;;;;;;;;;;;;;34153:53;34217:15;34235:21;34217:39;;34274:9;34269:207;34293:24;34289:1;:28;34269:207;;;34347:17;34365:1;34347:20;;;;;;;:::i;:::-;;;;;;;;;;;;;34339:38;;:125;34445:4;34406:14;:36;34421:17;34439:1;34421:20;;;;;;;:::i;:::-;;;;;;;;;;;;;34406:36;;;;;;;;;;;;;;;;34396:7;:46;;;;:::i;:::-;:53;;;;:::i;:::-;34339:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34319:3;;;;;:::i;:::-;;;;34269:207;;;;34142:341;34103:380::o:0;5088:409::-;5212:26;5225:4;5231:2;5235;5212:12;:26::i;:::-;5291:1;5273:2;:14;;;:19;:172;;;;5400:45;;;5313:132;;;5333:2;5313:40;;;5354:10;5366:4;5372:2;5313:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:132;;;;5273:172;5251:238;;;;;;;;;;;;:::i;:::-;;;;;;;;;5088:409;;;:::o;33801:122::-;29528:6;;;;;;;;;;29514:20;;:10;:20;;;29506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33869:20:::1;33880:8;33869:10;:20::i;:::-;33911:4;33900:8;;:15;;;;;;;;;;;;;;;;;;33801:122:::0;:::o;29197:28::-;;;;;;;;;;;;;:::o;33378:104::-;29528:6;;;;;;;;;;29514:20;;:10;:20;;;29506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33463:11:::1;33453:7;:21;;;;;;;;;;;;:::i;:::-;;33378:104:::0;:::o;3126:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;28883:60::-;28934:9;28883:60;:::o;29305:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3073:44::-;;;;;;;;;;;;;;;;;:::o;570:130::-;635:6;;;;;;;;;;621:20;;:10;:20;;;617:43;;650:10;;;;;;;;;;;;;;617:43;690:1;673:6;;:19;;;;;;;;;;;;;;;;;;570:130::o;33931:164::-;34008:7;29528:6;;;;;;;;;;;29514:20;;:10;:20;;;29506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34042:16:::1;34028:11;:30;;;;34076:11;;34069:18;;33931:164:::0;;;:::o;325:81::-;365:7;392:6;;;;;;;;;;;385:13;;325:81;:::o;28833:43::-;28872:4;28833:43;:::o;2751:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4101:207::-;4228:8;4187:16;:28;4204:10;4187:28;;;;;;;;;;;;;;;:38;4216:8;4187:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;4281:8;4254:46;;4269:10;4254:46;;;4291:8;4254:46;;;;;;:::i;:::-;;;;;;;;4101:207;;:::o;29234:26::-;;;;:::o;29159:31::-;;;;;;;;;;;;;:::o;32334:684::-;28872:4;32443:6;32429:20;;:11;;:20;;;;:::i;:::-;:35;32425:62;;;32473:14;;;;;;;;;;;;;;32425:62;32503:20;;;;;;;;;;;32498:59;;32532:25;;;;;;;;;;;;;;32498:59;28934:9;32584:6;:33;;;;;;:::i;:::-;32572:9;:45;32568:72;;;32626:14;;;;;;;;;;;;;;32568:72;32664:22;;32655:6;:31;;;32651:63;;;32695:19;;;;;;;;;;;;;;32651:63;32775:5;32729:51;;:42;32745:17;32751:10;32745:5;:17::i;:::-;32764:6;32729:15;:42::i;:::-;:51;;;32725:80;;;32789:16;;;;;;;;;;;;;;32725:80;32856:12;32851:149;32882:6;32874:14;;:5;:14;;;32851:149;;;32918:34;32924:10;32950:1;32936:11;;:15;32918:5;:34::i;:::-;32971:11;;:13;;;;;;;;;;;;;32890:7;;;;;;;32851:149;;;;32334:684;;:::o;33490:93::-;29528:6;;;;;;;;;;29514:20;;:10;:20;;;29506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33571:4:::1;33548:20;;:27;;;;;;;;;;;;;;;;;;33490:93::o:0;5505:439::-;5657:26;5670:4;5676:2;5680;5657:12;:26::i;:::-;5736:1;5718:2;:14;;;:19;:174;;;;5847:45;;;5758:134;;;5778:2;5758:40;;;5799:10;5811:4;5817:2;5821:4;5758:68;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:134;;;;5718:174;5696:240;;;;;;;;;;;;:::i;:::-;;;;;;;;;5505:439;;;;:::o;33026:344::-;33094:13;33147:1;33124:25;;:7;:11;33132:2;33124:11;;;;;;;;;;;;;;;;;;;;;:25;;;33120:52;;;33158:14;;;;;;;;;;;;;;33120:52;33201:5;33189:17;;:8;;;;;;;;;;;:17;;;33185:112;;;33254:14;33270:13;:2;:11;:13::i;:::-;33237:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33223:62;;;;33185:112;33338:7;33347:13;:2;:11;:13::i;:::-;33321:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33307:55;;33026:344;;;;:::o;33678:115::-;29528:6;;;;;;;;;;29514:20;;:10;:20;;;29506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33750:5:::1;33727:20;;:28;;;;;;;;;;;;;;;;;;33780:5;33766:11;;:19;;;;;;;;;;;;;;;;;;33678:115::o:0;3232:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;414:148::-;498:6;;;;;;;;;;484:20;;:10;:20;;;480:43;;513:10;;;;;;;;;;;;;;480:43;545:9;536:6;;:18;;;;;;;;;;;;;;;;;;414:148;:::o;29015:42::-;;;;:::o;6679:381::-;6768:1;6754:16;;:2;:16;;;;6746:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6836:1;6813:25;;:7;:11;6821:2;6813:11;;;;;;;;;;;;;;;;;;;;;:25;;;6805:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;6951:9;:13;6961:2;6951:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;7004:2;6990:7;:11;6998:2;6990:11;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;7049:2;7045;7024:28;;7041:1;7024:28;;;;;;;;;;;;6679:381;;:::o;30770:125::-;30824:7;30878;30861:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;30851:36;;;;;;30844:43;;30770:125;;;:::o;31149:642::-;31234:4;31251:20;31274:4;31251:27;;31296:9;31291:446;31315:5;:12;31311:1;:16;31291:446;;;31349:20;31372:5;31378:1;31372:8;;;;;;;;:::i;:::-;;;;;;;;31349:31;;31416:12;31401;:27;31397:329;;;31513:12;31527;31496:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31464:95;;;;;;31449:110;;31397:329;;;31664:12;31678;31647:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31615:95;;;;;;31600:110;;31397:329;31334:403;31329:3;;;;;:::i;:::-;;;;31291:446;;;;31772:11;;31756:12;:27;31749:34;;;31149:642;;;;:::o;1046:723::-;1102:13;1332:1;1323:5;:10;1319:53;;;1350:10;;;;;;;;;;;;;;;;;;;;;1319:53;1382:12;1397:5;1382:20;;1413:14;1438:78;1453:1;1445:4;:9;1438:78;;1471:8;;;;;:::i;:::-;;;;1502:2;1494:10;;;;;:::i;:::-;;;1438:78;;;1526:19;1558:6;1548:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1526:39;;1576:154;1592:1;1583:5;:10;1576:154;;1620:1;1610:11;;;;;:::i;:::-;;;1687:2;1679:5;:10;;;;:::i;:::-;1666:2;:24;;;;:::i;:::-;1653:39;;1636:6;1643;1636:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1716:2;1707:11;;;;;:::i;:::-;;;1576:154;;;1754:6;1740:21;;;;;1046:723;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:307::-;2301:1;2311:113;2325:6;2322:1;2319:13;2311:113;;;2410:1;2405:3;2401:11;2395:18;2391:1;2386:3;2382:11;2375:39;2347:2;2344:1;2340:10;2335:15;;2311:113;;;2442:6;2439:1;2436:13;2433:101;;;2522:1;2513:6;2508:3;2504:16;2497:27;2433:101;2282:258;2233:307;;;:::o;2546:102::-;2587:6;2638:2;2634:7;2629:2;2622:5;2618:14;2614:28;2604:38;;2546:102;;;:::o;2654:364::-;2742:3;2770:39;2803:5;2770:39;:::i;:::-;2825:71;2889:6;2884:3;2825:71;:::i;:::-;2818:78;;2905:52;2950:6;2945:3;2938:4;2931:5;2927:16;2905:52;:::i;:::-;2982:29;3004:6;2982:29;:::i;:::-;2977:3;2973:39;2966:46;;2746:272;2654:364;;;;:::o;3024:313::-;3137:4;3175:2;3164:9;3160:18;3152:26;;3224:9;3218:4;3214:20;3210:1;3199:9;3195:17;3188:47;3252:78;3325:4;3316:6;3252:78;:::i;:::-;3244:86;;3024:313;;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:329::-;3675:6;3724:2;3712:9;3703:7;3699:23;3695:32;3692:119;;;3730:79;;:::i;:::-;3692:119;3850:1;3875:53;3920:7;3911:6;3900:9;3896:22;3875:53;:::i;:::-;3865:63;;3821:117;3616:329;;;;:::o;3951:126::-;3988:7;4028:42;4021:5;4017:54;4006:65;;3951:126;;;:::o;4083:96::-;4120:7;4149:24;4167:5;4149:24;:::i;:::-;4138:35;;4083:96;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:89::-;5951:7;5991:6;5984:5;5980:18;5969:29;;5915:89;;;:::o;6010:120::-;6082:23;6099:5;6082:23;:::i;:::-;6075:5;6072:34;6062:62;;6120:1;6117;6110:12;6062:62;6010:120;:::o;6136:137::-;6181:5;6219:6;6206:20;6197:29;;6235:32;6261:5;6235:32;:::i;:::-;6136:137;;;;:::o;6279:327::-;6337:6;6386:2;6374:9;6365:7;6361:23;6357:32;6354:119;;;6392:79;;:::i;:::-;6354:119;6512:1;6537:52;6581:7;6572:6;6561:9;6557:22;6537:52;:::i;:::-;6527:62;;6483:116;6279:327;;;;:::o;6612:117::-;6721:1;6718;6711:12;6735:117;6844:1;6841;6834:12;6858:180;6906:77;6903:1;6896:88;7003:4;7000:1;6993:15;7027:4;7024:1;7017:15;7044:281;7127:27;7149:4;7127:27;:::i;:::-;7119:6;7115:40;7257:6;7245:10;7242:22;7221:18;7209:10;7206:34;7203:62;7200:88;;;7268:18;;:::i;:::-;7200:88;7308:10;7304:2;7297:22;7087:238;7044:281;;:::o;7331:129::-;7365:6;7392:20;;:::i;:::-;7382:30;;7421:33;7449:4;7441:6;7421:33;:::i;:::-;7331:129;;;:::o;7466:308::-;7528:4;7618:18;7610:6;7607:30;7604:56;;;7640:18;;:::i;:::-;7604:56;7678:29;7700:6;7678:29;:::i;:::-;7670:37;;7762:4;7756;7752:15;7744:23;;7466:308;;;:::o;7780:154::-;7864:6;7859:3;7854;7841:30;7926:1;7917:6;7912:3;7908:16;7901:27;7780:154;;;:::o;7940:412::-;8018:5;8043:66;8059:49;8101:6;8059:49;:::i;:::-;8043:66;:::i;:::-;8034:75;;8132:6;8125:5;8118:21;8170:4;8163:5;8159:16;8208:3;8199:6;8194:3;8190:16;8187:25;8184:112;;;8215:79;;:::i;:::-;8184:112;8305:41;8339:6;8334:3;8329;8305:41;:::i;:::-;8024:328;7940:412;;;;;:::o;8372:340::-;8428:5;8477:3;8470:4;8462:6;8458:17;8454:27;8444:122;;8485:79;;:::i;:::-;8444:122;8602:6;8589:20;8627:79;8702:3;8694:6;8687:4;8679:6;8675:17;8627:79;:::i;:::-;8618:88;;8434:278;8372:340;;;;:::o;8718:509::-;8787:6;8836:2;8824:9;8815:7;8811:23;8807:32;8804:119;;;8842:79;;:::i;:::-;8804:119;8990:1;8979:9;8975:17;8962:31;9020:18;9012:6;9009:30;9006:117;;;9042:79;;:::i;:::-;9006:117;9147:63;9202:7;9193:6;9182:9;9178:22;9147:63;:::i;:::-;9137:73;;8933:287;8718:509;;;;:::o;9233:329::-;9292:6;9341:2;9329:9;9320:7;9316:23;9312:32;9309:119;;;9347:79;;:::i;:::-;9309:119;9467:1;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9438:117;9233:329;;;;:::o;9568:77::-;9605:7;9634:5;9623:16;;9568:77;;;:::o;9651:122::-;9724:24;9742:5;9724:24;:::i;:::-;9717:5;9714:35;9704:63;;9763:1;9760;9753:12;9704:63;9651:122;:::o;9779:139::-;9825:5;9863:6;9850:20;9841:29;;9879:33;9906:5;9879:33;:::i;:::-;9779:139;;;;:::o;9924:329::-;9983:6;10032:2;10020:9;10011:7;10007:23;10003:32;10000:119;;;10038:79;;:::i;:::-;10000:119;10158:1;10183:53;10228:7;10219:6;10208:9;10204:22;10183:53;:::i;:::-;10173:63;;10129:117;9924:329;;;;:::o;10259:118::-;10346:24;10364:5;10346:24;:::i;:::-;10341:3;10334:37;10259:118;;:::o;10383:222::-;10476:4;10514:2;10503:9;10499:18;10491:26;;10527:71;10595:1;10584:9;10580:17;10571:6;10527:71;:::i;:::-;10383:222;;;;:::o;10611:116::-;10681:21;10696:5;10681:21;:::i;:::-;10674:5;10671:32;10661:60;;10717:1;10714;10707:12;10661:60;10611:116;:::o;10733:133::-;10776:5;10814:6;10801:20;10792:29;;10830:30;10854:5;10830:30;:::i;:::-;10733:133;;;;:::o;10872:468::-;10937:6;10945;10994:2;10982:9;10973:7;10969:23;10965:32;10962:119;;;11000:79;;:::i;:::-;10962:119;11120:1;11145:53;11190:7;11181:6;11170:9;11166:22;11145:53;:::i;:::-;11135:63;;11091:117;11247:2;11273:50;11315:7;11306:6;11295:9;11291:22;11273:50;:::i;:::-;11263:60;;11218:115;10872:468;;;;;:::o;11346:311::-;11423:4;11513:18;11505:6;11502:30;11499:56;;;11535:18;;:::i;:::-;11499:56;11585:4;11577:6;11573:17;11565:25;;11645:4;11639;11635:15;11627:23;;11346:311;;;:::o;11663:117::-;11772:1;11769;11762:12;11803:710;11899:5;11924:81;11940:64;11997:6;11940:64;:::i;:::-;11924:81;:::i;:::-;11915:90;;12025:5;12054:6;12047:5;12040:21;12088:4;12081:5;12077:16;12070:23;;12141:4;12133:6;12129:17;12121:6;12117:30;12170:3;12162:6;12159:15;12156:122;;;12189:79;;:::i;:::-;12156:122;12304:6;12287:220;12321:6;12316:3;12313:15;12287:220;;;12396:3;12425:37;12458:3;12446:10;12425:37;:::i;:::-;12420:3;12413:50;12492:4;12487:3;12483:14;12476:21;;12363:144;12347:4;12342:3;12338:14;12331:21;;12287:220;;;12291:21;11905:608;;11803:710;;;;;:::o;12536:370::-;12607:5;12656:3;12649:4;12641:6;12637:17;12633:27;12623:122;;12664:79;;:::i;:::-;12623:122;12781:6;12768:20;12806:94;12896:3;12888:6;12881:4;12873:6;12869:17;12806:94;:::i;:::-;12797:103;;12613:293;12536:370;;;;:::o;12912:682::-;13004:6;13012;13061:2;13049:9;13040:7;13036:23;13032:32;13029:119;;;13067:79;;:::i;:::-;13029:119;13187:1;13212:52;13256:7;13247:6;13236:9;13232:22;13212:52;:::i;:::-;13202:62;;13158:116;13341:2;13330:9;13326:18;13313:32;13372:18;13364:6;13361:30;13358:117;;;13394:79;;:::i;:::-;13358:117;13499:78;13569:7;13560:6;13549:9;13545:22;13499:78;:::i;:::-;13489:88;;13284:303;12912:682;;;;;:::o;13600:307::-;13661:4;13751:18;13743:6;13740:30;13737:56;;;13773:18;;:::i;:::-;13737:56;13811:29;13833:6;13811:29;:::i;:::-;13803:37;;13895:4;13889;13885:15;13877:23;;13600:307;;;:::o;13913:410::-;13990:5;14015:65;14031:48;14072:6;14031:48;:::i;:::-;14015:65;:::i;:::-;14006:74;;14103:6;14096:5;14089:21;14141:4;14134:5;14130:16;14179:3;14170:6;14165:3;14161:16;14158:25;14155:112;;;14186:79;;:::i;:::-;14155:112;14276:41;14310:6;14305:3;14300;14276:41;:::i;:::-;13996:327;13913:410;;;;;:::o;14342:338::-;14397:5;14446:3;14439:4;14431:6;14427:17;14423:27;14413:122;;14454:79;;:::i;:::-;14413:122;14571:6;14558:20;14596:78;14670:3;14662:6;14655:4;14647:6;14643:17;14596:78;:::i;:::-;14587:87;;14403:277;14342:338;;;;:::o;14686:943::-;14781:6;14789;14797;14805;14854:3;14842:9;14833:7;14829:23;14825:33;14822:120;;;14861:79;;:::i;:::-;14822:120;14981:1;15006:53;15051:7;15042:6;15031:9;15027:22;15006:53;:::i;:::-;14996:63;;14952:117;15108:2;15134:53;15179:7;15170:6;15159:9;15155:22;15134:53;:::i;:::-;15124:63;;15079:118;15236:2;15262:53;15307:7;15298:6;15287:9;15283:22;15262:53;:::i;:::-;15252:63;;15207:118;15392:2;15381:9;15377:18;15364:32;15423:18;15415:6;15412:30;15409:117;;;15445:79;;:::i;:::-;15409:117;15550:62;15604:7;15595:6;15584:9;15580:22;15550:62;:::i;:::-;15540:72;;15335:287;14686:943;;;;;;;:::o;15635:474::-;15703:6;15711;15760:2;15748:9;15739:7;15735:23;15731:32;15728:119;;;15766:79;;:::i;:::-;15728:119;15886:1;15911:53;15956:7;15947:6;15936:9;15932:22;15911:53;:::i;:::-;15901:63;;15857:117;16013:2;16039:53;16084:7;16075:6;16064:9;16060:22;16039:53;:::i;:::-;16029:63;;15984:118;15635:474;;;;;:::o;16115:180::-;16163:77;16160:1;16153:88;16260:4;16257:1;16250:15;16284:4;16281:1;16274:15;16301:320;16345:6;16382:1;16376:4;16372:12;16362:22;;16429:1;16423:4;16419:12;16450:18;16440:81;;16506:4;16498:6;16494:17;16484:27;;16440:81;16568:2;16560:6;16557:14;16537:18;16534:38;16531:84;;;16587:18;;:::i;:::-;16531:84;16352:269;16301:320;;;:::o;16627:164::-;16767:16;16763:1;16755:6;16751:14;16744:40;16627:164;:::o;16797:366::-;16939:3;16960:67;17024:2;17019:3;16960:67;:::i;:::-;16953:74;;17036:93;17125:3;17036:93;:::i;:::-;17154:2;17149:3;17145:12;17138:19;;16797:366;;;:::o;17169:419::-;17335:4;17373:2;17362:9;17358:18;17350:26;;17422:9;17416:4;17412:20;17408:1;17397:9;17393:17;17386:47;17450:131;17576:4;17450:131;:::i;:::-;17442:139;;17169:419;;;:::o;17594:160::-;17734:12;17730:1;17722:6;17718:14;17711:36;17594:160;:::o;17760:366::-;17902:3;17923:67;17987:2;17982:3;17923:67;:::i;:::-;17916:74;;17999:93;18088:3;17999:93;:::i;:::-;18117:2;18112:3;18108:12;18101:19;;17760:366;;;:::o;18132:419::-;18298:4;18336:2;18325:9;18321:18;18313:26;;18385:9;18379:4;18375:20;18371:1;18360:9;18356:17;18349:47;18413:131;18539:4;18413:131;:::i;:::-;18405:139;;18132:419;;;:::o;18557:167::-;18697:19;18693:1;18685:6;18681:14;18674:43;18557:167;:::o;18730:366::-;18872:3;18893:67;18957:2;18952:3;18893:67;:::i;:::-;18886:74;;18969:93;19058:3;18969:93;:::i;:::-;19087:2;19082:3;19078:12;19071:19;;18730:366;;;:::o;19102:419::-;19268:4;19306:2;19295:9;19291:18;19283:26;;19355:9;19349:4;19345:20;19341:1;19330:9;19326:17;19319:47;19383:131;19509:4;19383:131;:::i;:::-;19375:139;;19102:419;;;:::o;19527:180::-;19575:77;19572:1;19565:88;19672:4;19669:1;19662:15;19696:4;19693:1;19686:15;19713:305;19753:3;19772:20;19790:1;19772:20;:::i;:::-;19767:25;;19806:20;19824:1;19806:20;:::i;:::-;19801:25;;19960:1;19892:66;19888:74;19885:1;19882:81;19879:107;;;19966:18;;:::i;:::-;19879:107;20010:1;20007;20003:9;19996:16;;19713:305;;;;:::o;20024:348::-;20064:7;20087:20;20105:1;20087:20;:::i;:::-;20082:25;;20121:20;20139:1;20121:20;:::i;:::-;20116:25;;20309:1;20241:66;20237:74;20234:1;20231:81;20226:1;20219:9;20212:17;20208:105;20205:131;;;20316:18;;:::i;:::-;20205:131;20364:1;20361;20357:9;20346:20;;20024:348;;;;:::o;20378:182::-;20518:34;20514:1;20506:6;20502:14;20495:58;20378:182;:::o;20566:366::-;20708:3;20729:67;20793:2;20788:3;20729:67;:::i;:::-;20722:74;;20805:93;20894:3;20805:93;:::i;:::-;20923:2;20918:3;20914:12;20907:19;;20566:366;;;:::o;20938:419::-;21104:4;21142:2;21131:9;21127:18;21119:26;;21191:9;21185:4;21181:20;21177:1;21166:9;21162:17;21155:47;21219:131;21345:4;21219:131;:::i;:::-;21211:139;;20938:419;;;:::o;21363:180::-;21411:77;21408:1;21401:88;21508:4;21505:1;21498:15;21532:4;21529:1;21522:15;21549:180;21597:77;21594:1;21587:88;21694:4;21691:1;21684:15;21718:4;21715:1;21708:15;21735:185;21775:1;21792:20;21810:1;21792:20;:::i;:::-;21787:25;;21826:20;21844:1;21826:20;:::i;:::-;21821:25;;21865:1;21855:35;;21870:18;;:::i;:::-;21855:35;21912:1;21909;21905:9;21900:14;;21735:185;;;;:::o;21926:233::-;21965:3;21988:24;22006:5;21988:24;:::i;:::-;21979:33;;22034:66;22027:5;22024:77;22021:103;;;22104:18;;:::i;:::-;22021:103;22151:1;22144:5;22140:13;22133:20;;21926:233;;;:::o;22165:168::-;22248:11;22282:6;22277:3;22270:19;22322:4;22317:3;22313:14;22298:29;;22165:168;;;;:::o;22339:114::-;;:::o;22459:362::-;22600:3;22621:65;22684:1;22679:3;22621:65;:::i;:::-;22614:72;;22695:93;22784:3;22695:93;:::i;:::-;22813:1;22808:3;22804:11;22797:18;;22459:362;;;:::o;22827:748::-;23076:4;23114:3;23103:9;23099:19;23091:27;;23128:71;23196:1;23185:9;23181:17;23172:6;23128:71;:::i;:::-;23209:72;23277:2;23266:9;23262:18;23253:6;23209:72;:::i;:::-;23291;23359:2;23348:9;23344:18;23335:6;23291:72;:::i;:::-;23410:9;23404:4;23400:20;23395:2;23384:9;23380:18;23373:48;23438:130;23563:4;23438:130;:::i;:::-;23430:138;;22827:748;;;;;;:::o;23581:141::-;23637:5;23668:6;23662:13;23653:22;;23684:32;23710:5;23684:32;:::i;:::-;23581:141;;;;:::o;23728:349::-;23797:6;23846:2;23834:9;23825:7;23821:23;23817:32;23814:119;;;23852:79;;:::i;:::-;23814:119;23972:1;23997:63;24052:7;24043:6;24032:9;24028:22;23997:63;:::i;:::-;23987:73;;23943:127;23728:349;;;;:::o;24083:166::-;24223:18;24219:1;24211:6;24207:14;24200:42;24083:166;:::o;24255:366::-;24397:3;24418:67;24482:2;24477:3;24418:67;:::i;:::-;24411:74;;24494:93;24583:3;24494:93;:::i;:::-;24612:2;24607:3;24603:12;24596:19;;24255:366;;;:::o;24627:419::-;24793:4;24831:2;24820:9;24816:18;24808:26;;24880:9;24874:4;24870:20;24866:1;24855:9;24851:17;24844:47;24908:131;25034:4;24908:131;:::i;:::-;24900:139;;24627:419;;;:::o;25052:98::-;25103:6;25137:5;25131:12;25121:22;;25052:98;;;:::o;25156:360::-;25242:3;25270:38;25302:5;25270:38;:::i;:::-;25324:70;25387:6;25382:3;25324:70;:::i;:::-;25317:77;;25403:52;25448:6;25443:3;25436:4;25429:5;25425:16;25403:52;:::i;:::-;25480:29;25502:6;25480:29;:::i;:::-;25475:3;25471:39;25464:46;;25246:270;25156:360;;;;:::o;25522:640::-;25717:4;25755:3;25744:9;25740:19;25732:27;;25769:71;25837:1;25826:9;25822:17;25813:6;25769:71;:::i;:::-;25850:72;25918:2;25907:9;25903:18;25894:6;25850:72;:::i;:::-;25932;26000:2;25989:9;25985:18;25976:6;25932:72;:::i;:::-;26051:9;26045:4;26041:20;26036:2;26025:9;26021:18;26014:48;26079:76;26150:4;26141:6;26079:76;:::i;:::-;26071:84;;25522:640;;;;;;;:::o;26168:148::-;26270:11;26307:3;26292:18;;26168:148;;;;:::o;26322:141::-;26371:4;26394:3;26386:11;;26417:3;26414:1;26407:14;26451:4;26448:1;26438:18;26430:26;;26322:141;;;:::o;26493:845::-;26596:3;26633:5;26627:12;26662:36;26688:9;26662:36;:::i;:::-;26714:89;26796:6;26791:3;26714:89;:::i;:::-;26707:96;;26834:1;26823:9;26819:17;26850:1;26845:137;;;;26996:1;26991:341;;;;26812:520;;26845:137;26929:4;26925:9;26914;26910:25;26905:3;26898:38;26965:6;26960:3;26956:16;26949:23;;26845:137;;26991:341;27058:38;27090:5;27058:38;:::i;:::-;27118:1;27132:154;27146:6;27143:1;27140:13;27132:154;;;27220:7;27214:14;27210:1;27205:3;27201:11;27194:35;27270:1;27261:7;27257:15;27246:26;;27168:4;27165:1;27161:12;27156:17;;27132:154;;;27315:6;27310:3;27306:16;27299:23;;26998:334;;26812:520;;26600:738;;26493:845;;;;:::o;27344:377::-;27450:3;27478:39;27511:5;27478:39;:::i;:::-;27533:89;27615:6;27610:3;27533:89;:::i;:::-;27526:96;;27631:52;27676:6;27671:3;27664:4;27657:5;27653:16;27631:52;:::i;:::-;27708:6;27703:3;27699:16;27692:23;;27454:267;27344:377;;;;:::o;27727:429::-;27904:3;27926:92;28014:3;28005:6;27926:92;:::i;:::-;27919:99;;28035:95;28126:3;28117:6;28035:95;:::i;:::-;28028:102;;28147:3;28140:10;;27727:429;;;;;:::o;28162:164::-;28302:16;28298:1;28290:6;28286:14;28279:40;28162:164;:::o;28332:366::-;28474:3;28495:67;28559:2;28554:3;28495:67;:::i;:::-;28488:74;;28571:93;28660:3;28571:93;:::i;:::-;28689:2;28684:3;28680:12;28673:19;;28332:366;;;:::o;28704:419::-;28870:4;28908:2;28897:9;28893:18;28885:26;;28957:9;28951:4;28947:20;28943:1;28932:9;28928:17;28921:47;28985:131;29111:4;28985:131;:::i;:::-;28977:139;;28704:419;;;:::o;29129:94::-;29162:8;29210:5;29206:2;29202:14;29181:35;;29129:94;;;:::o;29229:::-;29268:7;29297:20;29311:5;29297:20;:::i;:::-;29286:31;;29229:94;;;:::o;29329:100::-;29368:7;29397:26;29417:5;29397:26;:::i;:::-;29386:37;;29329:100;;;:::o;29435:157::-;29540:45;29560:24;29578:5;29560:24;:::i;:::-;29540:45;:::i;:::-;29535:3;29528:58;29435:157;;:::o;29598:256::-;29710:3;29725:75;29796:3;29787:6;29725:75;:::i;:::-;29825:2;29820:3;29816:12;29809:19;;29845:3;29838:10;;29598:256;;;;:::o;29860:79::-;29899:7;29928:5;29917:16;;29860:79;;;:::o;29945:157::-;30050:45;30070:24;30088:5;30070:24;:::i;:::-;30050:45;:::i;:::-;30045:3;30038:58;29945:157;;:::o;30108:397::-;30248:3;30263:75;30334:3;30325:6;30263:75;:::i;:::-;30363:2;30358:3;30354:12;30347:19;;30376:75;30447:3;30438:6;30376:75;:::i;:::-;30476:2;30471:3;30467:12;30460:19;;30496:3;30489:10;;30108:397;;;;;:::o;30511:191::-;30551:4;30571:20;30589:1;30571:20;:::i;:::-;30566:25;;30605:20;30623:1;30605:20;:::i;:::-;30600:25;;30644:1;30641;30638:8;30635:34;;;30649:18;;:::i;:::-;30635:34;30694:1;30691;30687:9;30679:17;;30511:191;;;;:::o;30708:176::-;30740:1;30757:20;30775:1;30757:20;:::i;:::-;30752:25;;30791:20;30809:1;30791:20;:::i;:::-;30786:25;;30830:1;30820:35;;30835:18;;:::i;:::-;30820:35;30876:1;30873;30869:9;30864:14;;30708:176;;;;:::o

Swarm Source

ipfs://0c2e0460c844c825d381d5e8c278d78899cae4fd568bd5cfc9fa0091aa270fbf

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

The Whitetail Wall Hangers Club is an NFT collection of 5,555 hand-drawn whitetail deer living on the ETH blockchain. These digital collectibles honor the beauty of the North American whitetail, as well as the hunters & photographers who discovered them. Your Whitetail NFT dou...

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.