ETH Price: $3,436.69 (-2.27%)
Gas: 3 Gwei

Contract

0xb4858D3A7422Acaa1F561C95580f6cbd17A46ab9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Settle All176929222023-07-14 16:36:11374 days ago1689352571IN
0xb4858D3A...d17A46ab9
0 ETH0.1817936450.89290824
Bid176926992023-07-14 15:50:47374 days ago1689349847IN
0xb4858D3A...d17A46ab9
0.833 ETH0.001531134.23753745
Bid176926692023-07-14 15:44:47374 days ago1689349487IN
0xb4858D3A...d17A46ab9
0.77 ETH0.0015110733.78974913
Bid On Favs176926312023-07-14 15:37:11374 days ago1689349031IN
0xb4858D3A...d17A46ab9
2.0625 ETH0.0031440136.53668275
Bid176926242023-07-14 15:35:47374 days ago1689348947IN
0xb4858D3A...d17A46ab9
0.605 ETH0.0016841437.65976928
Bid176926132023-07-14 15:33:35374 days ago1689348815IN
0xb4858D3A...d17A46ab9
0.495 ETH0.0018701541.8192312
Bid176926032023-07-14 15:31:23374 days ago1689348683IN
0xb4858D3A...d17A46ab9
0.55 ETH0.0019772544.21405232
Bid176925722023-07-14 15:25:11374 days ago1689348311IN
0xb4858D3A...d17A46ab9
0.55 ETH0.0018799242.03756864
Bid176925682023-07-14 15:24:23374 days ago1689348263IN
0xb4858D3A...d17A46ab9
0.505 ETH0.001944943.49074449
Bid176925672023-07-14 15:24:11374 days ago1689348251IN
0xb4858D3A...d17A46ab9
0.671 ETH0.0020006244.73660189
Bid176925562023-07-14 15:21:59374 days ago1689348119IN
0xb4858D3A...d17A46ab9
0.726 ETH0.0020293945.38010304
Bid176925522023-07-14 15:21:11374 days ago1689348071IN
0xb4858D3A...d17A46ab9
0.63 ETH0.0019967244.64945409
Bid176925472023-07-14 15:20:11374 days ago1689348011IN
0xb4858D3A...d17A46ab9
0.55 ETH0.0019915444.53368278
Bid176925432023-07-14 15:19:23374 days ago1689347963IN
0xb4858D3A...d17A46ab9
0.51 ETH0.0020467845.76896844
Bid176925432023-07-14 15:19:23374 days ago1689347963IN
0xb4858D3A...d17A46ab9
0.45 ETH0.0020467845.76896844
Bid176925362023-07-14 15:17:59374 days ago1689347879IN
0xb4858D3A...d17A46ab9
0.455 ETH0.0021811648.7738101
Bid176925342023-07-14 15:17:35374 days ago1689347855IN
0xb4858D3A...d17A46ab9
0.5 ETH0.0021854748.87012932
Bid176925302023-07-14 15:16:47374 days ago1689347807IN
0xb4858D3A...d17A46ab9
0.572 ETH0.0021781948.70729518
Bid176925292023-07-14 15:16:35374 days ago1689347795IN
0xb4858D3A...d17A46ab9
0.625 ETH0.0021520148.12190852
Bid176925282023-07-14 15:16:23374 days ago1689347783IN
0xb4858D3A...d17A46ab9
0.66 ETH0.0022519650.35691696
Bid176925242023-07-14 15:15:35374 days ago1689347735IN
0xb4858D3A...d17A46ab9
0.55 ETH0.002364852.88025263
Bid176925232023-07-14 15:15:23374 days ago1689347723IN
0xb4858D3A...d17A46ab9
0.5 ETH0.0023333752.1773516
Bid176925152023-07-14 15:13:47374 days ago1689347627IN
0xb4858D3A...d17A46ab9
0.61 ETH0.0025549557.13223639
Bid176925152023-07-14 15:13:47374 days ago1689347627IN
0xb4858D3A...d17A46ab9
1.37 ETH0.0025549557.13223639
Bid176925152023-07-14 15:13:47374 days ago1689347627IN
0xb4858D3A...d17A46ab9
0.81 ETH0.0025549557.13223639
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
20.639275 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
12.932 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.1125 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.1125 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.15 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.1125 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.11385 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.08415 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.15 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.1155 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.2055 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.12495 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.1035 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.10065 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.15 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.0825 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.0825 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.103125 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.0693 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.1125 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.07575 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.0894 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.07755 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.0726 ETH
176929222023-07-14 16:36:11374 days ago1689352571
0xb4858D3A...d17A46ab9
0.1089 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xedbB3ecE...8587a73B3
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
MultiAuction

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-10
*/

// File: .deps/MultiAuction 6/libs/SafeTransferLib.sol


pragma solidity >=0.8.4;

