ETH Price: $2,623.63 (-0.38%)

Contract

0xCaA9d6cDaF2Cd444Ae6c282F41dC5806E9ff9fC2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Emergency Withdr...176978352023-07-15 9:13:47444 days ago1689412427IN
0xCaA9d6cD...6E9ff9fC2
0 ETH0.0008514923.72717874
Settle All176858062023-07-13 16:37:23445 days ago1689266243IN
0xCaA9d6cD...6E9ff9fC2
0 ETH0.6019431390
Bid176856732023-07-13 16:10:23445 days ago1689264623IN
0xCaA9d6cD...6E9ff9fC2
1.129 ETH0.00305452107.70905711
Bid176856032023-07-13 15:56:23445 days ago1689263783IN
0xCaA9d6cD...6E9ff9fC2
0.74 ETH0.0041902293.699115
Bid176855982023-07-13 15:55:23445 days ago1689263723IN
0xCaA9d6cD...6E9ff9fC2
1.026 ETH0.0041416692.61326496
Bid176855862023-07-13 15:52:59445 days ago1689263579IN
0xCaA9d6cD...6E9ff9fC2
1.452 ETH0.0024919687.87214813
Bid176855762023-07-13 15:50:59445 days ago1689263459IN
0xCaA9d6cD...6E9ff9fC2
0.88 ETH0.0041143692.00278955
Bid176855742023-07-13 15:50:35445 days ago1689263435IN
0xCaA9d6cD...6E9ff9fC2
0.787 ETH0.0039603688.55905197
Bid176855742023-07-13 15:50:35445 days ago1689263435IN
0xCaA9d6cD...6E9ff9fC2
0.95 ETH0.0039603688.55905197
Bid176855722023-07-13 15:50:11445 days ago1689263411IN
0xCaA9d6cD...6E9ff9fC2
0.67 ETH0.003673782.14901595
Bid176855682023-07-13 15:49:23445 days ago1689263363IN
0xCaA9d6cD...6E9ff9fC2
0.75 ETH0.0037044482.83639548
Bid176855622023-07-13 15:48:11445 days ago1689263291IN
0xCaA9d6cD...6E9ff9fC2
0.726 ETH0.003007867.25856347
Bid176855532023-07-13 15:46:23445 days ago1689263183IN
0xCaA9d6cD...6E9ff9fC2
0.8 ETH0.0030272167.6926318
Bid176855522023-07-13 15:46:11445 days ago1689263171IN
0xCaA9d6cD...6E9ff9fC2
0.666 ETH0.0027979862.56676521
Bid176855462023-07-13 15:44:59445 days ago1689263099IN
0xCaA9d6cD...6E9ff9fC2
0.932 ETH0.0026557359.38581462
Bid176855402023-07-13 15:43:47445 days ago1689263027IN
0xCaA9d6cD...6E9ff9fC2
0.605 ETH0.0026102158.36796274
Bid176855392023-07-13 15:43:35445 days ago1689263015IN
0xCaA9d6cD...6E9ff9fC2
0.85 ETH0.0027202760.82906055
Bid176855342023-07-13 15:42:35445 days ago1689262955IN
0xCaA9d6cD...6E9ff9fC2
1.03 ETH0.0028306463.2971353
Bid176855302023-07-13 15:41:47445 days ago1689262907IN
0xCaA9d6cD...6E9ff9fC2
0.67 ETH0.002592657.97420603
Bid176855252023-07-13 15:40:47445 days ago1689262847IN
0xCaA9d6cD...6E9ff9fC2
0.675 ETH0.0024429254.62721372
Bid176855202023-07-13 15:39:47445 days ago1689262787IN
0xCaA9d6cD...6E9ff9fC2
0.613 ETH0.0020770746.44628921
Bid176855202023-07-13 15:39:47445 days ago1689262787IN
0xCaA9d6cD...6E9ff9fC2
0.65 ETH0.0021128547.24628921
Bid176855192023-07-13 15:39:35445 days ago1689262775IN
0xCaA9d6cD...6E9ff9fC2
0.666 ETH0.0021250547.51912316
Bid176855152023-07-13 15:38:47445 days ago1689262727IN
0xCaA9d6cD...6E9ff9fC2
0.66 ETH0.0021302147.63453284
Bid176855132023-07-13 15:38:23445 days ago1689262703IN
0xCaA9d6cD...6E9ff9fC2
0.811 ETH0.0021510248.0997561
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
176978352023-07-15 9:13:47444 days ago1689412427
0xCaA9d6cD...6E9ff9fC2
0.01617499 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
40.38945 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
28.078 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.0492 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.1485 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.1125 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.225 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.0825 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.12 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.06 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.2475 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.132 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.11055 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.108 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.0999 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.1089 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.15 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.135 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.111 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.09075 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.1125 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.15 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.1245 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.10125 ETH
176858062023-07-13 16:37:23445 days ago1689266243
0xCaA9d6cD...6E9ff9fC2
0.1425 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