/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
///
/// @dev Note:
/// - For ETH transfers, please use `forceSafeTransferETH` for gas griefing protection.
/// - For ERC20s, this implementation won't check that a token has code,
/// responsibility is delegated to the caller.
library SafeTransferLib {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ETH transfer has failed.
    error ETHTransferFailed();

    /// @dev The ERC20 `transferFrom` has failed.
    error TransferFromFailed();

    /// @dev The ERC20 `transfer` has failed.
    error TransferFailed();

    /// @dev The ERC20 `approve` has failed.
    error ApproveFailed();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         CONSTANTS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Suggested gas stipend for contract receiving ETH
    /// that disallows any storage writes.
    uint256 internal constant _GAS_STIPEND_NO_STORAGE_WRITES = 2300;

    /// @dev Suggested gas stipend for contract receiving ETH to perform a few
    /// storage reads and writes, but low enough to prevent griefing.
    /// Multiply by a small constant (e.g. 2), if needed.
    uint256 internal constant _GAS_STIPEND_NO_GRIEF = 100000;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       ETH OPERATIONS                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Sends `amount` (in wei) ETH to `to`.
    /// Reverts upon failure.
    ///
    /// Note: This implementation does NOT protect against gas griefing.
    /// Please use `forceSafeTransferETH` for gas griefing protection.
    function safeTransferETH(address to, uint256 amount) internal {
        /// @solidity memory-safe-assembly
        assembly {
            // Transfer the ETH and check if it succeeded or not.
            if iszero(call(gas(), to, amount, 0, 0, 0, 0)) {
                // Store the function selector of `ETHTransferFailed()`.
                mstore(0x00, 0xb12d13eb)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
        }
    }

    /// @dev Force sends `amount` (in wei) ETH to `to`, with a `gasStipend`.
    /// The `gasStipend` can be set to a low enough value to prevent
    /// storage writes or gas griefing.
    ///
    /// If sending via the normal procedure fails, force sends the ETH by
    /// creating a temporary contract which uses `SELFDESTRUCT` to force send the ETH.
    ///
    /// Reverts if the current contract has insufficient balance.
    function forceSafeTransferETH(address to, uint256 amount, uint256 gasStipend) internal {
        /// @solidity memory-safe-assembly
        assembly {
            // If insufficient balance, revert.
            if lt(selfbalance(), amount) {
                // Store the function selector of `ETHTransferFailed()`.
                mstore(0x00, 0xb12d13eb)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
            // Transfer the ETH and check if it succeeded or not.
            if iszero(call(gasStipend, to, amount, 0, 0, 0, 0)) {
                mstore(0x00, to) // Store the address in scratch space.
                mstore8(0x0b, 0x73) // Opcode `PUSH20`.
                mstore8(0x20, 0xff) // Opcode `SELFDESTRUCT`.
                // We can directly use `SELFDESTRUCT` in the contract creation.
                // Compatible with `SENDALL`: https://eips.ethereum.org/EIPS/eip-4758
                if iszero(create(amount, 0x0b, 0x16)) {
                    // To coerce gas estimation to provide enough gas for the `create` above.
                    if iszero(gt(gas(), 1000000)) { revert(0, 0) }
                }
            }
        }
    }

    /// @dev Force sends `amount` (in wei) ETH to `to`, with a gas stipend
    /// equal to `_GAS_STIPEND_NO_GRIEF`. This gas stipend is a reasonable default
    /// for 99% of cases and can be overridden with the three-argument version of this
    /// function if necessary.
    ///
    /// If sending via the normal procedure fails, force sends the ETH by
    /// creating a temporary contract which uses `SELFDESTRUCT` to force send the ETH.
    ///
    /// Reverts if the current contract has insufficient balance.
    function forceSafeTransferETH(address to, uint256 amount) internal {
        // Manually inlined because the compiler doesn't inline functions with branches.
        /// @solidity memory-safe-assembly
        assembly {
            // If insufficient balance, revert.
            if lt(selfbalance(), amount) {
                // Store the function selector of `ETHTransferFailed()`.
                mstore(0x00, 0xb12d13eb)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
            // Transfer the ETH and check if it succeeded or not.
            if iszero(call(_GAS_STIPEND_NO_GRIEF, to, amount, 0, 0, 0, 0)) {
                mstore(0x00, to) // Store the address in scratch space.
                mstore8(0x0b, 0x73) // Opcode `PUSH20`.
                mstore8(0x20, 0xff) // Opcode `SELFDESTRUCT`.
                // We can directly use `SELFDESTRUCT` in the contract creation.
                // Compatible with `SENDALL`: https://eips.ethereum.org/EIPS/eip-4758
                if iszero(create(amount, 0x0b, 0x16)) {
                    // To coerce gas estimation to provide enough gas for the `create` above.
                    if iszero(gt(gas(), 1000000)) { revert(0, 0) }
                }
            }
        }
    }

    /// @dev Sends `amount` (in wei) ETH to `to`, with a `gasStipend`.
    /// The `gasStipend` can be set to a low enough value to prevent
    /// storage writes or gas griefing.
    ///
    /// Simply use `gasleft()` for `gasStipend` if you don't need a gas stipend.
    ///
    /// Note: Does NOT revert upon failure.
    /// Returns whether the transfer of ETH is successful instead.
    function trySafeTransferETH(address to, uint256 amount, uint256 gasStipend)
        internal
        returns (bool success)
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Transfer the ETH and check if it succeeded or not.
            success := call(gasStipend, to, amount, 0, 0, 0, 0)
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                      ERC20 OPERATIONS                      */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Sends `amount` of ERC20 `token` from `from` to `to`.
    /// Reverts upon failure.
    ///
    /// The `from` account must have at least `amount` approved for
    /// the current contract to manage.
    function safeTransferFrom(address token, address from, address to, uint256 amount) internal {
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40) // Cache the free memory pointer.

            mstore(0x60, amount) // Store the `amount` argument.
            mstore(0x40, to) // Store the `to` argument.
            mstore(0x2c, shl(96, from)) // Store the `from` argument.
            // Store the function selector of `transferFrom(address,address,uint256)`.
            mstore(0x0c, 0x23b872dd000000000000000000000000)

            if iszero(
                and( // The arguments of `and` are evaluated from right to left.
                    // Set success to whether the call reverted, if not we check it either
                    // returned exactly 1 (can't just be non-zero data), or had no return data.
                    or(eq(mload(0x00), 1), iszero(returndatasize())),
                    call(gas(), token, 0, 0x1c, 0x64, 0x00, 0x20)
                )
            ) {
                // Store the function selector of `TransferFromFailed()`.
                mstore(0x00, 0x7939f424)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            mstore(0x60, 0) // Restore the zero slot to zero.
            mstore(0x40, m) // Restore the free memory pointer.
        }
    }

    /// @dev Sends all of ERC20 `token` from `from` to `to`.
    /// Reverts upon failure.
    ///
    /// The `from` account must have their entire balance approved for
    /// the current contract to manage.
    function safeTransferAllFrom(address token, address from, address to)
        internal
        returns (uint256 amount)
    {
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40) // Cache the free memory pointer.

            mstore(0x40, to) // Store the `to` argument.
            mstore(0x2c, shl(96, from)) // Store the `from` argument.
            // Store the function selector of `balanceOf(address)`.
            mstore(0x0c, 0x70a08231000000000000000000000000)
            if iszero(
                and( // The arguments of `and` are evaluated from right to left.
                    gt(returndatasize(), 0x1f), // At least 32 bytes returned.
                    staticcall(gas(), token, 0x1c, 0x24, 0x60, 0x20)
                )
            ) {
                // Store the function selector of `TransferFromFailed()`.
                mstore(0x00, 0x7939f424)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            // Store the function selector of `transferFrom(address,address,uint256)`.
            mstore(0x00, 0x23b872dd)
            // The `amount` argument is already written to the memory word at 0x60.
            amount := mload(0x60)

            if iszero(
                and( // The arguments of `and` are evaluated from right to left.
                    // Set success to whether the call reverted, if not we check it either
                    // returned exactly 1 (can't just be non-zero data), or had no return data.
                    or(eq(mload(0x00), 1), iszero(returndatasize())),
                    call(gas(), token, 0, 0x1c, 0x64, 0x00, 0x20)
                )
            ) {
                // Store the function selector of `TransferFromFailed()`.
                mstore(0x00, 0x7939f424)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            mstore(0x60, 0) // Restore the zero slot to zero.
            mstore(0x40, m) // Restore the free memory pointer.
        }
    }

    /// @dev Sends `amount` of ERC20 `token` from the current contract to `to`.
    /// Reverts upon failure.
    function safeTransfer(address token, address to, uint256 amount) internal {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x14, to) // Store the `to` argument.
            mstore(0x34, amount) // Store the `amount` argument.
            // Store the function selector of `transfer(address,uint256)`.
            mstore(0x00, 0xa9059cbb000000000000000000000000)

            if iszero(
                and( // The arguments of `and` are evaluated from right to left.
                    // Set success to whether the call reverted, if not we check it either
                    // returned exactly 1 (can't just be non-zero data), or had no return data.
                    or(eq(mload(0x00), 1), iszero(returndatasize())),
                    call(gas(), token, 0, 0x10, 0x44, 0x00, 0x20)
                )
            ) {
                // Store the function selector of `TransferFailed()`.
                mstore(0x00, 0x90b8ec18)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
            // Restore the part of the free memory pointer that was overwritten.
            mstore(0x34, 0)
        }
    }

    /// @dev Sends all of ERC20 `token` from the current contract to `to`.
    /// Reverts upon failure.
    function safeTransferAll(address token, address to) internal returns (uint256 amount) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, 0x70a08231) // Store the function selector of `balanceOf(address)`.
            mstore(0x20, address()) // Store the address of the current contract.
            if iszero(
                and( // The arguments of `and` are evaluated from right to left.
                    gt(returndatasize(), 0x1f), // At least 32 bytes returned.
                    staticcall(gas(), token, 0x1c, 0x24, 0x34, 0x20)
                )
            ) {
                // Store the function selector of `TransferFailed()`.
                mstore(0x00, 0x90b8ec18)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            mstore(0x14, to) // Store the `to` argument.
            // The `amount` argument is already written to the memory word at 0x34.
            amount := mload(0x34)
            // Store the function selector of `transfer(address,uint256)`.
            mstore(0x00, 0xa9059cbb000000000000000000000000)

            if iszero(
                and( // The arguments of `and` are evaluated from right to left.
                    // Set success to whether the call reverted, if not we check it either
                    // returned exactly 1 (can't just be non-zero data), or had no return data.
                    or(eq(mload(0x00), 1), iszero(returndatasize())),
                    call(gas(), token, 0, 0x10, 0x44, 0x00, 0x20)
                )
            ) {
                // Store the function selector of `TransferFailed()`.
                mstore(0x00, 0x90b8ec18)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
            // Restore the part of the free memory pointer that was overwritten.
            mstore(0x34, 0)
        }
    }

    /// @dev Sets `amount` of ERC20 `token` for `to` to manage on behalf of the current contract.
    /// Reverts upon failure.
    function safeApprove(address token, address to, uint256 amount) internal {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x14, to) // Store the `to` argument.
            mstore(0x34, amount) // Store the `amount` argument.
            // Store the function selector of `approve(address,uint256)`.
            mstore(0x00, 0x095ea7b3000000000000000000000000)

            if iszero(
                and( // The arguments of `and` are evaluated from right to left.
                    // Set success to whether the call reverted, if not we check it either
                    // returned exactly 1 (can't just be non-zero data), or had no return data.
                    or(eq(mload(0x00), 1), iszero(returndatasize())),
                    call(gas(), token, 0, 0x10, 0x44, 0x00, 0x20)
                )
            ) {
                // Store the function selector of `ApproveFailed()`.
                mstore(0x00, 0x3e3f8f73)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
            // Restore the part of the free memory pointer that was overwritten.
            mstore(0x34, 0)
        }
    }

    /// @dev Returns the amount of ERC20 `token` owned by `account`.
    /// Returns zero if the `token` does not exist.
    function balanceOf(address token, address account) internal view returns (uint256 amount) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x14, account) // Store the `account` argument.
            // Store the function selector of `balanceOf(address)`.
            mstore(0x00, 0x70a08231000000000000000000000000)
            amount :=
                mul(
                    mload(0x20),
                    and( // The arguments of `and` are evaluated from right to left.
                        gt(returndatasize(), 0x1f), // At least 32 bytes returned.
                        staticcall(gas(), token, 0x10, 0x24, 0x20, 0x20)
                    )
                )
        }
    }
}
// File: .deps/MultiAuction 6/libs/MerkleProofLib.sol


pragma solidity >=0.8.0;

/// @notice Gas optimized merkle proof verification library.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)
/// @author Modified from Solady (https://github.com/Vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)
library MerkleProofLib {
    function verify(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool isValid) {
        /// @solidity memory-safe-assembly
        assembly {
            if proof.length {
                // Left shifting by 5 is like multiplying by 32.
                let end := add(proof.offset, shl(5, proof.length))

                // Initialize offset to the offset of the proof in calldata.
                let offset := proof.offset

                // Iterate over proof elements to compute root hash.
                // prettier-ignore
                for {} 1 {} {
                    // Slot where the leaf should be put in scratch space. If
                    // leaf > calldataload(offset): slot 32, otherwise: slot 0.
                    let leafSlot := shl(5, gt(leaf, calldataload(offset)))

                    // Store elements to hash contiguously in scratch space.
                    // The xor puts calldataload(offset) in whichever slot leaf
                    // is not occupying, so 0 if leafSlot is 32, and 32 otherwise.
                    mstore(leafSlot, leaf)
                    mstore(xor(leafSlot, 32), calldataload(offset))

                    // Reuse leaf to store the hash to reduce stack operations.
                    leaf := keccak256(0, 64) // Hash both slots of scratch space.

                    offset := add(offset, 32) // Shift 1 word per cycle.

                    // prettier-ignore
                    if iszero(lt(offset, end)) { break }
                }
            }

            isValid := eq(leaf, root) // The proof is valid if the roots match.
        }
    }
}
// File: .deps/MultiAuction 6/interfaces/IDelegationRegistry.sol


pragma solidity ^0.8.17;

/**
 * @title An immutable registry contract to be deployed as a standalone primitive
 * @dev See EIP-5639, new project launches can read previous cold wallet -> hot wallet delegations
 * from here and integrate those permissions into their flow
 */
interface IDelegationRegistry {
    /// @notice Delegation type
    enum DelegationType {
        NONE,
        ALL,
        CONTRACT,
        TOKEN
    }

    /// @notice Info about a single delegation, used for onchain enumeration
    struct DelegationInfo {
        DelegationType type_;
        address vault;
        address delegate;
        address contract_;
        uint256 tokenId;
    }

    /// @notice Info about a single contract-level delegation
    struct ContractDelegation {
        address contract_;
        address delegate;
    }

    /// @notice Info about a single token-level delegation
    struct TokenDelegation {
        address contract_;
        uint256 tokenId;
        address delegate;
    }

    /// @notice Emitted when a user delegates their entire wallet
    event DelegateForAll(address vault, address delegate, bool value);

    /// @notice Emitted when a user delegates a specific contract
    event DelegateForContract(address vault, address delegate, address contract_, bool value);

    /// @notice Emitted when a user delegates a specific token
    event DelegateForToken(address vault, address delegate, address contract_, uint256 tokenId, bool value);

    /// @notice Emitted when a user revokes all delegations
    event RevokeAllDelegates(address vault);

    /// @notice Emitted when a user revoes all delegations for a given delegate
    event RevokeDelegate(address vault, address delegate);

    /**
     * -----------  WRITE -----------
     */

    /**
     * @notice Allow the delegate to act on your behalf for all contracts
     * @param delegate The hotwallet to act on your behalf
     * @param value Whether to enable or disable delegation for this address, true for setting and false for revoking
     */
    function delegateForAll(address delegate, bool value) external;

    /**
     * @notice Allow the delegate to act on your behalf for a specific contract
     * @param delegate The hotwallet to act on your behalf
     * @param contract_ The address for the contract you're delegating
     * @param value Whether to enable or disable delegation for this address, true for setting and false for revoking
     */
    function delegateForContract(address delegate, address contract_, bool value) external;

    /**
     * @notice Allow the delegate to act on your behalf for a specific token
     * @param delegate The hotwallet to act on your behalf
     * @param contract_ The address for the contract you're delegating
     * @param tokenId The token id for the token you're delegating
     * @param value Whether to enable or disable delegation for this address, true for setting and false for revoking
     */
    function delegateForToken(address delegate, address contract_, uint256 tokenId, bool value) external;

    /**
     * @notice Revoke all delegates
     */
    function revokeAllDelegates() external;

    /**
     * @notice Revoke a specific delegate for all their permissions
     * @param delegate The hotwallet to revoke
     */
    function revokeDelegate(address delegate) external;

    /**
     * @notice Remove yourself as a delegate for a specific vault
     * @param vault The vault which delegated to the msg.sender, and should be removed
     */
    function revokeSelf(address vault) external;

    /**
     * -----------  READ -----------
     */

    /**
     * @notice Returns all active delegations a given delegate is able to claim on behalf of
     * @param delegate The delegate that you would like to retrieve delegations for
     * @return info Array of DelegationInfo structs
     */
    function getDelegationsByDelegate(address delegate) external view returns (DelegationInfo[] memory);

    /**
     * @notice Returns an array of wallet-level delegates for a given vault
     * @param vault The cold wallet who issued the delegation
     * @return addresses Array of wallet-level delegates for a given vault
     */
    function getDelegatesForAll(address vault) external view returns (address[] memory);

    /**
     * @notice Returns an array of contract-level delegates for a given vault and contract
     * @param vault The cold wallet who issued the delegation
     * @param contract_ The address for the contract you're delegating
     * @return addresses Array of contract-level delegates for a given vault and contract
     */
    function getDelegatesForContract(address vault, address contract_) external view returns (address[] memory);

    /**
     * @notice Returns an array of contract-level delegates for a given vault's token
     * @param vault The cold wallet who issued the delegation
     * @param contract_ The address for the contract holding the token
     * @param tokenId The token id for the token you're delegating
     * @return addresses Array of contract-level delegates for a given vault's token
     */
    function getDelegatesForToken(address vault, address contract_, uint256 tokenId)
        external
        view
        returns (address[] memory);

    /**
     * @notice Returns all contract-level delegations for a given vault
     * @param vault The cold wallet who issued the delegations
     * @return delegations Array of ContractDelegation structs
     */
    function getContractLevelDelegations(address vault)
        external
        view
        returns (ContractDelegation[] memory delegations);

    /**
     * @notice Returns all token-level delegations for a given vault
     * @param vault The cold wallet who issued the delegations
     * @return delegations Array of TokenDelegation structs
     */
    function getTokenLevelDelegations(address vault) external view returns (TokenDelegation[] memory delegations);

    /**
     * @notice Returns true if the address is delegated to act on the entire vault
     * @param delegate The hotwallet to act on your behalf
     * @param vault The cold wallet who issued the delegation
     */
    function checkDelegateForAll(address delegate, address vault) external view returns (bool);

    /**
     * @notice Returns true if the address is delegated to act on your behalf for a token contract or an entire vault
     * @param delegate The hotwallet to act on your behalf
     * @param contract_ The address for the contract you're delegating
     * @param vault The cold wallet who issued the delegation
     */
    function checkDelegateForContract(address delegate, address vault, address contract_)
        external
        view
        returns (bool);

    /**
     * @notice Returns true if the address is delegated to act on your behalf for a specific token, the token's contract or an entire vault
     * @param delegate The hotwallet to act on your behalf
     * @param contract_ The address for the contract you're delegating
     * @param tokenId The token id for the token you're delegating
     * @param vault The cold wallet who issued the delegation
     */
    function checkDelegateForToken(address delegate, address vault, address contract_, uint256 tokenId)
        external
        view
        returns (bool);
}
// File: .deps/MultiAuction 6/MultiAuction.sol



pragma solidity ^0.8.17;




contract MultiAuction {
  uint256 private constant BPS = 10_000;
  address private constant DELEGATION_REGISTRY = 0x00000000000076A84feF008CDAbe6409d2FE638B;
  address private constant FPP = 0xA8A425864dB32fCBB459Bf527BdBb8128e6abF21;
  uint256 private constant FPP_PROJECT_ID = 3;
  uint256 private constant MIN_BID = 0.01 ether;
  uint256 private constant MIN_BID_INCREASE = 1_000;
  uint256 private constant MINT_PASS_REBATE = 1_500;
  uint256 private constant SAFE_GAS_LIMIT = 30_000;
  IBaseContract public immutable BASE_CONTRACT;
  uint256 public immutable MAX_SUPPLY;


  uint256 public auctionStartTime;
  address public beneficiary1;
  address public beneficiary2;
  bool public paused;
  bytes32 public settlementRoot;

  struct Auction {
    uint24 offsetFromEnd;
    uint72 amount;
    address bidder;
  }

  mapping(uint256 => Auction) public tokenIdToAuction;

  event BidMade(uint256 indexed tokenId, address bidder, uint256 amount, uint256 timestamp);
  event Settled(uint256 indexed tokenId, uint256 timestamp);

  constructor(
    address baseContract,
    uint256 startTime,
    uint256 maxSupply
  ) {
    BASE_CONTRACT = IBaseContract(baseContract);
    auctionStartTime = startTime;
    MAX_SUPPLY = maxSupply;
    beneficiary1 = msg.sender;
    beneficiary2 = msg.sender;
  }

  function bid(
    uint256 tokenId
  ) external payable {
    require(!paused, 'Bidding is paused');
    require(isAuctionActive(tokenId), 'Auction Inactive');
    require(0 < tokenId && tokenId <= MAX_SUPPLY, 'Invalid tokenId');

    Auction memory highestBid = tokenIdToAuction[tokenId];

    require(
      msg.value >= (highestBid.amount * (BPS + MIN_BID_INCREASE) / BPS)
      && msg.value >= MIN_BID,
      'Bid not high enough'
    );

    uint256 refundAmount;
    address refundBidder;
    uint256 offset = highestBid.offsetFromEnd;
    uint256 endTime = auctionEndTime(tokenId);

    if (highestBid.amount > 0) {
      refundAmount = highestBid.amount;
      refundBidder = highestBid.bidder;
    }

    if (endTime - block.timestamp < 15 minutes) {
      offset += block.timestamp + 15 minutes - endTime;
    }

    tokenIdToAuction[tokenId] = Auction(uint24(offset), uint72(msg.value), msg.sender);

    emit BidMade(tokenId, msg.sender, msg.value, block.timestamp);

    if (refundAmount > 0) {
      SafeTransferLib.forceSafeTransferETH(refundBidder, refundAmount, SAFE_GAS_LIMIT);
    }
  }

  function bidOnFavs(
    uint256[] calldata favorites,
    uint256[] calldata expectedPrices
  ) external payable {
    require(!paused, 'Bidding is paused');
    require(favorites.length == expectedPrices.length);

    uint256 totalFailed; uint256 expectedTotal;
    for(uint256 i; i < favorites.length; ++i) {
      uint256 tokenId = favorites[i];
      uint256 expectedPrice = expectedPrices[i];
      expectedTotal += expectedPrice;
      require(0 < tokenId && tokenId <= MAX_SUPPLY, 'Invalid tokenId');
      if(!isAuctionActive(tokenId)) {
        totalFailed += expectedPrice;
        break;
      }

      Auction memory highestBid = tokenIdToAuction[tokenId];
      if (
        expectedPrice >= (highestBid.amount * (BPS + MIN_BID_INCREASE) / BPS)
        && expectedPrice >= MIN_BID
      ) {
        uint256 refundAmount;
        address refundBidder;
        uint256 offset = highestBid.offsetFromEnd;
        uint256 endTime = auctionEndTime(tokenId);

        if (highestBid.amount > 0) {
          refundAmount = highestBid.amount;
          refundBidder = highestBid.bidder;
        }

        if (endTime - block.timestamp < 15 minutes) {
          offset += block.timestamp + 15 minutes - endTime;
        }

        tokenIdToAuction[tokenId] = Auction(uint24(offset), uint72(expectedPrice), msg.sender);

        emit BidMade(tokenId, msg.sender, expectedPrice, block.timestamp);

        if (refundAmount > 0) {
          SafeTransferLib.forceSafeTransferETH(refundBidder, refundAmount, SAFE_GAS_LIMIT);
        }
      } else{
        totalFailed += expectedPrice;
      }
    }

    require(msg.value >= expectedTotal);
    if (totalFailed > 0) {
      SafeTransferLib.forceSafeTransferETH(msg.sender, totalFailed, SAFE_GAS_LIMIT);
    }
  }

  function settleAuction(
    uint256 tokenId,
    uint256 mintPassId,
    bytes32[] calldata proof
  ) external payable {
    require(settlementRoot != bytes32(0));
    Auction memory highestBid = tokenIdToAuction[tokenId];
    require(highestBid.bidder == msg.sender || owner() == msg.sender);
    require(0 < tokenId && tokenId <= MAX_SUPPLY, 'Invalid tokenId');
    require(isAuctionOver(tokenId), 'Auction for this tokenId is still active');

    uint256 amountToPay = highestBid.amount;
    if (amountToPay > 0) {
      BASE_CONTRACT.mint(highestBid.bidder, tokenId);
    } else {
      require(msg.sender == owner(), 'Ownable: caller is not the owner');
      require(msg.value >= MIN_BID, 'Bid not high enough');
      amountToPay = msg.value;

      BASE_CONTRACT.mint(msg.sender, tokenId);
    }

    uint256 totalRebate = 0;
    bool mintPassValid;
    if (mintPassId < 1_000) {
      address passHolder = IFPP(FPP).ownerOf(mintPassId);
      mintPassValid = mintPassId < 1_000 && IFPP(FPP).passUses(mintPassId, FPP_PROJECT_ID) < 1 && (
        passHolder == highestBid.bidder ||
        IDelegationRegistry(DELEGATION_REGISTRY).checkDelegateForToken(
          highestBid.bidder,
          passHolder,
          FPP,
          mintPassId
        )
      ) && (
        MerkleProofLib.verify(proof, settlementRoot, keccak256(abi.encodePacked(passHolder, mintPassId)))
      );
    }

    if (mintPassValid) {
      IFPP(FPP).logPassUse(mintPassId, FPP_PROJECT_ID);
      totalRebate = amountToPay * (MINT_PASS_REBATE) / BPS;
    }

    tokenIdToAuction[tokenId].bidder = address(0);
    emit Settled(tokenId, block.timestamp);

    if (totalRebate > 0) {
      SafeTransferLib.forceSafeTransferETH(highestBid.bidder, totalRebate, SAFE_GAS_LIMIT);
      SafeTransferLib.forceSafeTransferETH(beneficiary2, amountToPay - totalRebate, SAFE_GAS_LIMIT);
    } else {
      SafeTransferLib.forceSafeTransferETH(beneficiary1, amountToPay, SAFE_GAS_LIMIT);
    }
  }

  function settleAll(
    uint256 startId,
    uint256 endId,
    bytes calldata passData
  ) external payable onlyOwner {
    require(settlementRoot == bytes32(0), 'settleAll not active');
    require(passData.length == 2 * (endId - startId + 1), 'Invalid passData length');
    require(0 < startId && endId <= MAX_SUPPLY, 'Invalid tokenId');

    uint256 unclaimedCost; uint256 amountForBene1; uint256 amountForBene2;
    for (uint256 tokenId = startId; tokenId <= endId; ++tokenId) {
      Auction memory highestBid = tokenIdToAuction[tokenId];
      require(isAuctionOver(tokenId), 'Auction for this tokenId is still active');

      uint256 amountToPay = highestBid.amount;
      if (amountToPay > 0) {
        BASE_CONTRACT.mint(highestBid.bidder, tokenId);
      } else {
        amountToPay = MIN_BID;
        unclaimedCost += MIN_BID;
        BASE_CONTRACT.mint(msg.sender, tokenId);
      }

      uint256 totalRebate = 0;
      uint256 mintPassId = uint16(bytes2(passData[(tokenId - 1) * 2: tokenId * 2]));
      bool mintPassValid;
      if (mintPassId < 1_000) {
        address passHolder = IFPP(FPP).ownerOf(mintPassId);
        mintPassValid = mintPassId < 1_000 && IFPP(FPP).passUses(mintPassId, FPP_PROJECT_ID) < 1 && (
          passHolder == highestBid.bidder ||
          IDelegationRegistry(DELEGATION_REGISTRY).checkDelegateForToken(
            highestBid.bidder,
            passHolder,
            FPP,
            mintPassId
          )
        );
      }
  
      if (mintPassValid) {
        IFPP(FPP).logPassUse(mintPassId, FPP_PROJECT_ID);
        totalRebate = amountToPay * (MINT_PASS_REBATE) / BPS;
      }
  
      tokenIdToAuction[tokenId].bidder = address(0);
      emit Settled(tokenId, block.timestamp);
  
      if (totalRebate > 0) {
        SafeTransferLib.forceSafeTransferETH(highestBid.bidder, totalRebate, SAFE_GAS_LIMIT);
        amountForBene2 += amountToPay - totalRebate;
      } else {
        amountForBene1 += amountToPay;
      }
    }

    require(msg.value >= unclaimedCost, "Insufficient funds sent for unclaimed");
    SafeTransferLib.forceSafeTransferETH(beneficiary1, amountForBene1, SAFE_GAS_LIMIT);
    SafeTransferLib.forceSafeTransferETH(beneficiary2, amountForBene2, SAFE_GAS_LIMIT);
  }

  function owner() public view returns (address) {
    return BASE_CONTRACT.owner();
  }

  modifier onlyOwner {
    require(msg.sender == owner(), 'Ownable: caller is not the owner');
    _;
  }

  function emergencyWithdraw() external onlyOwner {
    require(block.timestamp > auctionStartTime + 48 hours);
    (bool success,) = msg.sender.call{value: address(this).balance}("");
    require(success);
  }

  function enableSelfSettlement(
    bytes32 root
  ) external onlyOwner {
    settlementRoot = root;
  }

  function rescheduele(
    uint256 newStartTime
  ) external onlyOwner {
    require(auctionStartTime > block.timestamp);
    auctionStartTime = newStartTime;
  }

  function setBeneficiary(
    address _beneficiary1,
    address _beneficiary2
  ) external onlyOwner {
    beneficiary1 = _beneficiary1;
    beneficiary2 = _beneficiary2;
  }

  function setPaused(
    bool _paused
  ) external onlyOwner {
    paused = _paused;
  }

  function auctionEndTime(
    uint256 tokenId
  ) public view returns (uint256) {
    return auctionStartTime + 24 hours + tokenIdToAuction[tokenId].offsetFromEnd;
  }

  function isAuctionActive(
    uint256 tokenId
  ) public view returns (bool) {
    uint256 endTime = auctionEndTime(tokenId);
    return (block.timestamp >= auctionStartTime && block.timestamp < endTime);
  }

  function isAuctionOver(
    uint256 tokenId
  ) public view returns (bool) {
    uint256 endTime = auctionEndTime(tokenId);
    return (block.timestamp >= endTime);
  }
}