0x60806040526004361061012a5760003560e01c8063902b4dde116100ab578063e71f7b151161006f578063e71f7b1514610374578063eb54f9ec14610394578063f3f2f0bc146103aa578063f52564ec146103ca578063fae01c92146103ea578063fc97d3681461040a57600080fd5b8063902b4dde14610292578063a98e67db146102a5578063b5084283146102c5578063db2e21bc146102d8578063e3b14757146102ed57600080fd5b8063454a2ab3116100f2578063454a2ab3146101f15780634f52ccfa146102045780635c975abb1461023c578063777de7041461025d5780638da5cb5b1461027d57600080fd5b80631033a6631461012f57806316c38b3c146101445780632c104a921461016457806332cb6b0c14610199578063368c6c99146101db575b600080fd5b61014261013d366004611ba9565b61043e565b005b34801561015057600080fd5b5061014261015f366004611c23565b6107b6565b34801561017057600080fd5b5061018461017f366004611c40565b61080c565b60405190151581526020015b60405180910390f35b3480156101a557600080fd5b506101cd7f000000000000000000000000000000000000000000000000000000000000006481565b604051908152602001610190565b3480156101e757600080fd5b506101cd60035481565b6101426101ff366004611c40565b610822565b34801561021057600080fd5b50600154610224906001600160a01b031681565b6040516001600160a01b039091168152602001610190565b34801561024857600080fd5b5060025461018490600160a01b900460ff1681565b34801561026957600080fd5b506101cd610278366004611c40565b610b46565b34801561028957600080fd5b50610224610b7c565b6101426102a0366004611c59565b610c05565b3480156102b157600080fd5b506101426102c0366004611c40565b611221565b6101426102d3366004611ca0565b61125e565b3480156102e457600080fd5b50610142611951565b3480156102f957600080fd5b50610342610308366004611c40565b60046020526000908152604090205462ffffff811690630100000081046001600160481b031690600160601b90046001600160a01b031683565b6040805162ffffff90941684526001600160481b0390921660208401526001600160a01b031690820152606001610190565b34801561038057600080fd5b5061018461038f366004611c40565b6119fc565b3480156103a057600080fd5b506101cd60005481565b3480156103b657600080fd5b50600254610224906001600160a01b031681565b3480156103d657600080fd5b506101426103e5366004611d35565b611a22565b3480156103f657600080fd5b50610142610405366004611c40565b611a88565b34801561041657600080fd5b506102247f000000000000000000000000e32f0352ea1f35f3163c302aab3a39c11b09295581565b600254600160a01b900460ff16156104915760405162461bcd60e51b8152602060048201526011602482015270109a59191a5b99c81a5cc81c185d5cd959607a1b60448201526064015b60405180910390fd5b82811461049d57600080fd5b60008060005b8581101561078d5760008787838181106104bf576104bf611d6e565b90506020020135905060008686848181106104dc576104dc611d6e565b90506020020135905080846104f19190611d9a565b935081600010801561052357507f00000000000000000000000000000000000000000000000000000000000000648211155b61053f5760405162461bcd60e51b815260040161048890611dad565b610548826119fc565b61055f576105568186611d9a565b9450505061078d565b6000828152600460209081526040918290208251606081018452905462ffffff81168252630100000081046001600160481b031692820192909252600160601b9091046001600160a01b0316918101919091526127106105c16103e882611d9a565b82602001516001600160481b03166105d99190611dd6565b6105e39190611ded565b82101580156105f95750662386f26fc100008210155b1561076c578051600090819062ffffff168161061487610b46565b60208601519091506001600160481b0316156106425784602001516001600160481b03169350846040015192505b61038461064f4283611e0f565b1015610679578061066242610384611d9a565b61066c9190611e0f565b6106769083611d9a565b91505b6040805160608101825262ffffff80851682526001600160481b03808a1660208085019182523385870181815260008f815260049093529187902095518654935192516001600160a01b0316600160601b026001600160601b03939095166301000000026001600160601b0319909416951694909417919091171617909155905188917f476bd0783cc4e83d617258e2b86038c40cb0dba0cca615fcc28e7ccb3d66cbed9161074891908a9042906001600160a01b039390931683526020830191909152604082015260600190565b60405180910390a28315610763576107638385617530611ad3565b50505050610779565b6107768287611d9a565b95505b5050508061078690611e22565b90506104a3565b508034101561079b57600080fd5b81156107ae576107ae3383617530611ad3565b505050505050565b6107be610b7c565b6001600160a01b0316336001600160a01b0316146107ee5760405162461bcd60e51b815260040161048890611e3b565b60028054911515600160a01b0260ff60a01b19909216919091179055565b60008061081883610b46565b4210159392505050565b600254600160a01b900460ff16156108705760405162461bcd60e51b8152602060048201526011602482015270109a59191a5b99c81a5cc81c185d5cd959607a1b6044820152606401610488565b610879816119fc565b6108b85760405162461bcd60e51b815260206004820152601060248201526f41756374696f6e20496e61637469766560801b6044820152606401610488565b8060001080156108e857507f00000000000000000000000000000000000000000000000000000000000000648111155b6109045760405162461bcd60e51b815260040161048890611dad565b6000818152600460209081526040918290208251606081018452905462ffffff81168252630100000081046001600160481b031692820192909252600160601b9091046001600160a01b0316918101919091526127106109666103e882611d9a565b82602001516001600160481b031661097e9190611dd6565b6109889190611ded565b341015801561099e5750662386f26fc100003410155b6109e05760405162461bcd60e51b8152602060048201526013602482015272084d2c840dcdee840d0d2ced040cadcdeeaced606b1b6044820152606401610488565b8051600090819062ffffff16816109f686610b46565b60208601519091506001600160481b031615610a245784602001516001600160481b03169350846040015192505b610384610a314283611e0f565b1015610a5b5780610a4442610384611d9a565b610a4e9190611e0f565b610a589083611d9a565b91505b6040805160608101825262ffffff80851682526001600160481b033481811660208086019182523386880181815260008f815260049093529188902096518754935192516001600160a01b0316600160601b026001600160601b03939096166301000000026001600160601b0319909416961695909517919091171691909117909255915188927f476bd0783cc4e83d617258e2b86038c40cb0dba0cca615fcc28e7ccb3d66cbed92610b2b9242906001600160a01b039390931683526020830191909152604082015260600190565b60405180910390a283156107ae576107ae8385617530611ad3565b600081815260046020526040812054815462ffffff90911690610b6c9062015180611d9a565b610b769190611d9a565b92915050565b60007f000000000000000000000000e32f0352ea1f35f3163c302aab3a39c11b0929556001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c009190611e70565b905090565b600354610c1157600080fd5b6000848152600460209081526040918290208251606081018452905462ffffff81168252630100000081046001600160481b031692820192909252600160601b9091046001600160a01b031691810182905290331480610c80575033610c75610b7c565b6001600160a01b0316145b610c8957600080fd5b846000108015610cb957507f00000000000000000000000000000000000000000000000000000000000000648511155b610cd55760405162461bcd60e51b815260040161048890611dad565b610cde8561080c565b610cfa5760405162461bcd60e51b815260040161048890611e8d565b60208101516001600160481b03168015610d9c5760408281015190516340c10f1960e01b81526001600160a01b039182166004820152602481018890527f000000000000000000000000e32f0352ea1f35f3163c302aab3a39c11b092955909116906340c10f1990604401600060405180830381600087803b158015610d7f57600080fd5b505af1158015610d93573d6000803e3d6000fd5b50505050610ea5565b610da4610b7c565b6001600160a01b0316336001600160a01b031614610dd45760405162461bcd60e51b815260040161048890611e3b565b662386f26fc10000341015610e215760405162461bcd60e51b8152602060048201526013602482015272084d2c840dcdee840d0d2ced040cadcdeeaced606b1b6044820152606401610488565b506040516340c10f1960e01b81523360048201526024810186905234907f000000000000000000000000e32f0352ea1f35f3163c302aab3a39c11b0929556001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b505050505b6000806103e88710156110d9576040516331a9108f60e11b81526004810188905260009073a8a425864db32fcbb459bf527bdbb8128e6abf2190636352211e906024016020604051808303816000875af1158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190611e70565b90506103e888108015610fbb5750604051636017d14160e11b8152600481018990526003602482015260019073a8a425864db32fcbb459bf527bdbb8128e6abf219063c02fa282906044016020604051808303816000875af1158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb99190611ed5565b105b8015611086575084604001516001600160a01b0316816001600160a01b0316148061108657506040858101519051631574d39f60e31b81526001600160a01b039182166004820152908216602482015273a8a425864db32fcbb459bf527bdbb8128e6abf216044820152606481018990526d76a84fef008cdabe6409d2fe638b9063aba69cf890608401602060405180830381865afa158015611062573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110869190611eee565b80156110d557506003546040516001600160601b0319606084901b166020820152603481018a90526110d591899189919060540160405160208183030381529060405280519060200120611b23565b9150505b801561116957604051638c6c4d2d60e01b8152600481018890526003602482015273a8a425864db32fcbb459bf527bdbb8128e6abf2190638c6c4d2d90604401600060405180830381600087803b15801561113357600080fd5b505af1158015611147573d6000803e3d6000fd5b505050506127106105dc8461115c9190611dd6565b6111669190611ded565b91505b6000888152600460205260409081902080546001600160601b031690555188907ff5b268a3ff315cc44ccceeef86259c9e8eef81ceecb14001543809115380dd62906111b89042815260200190565b60405180910390a281156111fe576111d7846040015183617530611ad3565b6002546111f9906001600160a01b03166111f18486611e0f565b617530611ad3565b611217565b600154611217906001600160a01b031684617530611ad3565b5050505050505050565b611229610b7c565b6001600160a01b0316336001600160a01b0316146112595760405162461bcd60e51b815260040161048890611e3b565b600355565b611266610b7c565b6001600160a01b0316336001600160a01b0316146112965760405162461bcd60e51b815260040161048890611e3b565b600354156112dd5760405162461bcd60e51b8152602060048201526014602482015273736574746c65416c6c206e6f742061637469766560601b6044820152606401610488565b6112e78484611e0f565b6112f2906001611d9a565b6112fd906002611dd6565b811461134b5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964207061737344617461206c656e6774680000000000000000006044820152606401610488565b83600010801561137b57507f00000000000000000000000000000000000000000000000000000000000000648311155b6113975760405162461bcd60e51b815260040161048890611dad565b60008080865b8681116118b7576000818152600460209081526040918290208251606081018452905462ffffff81168252630100000081046001600160481b031692820192909252600160601b9091046001600160a01b0316918101919091526114008261080c565b61141c5760405162461bcd60e51b815260040161048890611e8d565b60208101516001600160481b031680156114be5760408281015190516340c10f1960e01b81526001600160a01b039182166004820152602481018590527f000000000000000000000000e32f0352ea1f35f3163c302aab3a39c11b092955909116906340c10f1990604401600060405180830381600087803b1580156114a157600080fd5b505af11580156114b5573d6000803e3d6000fd5b50505050611555565b50662386f26fc100006114d18187611d9a565b6040516340c10f1960e01b8152336004820152602481018590529096507f000000000000000000000000e32f0352ea1f35f3163c302aab3a39c11b0929556001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561153c57600080fd5b505af1158015611550573d6000803e3d6000fd5b505050505b6000808989611565600188611e0f565b611570906002611dd6565b9061157c886002611dd6565b9261158993929190611f0b565b61159291611f35565b60f01c905060006103e882101561177b576040516331a9108f60e11b81526004810183905260009073a8a425864db32fcbb459bf527bdbb8128e6abf2190636352211e906024016020604051808303816000875af11580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190611e70565b90506103e8831080156116ac5750604051636017d14160e11b8152600481018490526003602482015260019073a8a425864db32fcbb459bf527bdbb8128e6abf219063c02fa282906044016020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa9190611ed5565b105b8015611777575085604001516001600160a01b0316816001600160a01b0316148061177757506040868101519051631574d39f60e31b81526001600160a01b039182166004820152908216602482015273a8a425864db32fcbb459bf527bdbb8128e6abf216044820152606481018490526d76a84fef008cdabe6409d2fe638b9063aba69cf890608401602060405180830381865afa158015611753573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117779190611eee565b9150505b801561180b57604051638c6c4d2d60e01b8152600481018390526003602482015273a8a425864db32fcbb459bf527bdbb8128e6abf2190638c6c4d2d90604401600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b505050506127106105dc856117fe9190611dd6565b6118089190611ded565b92505b6000868152600460205260409081902080546001600160601b031690555186907ff5b268a3ff315cc44ccceeef86259c9e8eef81ceecb14001543809115380dd629061185a9042815260200190565b60405180910390a2821561189457611879856040015184617530611ad3565b6118838385611e0f565b61188d9088611d9a565b96506118a1565b61189e8489611d9a565b97505b5050505050806118b090611e22565b905061139d565b50823410156119165760405162461bcd60e51b815260206004820152602560248201527f496e73756666696369656e742066756e64732073656e7420666f7220756e636c604482015264185a5b595960da1b6064820152608401610488565b60015461192f906001600160a01b031683617530611ad3565b600254611948906001600160a01b031682617530611ad3565b50505050505050565b611959610b7c565b6001600160a01b0316336001600160a01b0316146119895760405162461bcd60e51b815260040161048890611e3b565b600054611999906202a300611d9a565b42116119a457600080fd5b604051600090339047908381818185875af1925050503d80600081146119e6576040519150601f19603f3d011682016040523d82523d6000602084013e6119eb565b606091505b50509050806119f957600080fd5b50565b600080611a0883610b46565b90506000544210158015611a1b57508042105b9392505050565b611a2a610b7c565b6001600160a01b0316336001600160a01b031614611a5a5760405162461bcd60e51b815260040161048890611e3b565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b611a90610b7c565b6001600160a01b0316336001600160a01b031614611ac05760405162461bcd60e51b815260040161048890611e3b565b4260005411611ace57600080fd5b600055565b81471015611ae95763b12d13eb6000526004601cfd5b600080600080858786f1611b1e57826000526073600b5360ff6020536016600b83f0611b1e57620f42405a11611b1e57600080fd5b505050565b60008315611b55578360051b8501855b803580851160051b94855260209485185260406000209301818110611b335750505b501492915050565b60008083601f840112611b6f57600080fd5b50813567ffffffffffffffff811115611b8757600080fd5b6020830191508360208260051b8501011115611ba257600080fd5b9250929050565b60008060008060408587031215611bbf57600080fd5b843567ffffffffffffffff80821115611bd757600080fd5b611be388838901611b5d565b90965094506020870135915080821115611bfc57600080fd5b50611c0987828801611b5d565b95989497509550505050565b80151581146119f957600080fd5b600060208284031215611c3557600080fd5b8135611a1b81611c15565b600060208284031215611c5257600080fd5b5035919050565b60008060008060608587031215611c6f57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611c9457600080fd5b611c0987828801611b5d565b60008060008060608587031215611cb657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115611cdc57600080fd5b818701915087601f830112611cf057600080fd5b813581811115611cff57600080fd5b886020828501011115611d1157600080fd5b95989497505060200194505050565b6001600160a01b03811681146119f957600080fd5b60008060408385031215611d4857600080fd5b8235611d5381611d20565b91506020830135611d6381611d20565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610b7657610b76611d84565b6020808252600f908201526e125b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b8082028115828204841417610b7657610b76611d84565b600082611e0a57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b7657610b76611d84565b600060018201611e3457611e34611d84565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611e8257600080fd5b8151611a1b81611d20565b60208082526028908201527f41756374696f6e20666f72207468697320746f6b656e4964206973207374696c6040820152676c2061637469766560c01b606082015260800190565b600060208284031215611ee757600080fd5b5051919050565b600060208284031215611f0057600080fd5b8151611a1b81611c15565b60008085851115611f1b57600080fd5b83861115611f2857600080fd5b5050820193919092039150565b6001600160f01b03198135818116916002851015611f5d5780818660020360031b1b83161692505b50509291505056fea2646970667358221220821e31f2c4946f230994a41cc7aad62a1094d21b7f9e76818f016327f929033364736f6c63430008110033

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.