interface IFPP {
  function logPassUse(uint256 tokenId, uint256 projectId) external;
  function ownerOf(uint256 tokenId) external returns (address);
  function passUses(uint256 tokenId, uint256 projectId) external returns (uint256);
}

interface IBaseContract {
  function mint(address to, uint256 tokenId) external;
  function owner() external view returns (address);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"baseContract","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"BidMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Settled","type":"event"},{"inputs":[],"name":"BASE_CONTRACT","outputs":[{"internalType":"contract IBaseContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"auctionEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auctionStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beneficiary1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beneficiary2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"bid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"favorites","type":"uint256[]"},{"internalType":"uint256[]","name":"expectedPrices","type":"uint256[]"}],"name":"bidOnFavs","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"enableSelfSettlement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isAuctionActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isAuctionOver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStartTime","type":"uint256"}],"name":"rescheduele","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary1","type":"address"},{"internalType":"address","name":"_beneficiary2","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"},{"internalType":"bytes","name":"passData","type":"bytes"}],"name":"settleAll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"mintPassId","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"settleAuction","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"settlementRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToAuction","outputs":[{"internalType":"uint24","name":"offsetFromEnd","type":"uint24"},{"internalType":"uint72","name":"amount","type":"uint72"},{"internalType":"address","name":"bidder","type":"address"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x60806040526004361061012a5760003560e01c8063902b4dde116100ab578063e71f7b151161006f578063e71f7b1514610374578063eb54f9ec14610394578063f3f2f0bc146103aa578063f52564ec146103ca578063fae01c92146103ea578063fc97d3681461040a57600080fd5b8063902b4dde14610292578063a98e67db146102a5578063b5084283146102c5578063db2e21bc146102d8578063e3b14757146102ed57600080fd5b8063454a2ab3116100f2578063454a2ab3146101f15780634f52ccfa146102045780635c975abb1461023c578063777de7041461025d5780638da5cb5b1461027d57600080fd5b80631033a6631461012f57806316c38b3c146101445780632c104a921461016457806332cb6b0c14610199578063368c6c99146101db575b600080fd5b61014261013d366004611ba9565b61043e565b005b34801561015057600080fd5b5061014261015f366004611c23565b6107b6565b34801561017057600080fd5b5061018461017f366004611c40565b61080c565b60405190151581526020015b60405180910390f35b3480156101a557600080fd5b506101cd7f000000000000000000000000000000000000000000000000000000000000003281565b604051908152602001610190565b3480156101e757600080fd5b506101cd60035481565b6101426101ff366004611c40565b610822565b34801561021057600080fd5b50600154610224906001600160a01b031681565b6040516001600160a01b039091168152602001610190565b34801561024857600080fd5b5060025461018490600160a01b900460ff1681565b34801561026957600080fd5b506101cd610278366004611c40565b610b46565b34801561028957600080fd5b50610224610b7c565b6101426102a0366004611c59565b610c05565b3480156102b157600080fd5b506101426102c0366004611c40565b611221565b6101426102d3366004611ca0565b61125e565b3480156102e457600080fd5b50610142611951565b3480156102f957600080fd5b50610342610308366004611c40565b60046020526000908152604090205462ffffff811690630100000081046001600160481b031690600160601b90046001600160a01b031683565b6040805162ffffff90941684526001600160481b0390921660208401526001600160a01b031690820152606001610190565b34801561038057600080fd5b5061018461038f366004611c40565b6119fc565b3480156103a057600080fd5b506101cd60005481565b3480156103b657600080fd5b50600254610224906001600160a01b031681565b3480156103d657600080fd5b506101426103e5366004611d35565b611a22565b3480156103f657600080fd5b50610142610405366004611c40565b611a88565b34801561041657600080fd5b506102247f0000000000000000000000000f596401388b94ff169ec23f72198c63ddb8766b81565b600254600160a01b900460ff16156104915760405162461bcd60e51b8152602060048201526011602482015270109a59191a5b99c81a5cc81c185d5cd959607a1b60448201526064015b60405180910390fd5b82811461049d57600080fd5b60008060005b8581101561078d5760008787838181106104bf576104bf611d6e565b90506020020135905060008686848181106104dc576104dc611d6e565b90506020020135905080846104f19190611d9a565b935081600010801561052357507f00000000000000000000000000000000000000000000000000000000000000328211155b61053f5760405162461bcd60e51b815260040161048890611dad565b610548826119fc565b61055f576105568186611d9a565b9450505061078d565b6000828152600460209081526040918290208251606081018452905462ffffff81168252630100000081046001600160481b031692820192909252600160601b9091046001600160a01b0316918101919091526127106105c16103e882611d9a565b82602001516001600160481b03166105d99190611dd6565b6105e39190611ded565b82101580156105f95750662386f26fc100008210155b1561076c578051600090819062ffffff168161061487610b46565b60208601519091506001600160481b0316156106425784602001516001600160481b03169350846040015192505b61038461064f4283611e0f565b1015610679578061066242610384611d9a565b61066c9190611e0f565b6106769083611d9a565b91505b6040805160608101825262ffffff80851682526001600160481b03808a1660208085019182523385870181815260008f815260049093529187902095518654935192516001600160a01b0316600160601b026001600160601b03939095166301000000026001600160601b0319909416951694909417919091171617909155905188917f476bd0783cc4e83d617258e2b86038c40cb0dba0cca615fcc28e7ccb3d66cbed9161074891908a9042906001600160a01b039390931683526020830191909152604082015260600190565b60405180910390a28315610763576107638385617530611ad3565b50505050610779565b6107768287611d9a565b95505b5050508061078690611e22565b90506104a3565b508034101561079b57600080fd5b81156107ae576107ae3383617530611ad3565b505050505050565b6107be610b7c565b6001600160a01b0316336001600160a01b0316146107ee5760405162461bcd60e51b815260040161048890611e3b565b60028054911515600160a01b0260ff60a01b19909216919091179055565b60008061081883610b46565b4210159392505050565b600254600160a01b900460ff16156108705760405162461bcd60e51b8152602060048201526011602482015270109a59191a5b99c81a5cc81c185d5cd959607a1b6044820152606401610488565b610879816119fc565b6108b85760405162461bcd60e51b815260206004820152601060248201526f41756374696f6e20496e61637469766560801b6044820152606401610488565b8060001080156108e857507f00000000000000000000000000000000000000000000000000000000000000328111155b6109045760405162461bcd60e51b815260040161048890611dad565b6000818152600460209081526040918290208251606081018452905462ffffff81168252630100000081046001600160481b031692820192909252600160601b9091046001600160a01b0316918101919091526127106109666103e882611d9a565b82602001516001600160481b031661097e9190611dd6565b6109889190611ded565b341015801561099e5750662386f26fc100003410155b6109e05760405162461bcd60e51b8152602060048201526013602482015272084d2c840dcdee840d0d2ced040cadcdeeaced606b1b6044820152606401610488565b8051600090819062ffffff16816109f686610b46565b60208601519091506001600160481b031615610a245784602001516001600160481b03169350846040015192505b610384610a314283611e0f565b1015610a5b5780610a4442610384611d9a565b610a4e9190611e0f565b610a589083611d9a565b91505b6040805160608101825262ffffff80851682526001600160481b033481811660208086019182523386880181815260008f815260049093529188902096518754935192516001600160a01b0316600160601b026001600160601b03939096166301000000026001600160601b0319909416961695909517919091171691909117909255915188927f476bd0783cc4e83d617258e2b86038c40cb0dba0cca615fcc28e7ccb3d66cbed92610b2b9242906001600160a01b039390931683526020830191909152604082015260600190565b60405180910390a283156107ae576107ae8385617530611ad3565b600081815260046020526040812054815462ffffff90911690610b6c9062015180611d9a565b610b769190611d9a565b92915050565b60007f0000000000000000000000000f596401388b94ff169ec23f72198c63ddb8766b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c009190611e70565b905090565b600354610c1157600080fd5b6000848152600460209081526040918290208251606081018452905462ffffff81168252630100000081046001600160481b031692820192909252600160601b9091046001600160a01b031691810182905290331480610c80575033610c75610b7c565b6001600160a01b0316145b610c8957600080fd5b846000108015610cb957507f00000000000000000000000000000000000000000000000000000000000000328511155b610cd55760405162461bcd60e51b815260040161048890611dad565b610cde8561080c565b610cfa5760405162461bcd60e51b815260040161048890611e8d565b60208101516001600160481b03168015610d9c5760408281015190516340c10f1960e01b81526001600160a01b039182166004820152602481018890527f0000000000000000000000000f596401388b94ff169ec23f72198c63ddb8766b909116906340c10f1990604401600060405180830381600087803b158015610d7f57600080fd5b505af1158015610d93573d6000803e3d6000fd5b50505050610ea5565b610da4610b7c565b6001600160a01b0316336001600160a01b031614610dd45760405162461bcd60e51b815260040161048890611e3b565b662386f26fc10000341015610e215760405162461bcd60e51b8152602060048201526013602482015272084d2c840dcdee840d0d2ced040cadcdeeaced606b1b6044820152606401610488565b506040516340c10f1960e01b81523360048201526024810186905234907f0000000000000000000000000f596401388b94ff169ec23f72198c63ddb8766b6001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b505050505b6000806103e88710156110d9576040516331a9108f60e11b81526004810188905260009073a8a425864db32fcbb459bf527bdbb8128e6abf2190636352211e906024016020604051808303816000875af1158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190611e70565b90506103e888108015610fbb5750604051636017d14160e11b8152600481018990526003602482015260019073a8a425864db32fcbb459bf527bdbb8128e6abf219063c02fa282906044016020604051808303816000875af1158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb99190611ed5565b105b8015611086575084604001516001600160a01b0316816001600160a01b0316148061108657506040858101519051631574d39f60e31b81526001600160a01b039182166004820152908216602482015273a8a425864db32fcbb459bf527bdbb8128e6abf216044820152606481018990526d76a84fef008cdabe6409d2fe638b9063aba69cf890608401602060405180830381865afa158015611062573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110869190611eee565b80156110d557506003546040516001600160601b0319606084901b166020820152603481018a90526110d591899189919060540160405160208183030381529060405280519060200120611b23565b9150505b801561116957604051638c6c4d2d60e01b8152600481018890526003602482015273a8a425864db32fcbb459bf527bdbb8128e6abf2190638c6c4d2d90604401600060405180830381600087803b15801561113357600080fd5b505af1158015611147573d6000803e3d6000fd5b505050506127106105dc8461115c9190611dd6565b6111669190611ded565b91505b6000888152600460205260409081902080546001600160601b031690555188907ff5b268a3ff315cc44ccceeef86259c9e8eef81ceecb14001543809115380dd62906111b89042815260200190565b60405180910390a281156111fe576111d7846040015183617530611ad3565b6002546111f9906001600160a01b03166111f18486611e0f565b617530611ad3565b611217565b600154611217906001600160a01b031684617530611ad3565b5050505050505050565b611229610b7c565b6001600160a01b0316336001600160a01b0316146112595760405162461bcd60e51b815260040161048890611e3b565b600355565b611266610b7c565b6001600160a01b0316336001600160a01b0316146112965760405162461bcd60e51b815260040161048890611e3b565b600354156112dd5760405162461bcd60e51b8152602060048201526014602482015273736574746c65416c6c206e6f742061637469766560601b6044820152606401610488565b6112e78484611e0f565b6112f2906001611d9a565b6112fd906002611dd6565b811461134b5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964207061737344617461206c656e6774680000000000000000006044820152606401610488565b83600010801561137b57507f00000000000000000000000000000000000000000000000000000000000000328311155b6113975760405162461bcd60e51b815260040161048890611dad565b60008080865b8681116118b7576000818152600460209081526040918290208251606081018452905462ffffff81168252630100000081046001600160481b031692820192909252600160601b9091046001600160a01b0316918101919091526114008261080c565b61141c5760405162461bcd60e51b815260040161048890611e8d565b60208101516001600160481b031680156114be5760408281015190516340c10f1960e01b81526001600160a01b039182166004820152602481018590527f0000000000000000000000000f596401388b94ff169ec23f72198c63ddb8766b909116906340c10f1990604401600060405180830381600087803b1580156114a157600080fd5b505af11580156114b5573d6000803e3d6000fd5b50505050611555565b50662386f26fc100006114d18187611d9a565b6040516340c10f1960e01b8152336004820152602481018590529096507f0000000000000000000000000f596401388b94ff169ec23f72198c63ddb8766b6001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561153c57600080fd5b505af1158015611550573d6000803e3d6000fd5b505050505b6000808989611565600188611e0f565b611570906002611dd6565b9061157c886002611dd6565b9261158993929190611f0b565b61159291611f35565b60f01c905060006103e882101561177b576040516331a9108f60e11b81526004810183905260009073a8a425864db32fcbb459bf527bdbb8128e6abf2190636352211e906024016020604051808303816000875af11580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190611e70565b90506103e8831080156116ac5750604051636017d14160e11b8152600481018490526003602482015260019073a8a425864db32fcbb459bf527bdbb8128e6abf219063c02fa282906044016020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa9190611ed5565b105b8015611777575085604001516001600160a01b0316816001600160a01b0316148061177757506040868101519051631574d39f60e31b81526001600160a01b039182166004820152908216602482015273a8a425864db32fcbb459bf527bdbb8128e6abf216044820152606481018490526d76a84fef008cdabe6409d2fe638b9063aba69cf890608401602060405180830381865afa158015611753573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117779190611eee565b9150505b801561180b57604051638c6c4d2d60e01b8152600481018390526003602482015273a8a425864db32fcbb459bf527bdbb8128e6abf2190638c6c4d2d90604401600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b505050506127106105dc856117fe9190611dd6565b6118089190611ded565b92505b6000868152600460205260409081902080546001600160601b031690555186907ff5b268a3ff315cc44ccceeef86259c9e8eef81ceecb14001543809115380dd629061185a9042815260200190565b60405180910390a2821561189457611879856040015184617530611ad3565b6118838385611e0f565b61188d9088611d9a565b96506118a1565b61189e8489611d9a565b97505b5050505050806118b090611e22565b905061139d565b50823410156119165760405162461bcd60e51b815260206004820152602560248201527f496e73756666696369656e742066756e64732073656e7420666f7220756e636c604482015264185a5b595960da1b6064820152608401610488565b60015461192f906001600160a01b031683617530611ad3565b600254611948906001600160a01b031682617530611ad3565b50505050505050565b611959610b7c565b6001600160a01b0316336001600160a01b0316146119895760405162461bcd60e51b815260040161048890611e3b565b600054611999906202a300611d9a565b42116119a457600080fd5b604051600090339047908381818185875af1925050503d80600081146119e6576040519150601f19603f3d011682016040523d82523d6000602084013e6119eb565b606091505b50509050806119f957600080fd5b50565b600080611a0883610b46565b90506000544210158015611a1b57508042105b9392505050565b611a2a610b7c565b6001600160a01b0316336001600160a01b031614611a5a5760405162461bcd60e51b815260040161048890611e3b565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b611a90610b7c565b6001600160a01b0316336001600160a01b031614611ac05760405162461bcd60e51b815260040161048890611e3b565b4260005411611ace57600080fd5b600055565b81471015611ae95763b12d13eb6000526004601cfd5b600080600080858786f1611b1e57826000526073600b5360ff6020536016600b83f0611b1e57620f42405a11611b1e57600080fd5b505050565b60008315611b55578360051b8501855b803580851160051b94855260209485185260406000209301818110611b335750505b501492915050565b60008083601f840112611b6f57600080fd5b50813567ffffffffffffffff811115611b8757600080fd5b6020830191508360208260051b8501011115611ba257600080fd5b9250929050565b60008060008060408587031215611bbf57600080fd5b843567ffffffffffffffff80821115611bd757600080fd5b611be388838901611b5d565b90965094506020870135915080821115611bfc57600080fd5b50611c0987828801611b5d565b95989497509550505050565b80151581146119f957600080fd5b600060208284031215611c3557600080fd5b8135611a1b81611c15565b600060208284031215611c5257600080fd5b5035919050565b60008060008060608587031215611c6f57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611c9457600080fd5b611c0987828801611b5d565b60008060008060608587031215611cb657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115611cdc57600080fd5b818701915087601f830112611cf057600080fd5b813581811115611cff57600080fd5b886020828501011115611d1157600080fd5b95989497505060200194505050565b6001600160a01b03811681146119f957600080fd5b60008060408385031215611d4857600080fd5b8235611d5381611d20565b91506020830135611d6381611d20565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610b7657610b76611d84565b6020808252600f908201526e125b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b8082028115828204841417610b7657610b76611d84565b600082611e0a57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b7657610b76611d84565b600060018201611e3457611e34611d84565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611e8257600080fd5b8151611a1b81611d20565b60208082526028908201527f41756374696f6e20666f72207468697320746f6b656e4964206973207374696c6040820152676c2061637469766560c01b606082015260800190565b600060208284031215611ee757600080fd5b5051919050565b600060208284031215611f0057600080fd5b8151611a1b81611c15565b60008085851115611f1b57600080fd5b83861115611f2857600080fd5b5050820193919092039150565b6001600160f01b03198135818116916002851015611f5d5780818660020360031b1b83161692505b50509291505056fea2646970667358221220821e31f2c4946f230994a41cc7aad62a1094d21b7f9e76818f016327f929033364736f6c63430008110033

Deployed Bytecode Sourcemap

26945:10216:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29436:1817;;;;;;:::i;:::-;;:::i;:::-;;36493:91;;;;;;;;;;-1:-1:-1;36493:91:0;;;;;:::i;:::-;;:::i;36985:173::-;;;;;;;;;;-1:-1:-1;36985:173:0;;;;;:::i;:::-;;:::i;:::-;;;1883:14:1;;1876:22;1858:41;;1846:2;1831:18;36985:173:0;;;;;;;;27494:35;;;;;;;;;;;;;;;;;;2056:25:1;;;2044:2;2029:18;27494:35:0;1910:177:1;27661:29:0;;;;;;;;;;;;;;;;28290:1140;;;;;;:::i;:::-;;:::i;27574:27::-;;;;;;;;;;-1:-1:-1;27574:27:0;;;;-1:-1:-1;;;;;27574:27:0;;;;;;-1:-1:-1;;;;;2438:32:1;;;2420:51;;2408:2;2393:18;27574:27:0;2274:203:1;27638:18:0;;;;;;;;;;-1:-1:-1;27638:18:0;;;;-1:-1:-1;;;27638:18:0;;;;;;36590:170;;;;;;;;;;-1:-1:-1;36590:170:0;;;;;:::i;:::-;;:::i;35598:88::-;;;;;;;;;;;;;:::i;31259:2019::-;;;;;;:::i;:::-;;:::i;36022:107::-;;;;;;;;;;-1:-1:-1;36022:107:0;;;;;:::i;:::-;;:::i;33284:2308::-;;;;;;:::i;:::-;;:::i;35804:212::-;;;;;;;;;;;;;:::i;27792:51::-;;;;;;;;;;-1:-1:-1;27792:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27792:51:0;;-1:-1:-1;;;27792:51:0;;-1:-1:-1;;;;;27792:51:0;;;;;;;4205:8:1;4193:21;;;4175:40;;-1:-1:-1;;;;;4251:33:1;;;4246:2;4231:18;;4224:61;-1:-1:-1;;;;;4321:32:1;4301:18;;;4294:60;4163:2;4148:18;27792:51:0;3977:383:1;36766:213:0;;;;;;;;;;-1:-1:-1;36766:213:0;;;;;:::i;:::-;;:::i;27538:31::-;;;;;;;;;;;;;;;;27606:27;;;;;;;;;;-1:-1:-1;27606:27:0;;;;-1:-1:-1;;;;;27606:27:0;;;36307:180;;;;;;;;;;-1:-1:-1;36307:180:0;;;;;:::i;:::-;;:::i;36135:166::-;;;;;;;;;;-1:-1:-1;36135:166:0;;;;;:::i;:::-;;:::i;27445:44::-;;;;;;;;;;;;;;;29436:1817;29568:6;;-1:-1:-1;;;29568:6:0;;;;29567:7;29559:37;;;;-1:-1:-1;;;29559:37:0;;5326:2:1;29559:37:0;;;5308:21:1;5365:2;5345:18;;;5338:30;-1:-1:-1;;;5384:18:1;;;5377:47;5441:18;;29559:37:0;;;;;;;;;29611:41;;;29603:50;;;;;;29662:19;29683:21;29715:9;29711:1372;29726:20;;;29711:1372;;;29762:15;29780:9;;29790:1;29780:12;;;;;;;:::i;:::-;;;;;;;29762:30;;29801:21;29825:14;;29840:1;29825:17;;;;;;;:::i;:::-;;;;;;;29801:41;;29868:13;29851:30;;;;;:::i;:::-;;;29902:7;29898:1;:11;:36;;;;;29924:10;29913:7;:21;;29898:36;29890:64;;;;-1:-1:-1;;;29890:64:0;;;;;;;:::i;:::-;29967:24;29983:7;29967:15;:24::i;:::-;29963:95;;30004:28;30019:13;30004:28;;:::i;:::-;;;30043:5;;;;29963:95;30068:25;30096;;;:16;:25;;;;;;;;;30068:53;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30068:53:0;;;;;;;;-1:-1:-1;;;30068:53:0;;;-1:-1:-1;;;;;30068:53:0;;;;;;;;27003:6;30183:22;27328:5;27003:6;30183:22;:::i;:::-;30162:10;:17;;;-1:-1:-1;;;;;30162:44:0;;;;;:::i;:::-;:50;;;;:::i;:::-;30144:13;:69;;:106;;;;;27269:10;30226:13;:24;;30144:106;30130:946;;;30350:24;;30271:20;;;;30333:41;;30271:20;30403:23;30418:7;30403:14;:23::i;:::-;30443:17;;;;30385:41;;-1:-1:-1;;;;;;30443:21:0;;30439:129;;30494:10;:17;;;-1:-1:-1;;;;;30479:32:0;;;30539:10;:17;;;30524:32;;30439:129;30612:10;30584:25;30594:15;30584:7;:25;:::i;:::-;:38;30580:117;;;30678:7;30647:28;:15;30665:10;30647:28;:::i;:::-;:38;;;;:::i;:::-;30637:48;;;;:::i;:::-;;;30580:117;30737:58;;;;;;;;;;;;;;-1:-1:-1;;;;;30737:58:0;;;;;;;;;;30784:10;30737:58;;;;;;-1:-1:-1;30709:25:0;;;:16;:25;;;;;;;:86;;;;;;;;-1:-1:-1;;;;;30709:86:0;-1:-1:-1;;;30709:86:0;-1:-1:-1;;;;;30709:86:0;;;;;;-1:-1:-1;;;;;;30709:86:0;;;;;;;;;;;;;;;;;;30813:60;;30726:7;;30813:60;;;;30784:10;30768:13;;30857:15;;-1:-1:-1;;;;;6956:32:1;;;;6938:51;;7020:2;7005:18;;6998:34;;;;7063:2;7048:18;;7041:34;6926:2;6911:18;;6736:345;30813:60:0;;;;;;;;30890:16;;30886:127;;30921:80;30958:12;30972;27434:6;30921:36;:80::i;:::-;30260:762;;;;30130:946;;;31038:28;31053:13;31038:28;;:::i;:::-;;;30130:946;29753:1330;;;29748:3;;;;:::i;:::-;;;29711:1372;;;;31112:13;31099:9;:26;;31091:35;;;;;;31137:15;;31133:115;;31163:77;31200:10;31212:11;27434:6;31163:36;:77::i;:::-;29552:1701;;29436:1817;;;;:::o;36493:91::-;35740:7;:5;:7::i;:::-;-1:-1:-1;;;;;35726:21:0;:10;-1:-1:-1;;;;;35726:21:0;;35718:66;;;;-1:-1:-1;;;35718:66:0;;;;;;;:::i;:::-;36562:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;36562:16:0::1;-1:-1:-1::0;;;;36562:16:0;;::::1;::::0;;;::::1;::::0;;36493:91::o;36985:173::-;37056:4;37069:15;37087:23;37102:7;37087:14;:23::i;:::-;37125:15;:26;;;36985:173;-1:-1:-1;;;36985:173:0:o;28290:1140::-;28363:6;;-1:-1:-1;;;28363:6:0;;;;28362:7;28354:37;;;;-1:-1:-1;;;28354:37:0;;5326:2:1;28354:37:0;;;5308:21:1;5365:2;5345:18;;;5338:30;-1:-1:-1;;;5384:18:1;;;5377:47;5441:18;;28354:37:0;5124:341:1;28354:37:0;28406:24;28422:7;28406:15;:24::i;:::-;28398:53;;;;-1:-1:-1;;;28398:53:0;;7789:2:1;28398:53:0;;;7771:21:1;7828:2;7808:18;;;7801:30;-1:-1:-1;;;7847:18:1;;;7840:46;7903:18;;28398:53:0;7587:340:1;28398:53:0;28470:7;28466:1;:11;:36;;;;;28492:10;28481:7;:21;;28466:36;28458:64;;;;-1:-1:-1;;;28458:64:0;;;;;;;:::i;:::-;28531:25;28559;;;:16;:25;;;;;;;;;28531:53;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28531:53:0;;;;;;;;-1:-1:-1;;;28531:53:0;;;-1:-1:-1;;;;;28531:53:0;;;;;;;;27003:6;28644:22;27328:5;27003:6;28644:22;:::i;:::-;28623:10;:17;;;-1:-1:-1;;;;;28623:44:0;;;;;:::i;:::-;:50;;;;:::i;:::-;28609:9;:65;;:96;;;;;27269:10;28685:9;:20;;28609:96;28593:149;;;;-1:-1:-1;;;28593:149:0;;8134:2:1;28593:149:0;;;8116:21:1;8173:2;8153:18;;;8146:30;-1:-1:-1;;;8192:18:1;;;8185:49;8251:18;;28593:149:0;7932:343:1;28593:149:0;28822:24;;28751:20;;;;28805:41;;28751:20;28871:23;28886:7;28871:14;:23::i;:::-;28907:17;;;;28853:41;;-1:-1:-1;;;;;;28907:21:0;;28903:117;;28954:10;:17;;;-1:-1:-1;;;;;28939:32:0;;;28995:10;:17;;;28980:32;;28903:117;29060:10;29032:25;29042:15;29032:7;:25;:::i;:::-;:38;29028:109;;;29122:7;29091:28;:15;29109:10;29091:28;:::i;:::-;:38;;;;:::i;:::-;29081:48;;;;:::i;:::-;;;29028:109;29173:54;;;;;;;;;;;;;;-1:-1:-1;;;;;29204:9:0;29173:54;;;;;;;;;;29216:10;29173:54;;;;;;-1:-1:-1;29145:25:0;;;:16;:25;;;;;;;:82;;;;;;;;-1:-1:-1;;;;;29145:82:0;-1:-1:-1;;;29145:82:0;-1:-1:-1;;;;;29145:82:0;;;;;;-1:-1:-1;;;;;;29145:82:0;;;;;;;;;;;;;;;;;;;;;29241:56;;29162:7;;29241:56;;;;29281:15;;-1:-1:-1;;;;;6956:32:1;;;;6938:51;;7020:2;7005:18;;6998:34;;;;7063:2;7048:18;;7041:34;6926:2;6911:18;;6736:345;29241:56:0;;;;;;;;29310:16;;29306:119;;29337:80;29374:12;29388;27434:6;29337:36;:80::i;36590:170::-;36662:7;36715:25;;;:16;:25;;;;;:39;36685:16;;36715:39;;;;;36685:27;;36704:8;36685:27;:::i;:::-;:69;;;;:::i;:::-;36678:76;36590:170;-1:-1:-1;;36590:170:0:o;35598:88::-;35636:7;35659:13;-1:-1:-1;;;;;35659:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35652:28;;35598:88;:::o;31259:2019::-;31397:14;;31389:37;;;;;;31433:25;31461;;;:16;:25;;;;;;;;;31433:53;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31433:53:0;;;;;;;;-1:-1:-1;;;31433:53:0;;;-1:-1:-1;;;;;31433:53:0;;;;;;;;31522:10;31501:31;;:56;;-1:-1:-1;31547:10:0;31536:7;:5;:7::i;:::-;-1:-1:-1;;;;;31536:21:0;;31501:56;31493:65;;;;;;31577:7;31573:1;:11;:36;;;;;31599:10;31588:7;:21;;31573:36;31565:64;;;;-1:-1:-1;;;31565:64:0;;;;;;;:::i;:::-;31644:22;31658:7;31644:13;:22::i;:::-;31636:75;;;;-1:-1:-1;;;31636:75:0;;;;;;;:::i;:::-;31742:17;;;;-1:-1:-1;;;;;31720:39:0;31770:15;;31766:316;;31815:17;;;;;31796:46;;-1:-1:-1;;;31796:46:0;;-1:-1:-1;;;;;9137:32:1;;;31796:46:0;;;9119:51:1;9186:18;;;9179:34;;;31796:13:0;:18;;;;;;9092::1;;31796:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31766:316;;;31887:7;:5;:7::i;:::-;-1:-1:-1;;;;;31873:21:0;:10;-1:-1:-1;;;;;31873:21:0;;31865:66;;;;-1:-1:-1;;;31865:66:0;;;;;;;:::i;:::-;27269:10;31948:9;:20;;31940:52;;;;-1:-1:-1;;;31940:52:0;;8134:2:1;31940:52:0;;;8116:21:1;8173:2;8153:18;;;8146:30;-1:-1:-1;;;8192:18:1;;;8185:49;8251:18;;31940:52:0;7932:343:1;31940:52:0;-1:-1:-1;32035:39:0;;-1:-1:-1;;;32035:39:0;;32054:10;32035:39;;;9119:51:1;9186:18;;;9179:34;;;32015:9:0;;32035:13;-1:-1:-1;;;;;32035:18:0;;;;9092::1;;32035:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31766:316;32090:19;32120:18;32162:5;32149:10;:18;32145:542;;;32199:29;;-1:-1:-1;;;32199:29:0;;;;;2056:25:1;;;32178:18:0;;27139:42;;32199:17;;2029:18:1;;32199:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32178:50;;32266:5;32253:10;:18;:72;;;;-1:-1:-1;32275:46:0;;-1:-1:-1;;;32275:46:0;;;;;9398:25:1;;;27228:1:0;9439:18:1;;;9432:34;32324:1:0;;27139:42;;32275:18;;9371::1;;32275:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;32253:72;:305;;;;;32354:10;:17;;;-1:-1:-1;;;;;32340:31:0;:10;-1:-1:-1;;;;;32340:31:0;;:209;;;-1:-1:-1;32459:17:0;;;;;32384:165;;-1:-1:-1;;;32384:165:0;;-1:-1:-1;;;;;9953:15:1;;;32384:165:0;;;9935:34:1;10005:15;;;9985:18;;;9978:43;27139:42:0;10037:18:1;;;10030:43;10089:18;;;10082:34;;;27061:42:0;;32384:62;;9869:19:1;;32384:165:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32253:426;;;;-1:-1:-1;32602:14:0;;32628:40;;-1:-1:-1;;;;;;10554:2:1;10550:15;;;10546:53;32628:40:0;;;10534:66:1;10616:12;;;10609:28;;;32573:97:0;;32595:5;;;;32602:14;10653:12:1;;32628:40:0;;;;;;;;;;;;32618:51;;;;;;32573:21;:97::i;:::-;32237:442;;32169:518;32145:542;32699:13;32695:145;;;32723:48;;-1:-1:-1;;;32723:48:0;;;;;9398:25:1;;;27228:1:0;9439:18:1;;;9432:34;27139:42:0;;32723:20;;9371:18:1;;32723:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27003:6;27382:5;32794:11;:32;;;;:::i;:::-;:38;;;;:::i;:::-;32780:52;;32695:145;32891:1;32848:25;;;:16;:25;;;;;;;:45;;-1:-1:-1;;;;;32848:45:0;;;32905:33;32865:7;;32905:33;;;;32922:15;2056:25:1;;2044:2;2029:18;;1910:177;32905:33:0;;;;;;;;32951:15;;32947:326;;32977:84;33014:10;:17;;;33033:11;27434:6;32977:36;:84::i;:::-;33107:12;;33070:93;;-1:-1:-1;;;;;33107:12:0;33121:25;33135:11;33121;:25;:::i;:::-;27434:6;33070:36;:93::i;:::-;32947:326;;;33223:12;;33186:79;;-1:-1:-1;;;;;33223:12:0;33237:11;27434:6;33186:36;:79::i;:::-;31382:1896;;;;31259:2019;;;;:::o;36022:107::-;35740:7;:5;:7::i;:::-;-1:-1:-1;;;;;35726:21:0;:10;-1:-1:-1;;;;;35726:21:0;;35718:66;;;;-1:-1:-1;;;35718:66:0;;;;;;;:::i;:::-;36102:14:::1;:21:::0;36022:107::o;33284:2308::-;35740:7;:5;:7::i;:::-;-1:-1:-1;;;;;35726:21:0;:10;-1:-1:-1;;;;;35726:21:0;;35718:66;;;;-1:-1:-1;;;35718:66:0;;;;;;;:::i;:::-;33422:14:::1;::::0;:28;33414:61:::1;;;::::0;-1:-1:-1;;;33414:61:0;;10878:2:1;33414:61:0::1;::::0;::::1;10860:21:1::0;10917:2;10897:18;;;10890:30;-1:-1:-1;;;10936:18:1;;;10929:50;10996:18;;33414:61:0::1;10676:344:1::0;33414:61:0::1;33514:15;33522:7:::0;33514:5;:15:::1;:::i;:::-;:19;::::0;33532:1:::1;33514:19;:::i;:::-;33509:25;::::0;:1:::1;:25;:::i;:::-;33490:44:::0;::::1;33482:80;;;::::0;-1:-1:-1;;;33482:80:0;;11227:2:1;33482:80:0::1;::::0;::::1;11209:21:1::0;11266:2;11246:18;;;11239:30;11305:25;11285:18;;;11278:53;11348:18;;33482:80:0::1;11025:347:1::0;33482:80:0::1;33581:7;33577:1;:11;:34;;;;;33601:10;33592:5;:19;;33577:34;33569:62;;;;-1:-1:-1::0;;;33569:62:0::1;;;;;;;:::i;:::-;33640:21;::::0;;33739:7;33716:1608:::1;33759:5;33748:7;:16;33716:1608;;33786:25;33814::::0;;;:16:::1;:25;::::0;;;;;;;;33786:53;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;33786:53:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;33786:53:0;;::::1;-1:-1:-1::0;;;;;33786:53:0::1;::::0;;;;;;;33856:22:::1;33814:25:::0;33856:13:::1;:22::i;:::-;33848:75;;;;-1:-1:-1::0;;;33848:75:0::1;;;;;;;:::i;:::-;33956:17;::::0;::::1;::::0;-1:-1:-1;;;;;33934:39:0::1;33986:15:::0;;33982:221:::1;;34033:17;::::0;;::::1;::::0;34014:46;;-1:-1:-1;;;34014:46:0;;-1:-1:-1;;;;;9137:32:1;;;34014:46:0::1;::::0;::::1;9119:51:1::0;9186:18;;;9179:34;;;34014:13:0::1;:18:::0;;::::1;::::0;::::1;::::0;9092::1;;34014:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33982:221;;;-1:-1:-1::0;27269:10:0::1;34119:24;27269:10:::0;34119:24;::::1;:::i;:::-;34154:39;::::0;-1:-1:-1;;;34154:39:0;;34173:10:::1;34154:39;::::0;::::1;9119:51:1::0;9186:18;;;9179:34;;;34119:24:0;;-1:-1:-1;34154:13:0::1;-1:-1:-1::0;;;;;34154:18:0::1;::::0;::::1;::::0;9092::1;;34154:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33982:221;34213:19;::::0;34280:8;;34290:11:::1;34300:1;34290:7:::0;:11:::1;:::i;:::-;34289:17;::::0;34305:1:::1;34289:17;:::i;:::-;34280:40:::0;34308:11:::1;:7:::0;34318:1:::1;34308:11;:::i;:::-;34280:40;;;;;;;:::i;:::-;34273:48;::::0;::::1;:::i;:::-;34266:56;;::::0;-1:-1:-1;34331:18:0::1;34375:5;34362:18:::0;::::1;34358:443;;;34414:29;::::0;-1:-1:-1;;;34414:29:0;;::::1;::::0;::::1;2056:25:1::0;;;34393:18:0::1;::::0;27139:42:::1;::::0;34414:17:::1;::::0;2029:18:1;;34414:29:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34393:50;;34483:5;34470:10;:18;:72;;;;-1:-1:-1::0;34492:46:0::1;::::0;-1:-1:-1;;;34492:46:0;;::::1;::::0;::::1;9398:25:1::0;;;27228:1:0::1;9439:18:1::0;;;9432:34;34541:1:0::1;::::0;27139:42:::1;::::0;34492:18:::1;::::0;9371::1;;34492:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;34470:72;:321;;;;;34573:10;:17;;;-1:-1:-1::0;;;;;34559:31:0::1;:10;-1:-1:-1::0;;;;;34559:31:0::1;;:221;;;-1:-1:-1::0;34682:17:0::1;::::0;;::::1;::::0;34605:175;;-1:-1:-1;;;34605:175:0;;-1:-1:-1;;;;;9953:15:1;;;34605:175:0::1;::::0;::::1;9935:34:1::0;10005:15;;;9985:18;;;9978:43;27139:42:0::1;10037:18:1::0;;;10030:43;10089:18;;;10082:34;;;27061:42:0::1;::::0;34605:62:::1;::::0;9869:19:1;;34605:175:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34454:337;;34382:419;34358:443;34817:13;34813:151;;;34843:48;::::0;-1:-1:-1;;;34843:48:0;;::::1;::::0;::::1;9398:25:1::0;;;27228:1:0::1;9439:18:1::0;;;9432:34;27139:42:0::1;::::0;34843:20:::1;::::0;9371:18:1;;34843:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27003:6;27382:5;34916:11;:32;;;;:::i;:::-;:38;;;;:::i;:::-;34902:52;;34813:151;35019:1;34976:25:::0;;;:16:::1;:25;::::0;;;;;;:45;;-1:-1:-1;;;;;34976:45:0::1;::::0;;35035:33;34993:7;;35035:33:::1;::::0;::::1;::::0;35052:15:::1;2056:25:1::0;;2044:2;2029:18;;1910:177;35035:33:0::1;;;;;;;;35085:15:::0;;35081:236:::1;;35113:84;35150:10;:17;;;35169:11;27434:6;35113:36;:84::i;:::-;35226:25;35240:11:::0;35226;:25:::1;:::i;:::-;35208:43;::::0;;::::1;:::i;:::-;;;35081:236;;;35278:29;35296:11:::0;35278:29;::::1;:::i;:::-;;;35081:236;33777:1547;;;;;33766:9;;;;:::i;:::-;;;33716:1608;;;;35353:13;35340:9;:26;;35332:76;;;::::0;-1:-1:-1;;;35332:76:0;;12238:2:1;35332:76:0::1;::::0;::::1;12220:21:1::0;12277:2;12257:18;;;12250:30;12316:34;12296:18;;;12289:62;-1:-1:-1;;;12367:18:1;;;12360:35;12412:19;;35332:76:0::1;12036:401:1::0;35332:76:0::1;35452:12;::::0;35415:82:::1;::::0;-1:-1:-1;;;;;35452:12:0::1;35466:14:::0;27434:6:::1;35415:36;:82::i;:::-;35541:12;::::0;35504:82:::1;::::0;-1:-1:-1;;;;;35541:12:0::1;35555:14:::0;27434:6:::1;35504:36;:82::i;:::-;33407:2185;;;33284:2308:::0;;;;:::o;35804:212::-;35740:7;:5;:7::i;:::-;-1:-1:-1;;;;;35726:21:0;:10;-1:-1:-1;;;;;35726:21:0;;35718:66;;;;-1:-1:-1;;;35718:66:0;;;;;;;:::i;:::-;35885:16:::1;::::0;:27:::1;::::0;35904:8:::1;35885:27;:::i;:::-;35867:15;:45;35859:54;;;::::0;::::1;;35938:49;::::0;35921:12:::1;::::0;35938:10:::1;::::0;35961:21:::1;::::0;35921:12;35938:49;35921:12;35938:49;35961:21;35938:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35920:67;;;36002:7;35994:16;;;::::0;::::1;;35852:164;35804:212::o:0;36766:213::-;36839:4;36852:15;36870:23;36885:7;36870:14;:23::i;:::-;36852:41;;36927:16;;36908:15;:35;;:64;;;;;36965:7;36947:15;:25;36908:64;36900:73;36766:213;-1:-1:-1;;;36766:213:0:o;36307:180::-;35740:7;:5;:7::i;:::-;-1:-1:-1;;;;;35726:21:0;:10;-1:-1:-1;;;;;35726:21:0;;35718:66;;;;-1:-1:-1;;;35718:66:0;;;;;;;:::i;:::-;36418:12:::1;:28:::0;;-1:-1:-1;;;;;36418:28:0;;::::1;-1:-1:-1::0;;;;;;36418:28:0;;::::1;;::::0;;;36453:12:::1;:28:::0;;;;;::::1;::::0;::::1;;::::0;;36307:180::o;36135:166::-;35740:7;:5;:7::i;:::-;-1:-1:-1;;;;;35726:21:0;:10;-1:-1:-1;;;;;35726:21:0;;35718:66;;;;-1:-1:-1;;;35718:66:0;;;;;;;:::i;:::-;36241:15:::1;36222:16;;:34;36214:43;;;::::0;::::1;;36264:16;:31:::0;36135:166::o;3469:1227::-;3705:6;3690:13;3687:25;3684:245;;;3819:10;3813:4;3806:24;3909:4;3903;3896:18;3684:245;4058:1;4055;4052;4049;4041:6;4037:2;4025:10;4020:40;4010:668;;4094:2;4088:4;4081:16;4168:4;4162;4154:19;4225:4;4219;4211:19;4473:4;4467;4459:6;4452:26;4442:221;;4618:7;4611:5;4608:18;4598:46;;4640:1;4637;4630:12;4598:46;3469:1227;;;:::o;17572:1705::-;17699:12;17795;17792:1384;;;17929:12;17926:1;17922:20;17908:12;17904:39;18055:12;18193:968;18420:20;;18411:30;;;18408:1;18404:38;18709:22;;;18774:2;18760:17;;;18753:47;18926:2;18923:1;18913:16;;19000:15;19116;;;18193:968;19106:36;18197:2;;17792:1384;-1:-1:-1;19203:14:0;;17572:1705;-1:-1:-1;;17572:1705:0:o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:773::-;508:6;516;524;532;585:2;573:9;564:7;560:23;556:32;553:52;;;601:1;598;591:12;553:52;641:9;628:23;670:18;711:2;703:6;700:14;697:34;;;727:1;724;717:12;697:34;766:70;828:7;819:6;808:9;804:22;766:70;:::i;:::-;855:8;;-1:-1:-1;740:96:1;-1:-1:-1;943:2:1;928:18;;915:32;;-1:-1:-1;959:16:1;;;956:36;;;988:1;985;978:12;956:36;;1027:72;1091:7;1080:8;1069:9;1065:24;1027:72;:::i;:::-;386:773;;;;-1:-1:-1;1118:8:1;-1:-1:-1;;;;386:773:1:o;1164:118::-;1250:5;1243:13;1236:21;1229:5;1226:32;1216:60;;1272:1;1269;1262:12;1287:241;1343:6;1396:2;1384:9;1375:7;1371:23;1367:32;1364:52;;;1412:1;1409;1402:12;1364:52;1451:9;1438:23;1470:28;1492:5;1470:28;:::i;1533:180::-;1592:6;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;-1:-1:-1;1684:23:1;;1533:180;-1:-1:-1;1533:180:1:o;2482:573::-;2586:6;2594;2602;2610;2663:2;2651:9;2642:7;2638:23;2634:32;2631:52;;;2679:1;2676;2669:12;2631:52;2715:9;2702:23;2692:33;;2772:2;2761:9;2757:18;2744:32;2734:42;;2827:2;2816:9;2812:18;2799:32;2854:18;2846:6;2843:30;2840:50;;;2886:1;2883;2876:12;2840:50;2925:70;2987:7;2978:6;2967:9;2963:22;2925:70;:::i;3245:727::-;3333:6;3341;3349;3357;3410:2;3398:9;3389:7;3385:23;3381:32;3378:52;;;3426:1;3423;3416:12;3378:52;3462:9;3449:23;3439:33;;3519:2;3508:9;3504:18;3491:32;3481:42;;3574:2;3563:9;3559:18;3546:32;3597:18;3638:2;3630:6;3627:14;3624:34;;;3654:1;3651;3644:12;3624:34;3692:6;3681:9;3677:22;3667:32;;3737:7;3730:4;3726:2;3722:13;3718:27;3708:55;;3759:1;3756;3749:12;3708:55;3799:2;3786:16;3825:2;3817:6;3814:14;3811:34;;;3841:1;3838;3831:12;3811:34;3886:7;3881:2;3872:6;3868:2;3864:15;3860:24;3857:37;3854:57;;;3907:1;3904;3897:12;3854:57;3245:727;;;;-1:-1:-1;;3938:2:1;3930:11;;-1:-1:-1;;;3245:727:1:o;4365:131::-;-1:-1:-1;;;;;4440:31:1;;4430:42;;4420:70;;4486:1;4483;4476:12;4501:388;4569:6;4577;4630:2;4618:9;4609:7;4605:23;4601:32;4598:52;;;4646:1;4643;4636:12;4598:52;4685:9;4672:23;4704:31;4729:5;4704:31;:::i;:::-;4754:5;-1:-1:-1;4811:2:1;4796:18;;4783:32;4824:33;4783:32;4824:33;:::i;:::-;4876:7;4866:17;;;4501:388;;;;;:::o;5470:127::-;5531:10;5526:3;5522:20;5519:1;5512:31;5562:4;5559:1;5552:15;5586:4;5583:1;5576:15;5602:127;5663:10;5658:3;5654:20;5651:1;5644:31;5694:4;5691:1;5684:15;5718:4;5715:1;5708:15;5734:125;5799:9;;;5820:10;;;5817:36;;;5833:18;;:::i;5864:339::-;6066:2;6048:21;;;6105:2;6085:18;;;6078:30;-1:-1:-1;;;6139:2:1;6124:18;;6117:45;6194:2;6179:18;;5864:339::o;6208:168::-;6281:9;;;6312;;6329:15;;;6323:22;;6309:37;6299:71;;6350:18;;:::i;6381:217::-;6421:1;6447;6437:132;;6491:10;6486:3;6482:20;6479:1;6472:31;6526:4;6523:1;6516:15;6554:4;6551:1;6544:15;6437:132;-1:-1:-1;6583:9:1;;6381:217::o;6603:128::-;6670:9;;;6691:11;;;6688:37;;;6705:18;;:::i;7086:135::-;7125:3;7146:17;;;7143:43;;7166:18;;:::i;:::-;-1:-1:-1;7213:1:1;7202:13;;7086:135::o;7226:356::-;7428:2;7410:21;;;7447:18;;;7440:30;7506:34;7501:2;7486:18;;7479:62;7573:2;7558:18;;7226:356::o;8280:251::-;8350:6;8403:2;8391:9;8382:7;8378:23;8374:32;8371:52;;;8419:1;8416;8409:12;8371:52;8451:9;8445:16;8470:31;8495:5;8470:31;:::i;8536:404::-;8738:2;8720:21;;;8777:2;8757:18;;;8750:30;8816:34;8811:2;8796:18;;8789:62;-1:-1:-1;;;8882:2:1;8867:18;;8860:38;8930:3;8915:19;;8536:404::o;9477:184::-;9547:6;9600:2;9588:9;9579:7;9575:23;9571:32;9568:52;;;9616:1;9613;9606:12;9568:52;-1:-1:-1;9639:16:1;;9477:184;-1:-1:-1;9477:184:1:o;10127:245::-;10194:6;10247:2;10235:9;10226:7;10222:23;10218:32;10215:52;;;10263:1;10260;10253:12;10215:52;10295:9;10289:16;10314:28;10336:5;10314:28;:::i;11377:331::-;11482:9;11493;11535:8;11523:10;11520:24;11517:44;;;11557:1;11554;11547:12;11517:44;11586:6;11576:8;11573:20;11570:40;;;11606:1;11603;11596:12;11570:40;-1:-1:-1;;11632:23:1;;;11677:25;;;;;-1:-1:-1;11377:331:1:o;11713:318::-;-1:-1:-1;;;;;;11833:19:1;;11904:11;;;;11935:1;11927:10;;11924:101;;;12012:2;12006;11999:3;11996:1;11992:11;11989:1;11985:19;11981:28;11977:2;11973:37;11969:46;11960:55;;11924:101;;;11713:318;;;;:::o

Swarm Source

ipfs://821e31f2c4946f230994a41cc7aad62a1094d21b7f9e76818f016327f9290333

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

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.