S Price: $0.517772 (+0.83%)
    /

    Token

    xShadow (xSHADOW)

    Overview

    Max Total Supply

    2,996,165.981470946229168023 xSHADOW

    Holders

    1,617 ( 1.356%)
    Created with Highcharts 10.2.1

    Market

    Price

    $37.17 @ 71.788287 S (-7.83%)

    Onchain Market Cap

    $111,367,489.53

    Circulating Supply Market Cap

    $7,199,840.00

    Other Info

    Token Contract (WITH 18 Decimals)

    Balance
    0 xSHADOW

    Value
    $0.00
    0xfb15339d187a76af62698f73d700e1f8536f03bd
    Loading...
    Loading
    Loading...
    Loading
    Loading...
    Loading

    OVERVIEW

    A Sonic-native concentrated liquidity exchange.The ultimate trading hub on Sonic.

    Contract Source Code Verified (Exact Match)

    Contract Name:
    XShadow

    Compiler Version
    v0.8.28+commit.7893614a

    Optimization Enabled:
    Yes with 1633 runs

    Other Settings:
    cancun EvmVersion
    File 1 of 22 : XShadow.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.26;
    import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
    import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
    import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
    import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
    import {IVoter} from "../interfaces/IVoter.sol";
    import {IRamsesV3Pool} from "../CL/core/interfaces/IRamsesV3Pool.sol";
    import {IXShadow} from "../interfaces/IXShadow.sol";
    import {IVoteModule} from "../interfaces/IVoteModule.sol";
    contract XShadow is ERC20, IXShadow, Pausable {
    using EnumerableSet for EnumerableSet.AddressSet;
    /** Addresses */
    /// @inheritdoc IXShadow
    address public operator;
    /// @inheritdoc IXShadow
    address public immutable MINTER;
    /// @inheritdoc IXShadow
    address public immutable ACCESS_HUB;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 22 : ERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "./IERC20.sol";
    import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
    import {Context} from "../../utils/Context.sol";
    import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
    /**
    * @dev Implementation of the {IERC20} interface.
    *
    * This implementation is agnostic to the way tokens are created. This means
    * that a supply mechanism has to be added in a derived contract using {_mint}.
    *
    * TIP: For a detailed writeup see our guide
    * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
    * to implement supply mechanisms].
    *
    * The default value of {decimals} is 18. To change this, you should override
    * this function so it returns a different value.
    *
    * We have followed general OpenZeppelin Contracts guidelines: functions revert
    * instead returning `false` on failure. This behavior is nonetheless
    * conventional and does not conflict with the expectations of ERC-20
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 22 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-20 standard as defined in the ERC.
    */
    interface IERC20 {
    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);
    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /**
    * @dev Returns the value of tokens in existence.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 22 : Pausable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)
    pragma solidity ^0.8.20;
    import {Context} from "../utils/Context.sol";
    /**
    * @dev Contract module which allows children to implement an emergency stop
    * mechanism that can be triggered by an authorized account.
    *
    * This module is used through inheritance. It will make available the
    * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
    * the functions of your contract. Note that they will not be pausable by
    * simply including this module, only once the modifiers are put in place.
    */
    abstract contract Pausable is Context {
    bool private _paused;
    /**
    * @dev Emitted when the pause is triggered by `account`.
    */
    event Paused(address account);
    /**
    * @dev Emitted when the pause is lifted by `account`.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 22 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)
    pragma solidity ^0.8.20;
    import {Panic} from "../Panic.sol";
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Floor, // Toward negative infinity
    Ceil, // Toward positive infinity
    Trunc, // Toward zero
    Expand // Away from zero
    }
    /**
    * @dev Returns the addition of two unsigned integers, with an success flag (no overflow).
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
    unchecked {
    uint256 c = a + b;
    if (c < a) return (false, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 22 : EnumerableSet.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/structs/EnumerableSet.sol)
    // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Library for managing
    * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
    * types.
    *
    * Sets have the following properties:
    *
    * - Elements are added, removed, and checked for existence in constant time
    * (O(1)).
    * - Elements are enumerated in O(n). No guarantees are made on the ordering.
    *
    * ```solidity
    * contract Example {
    * // Add the library methods
    * using EnumerableSet for EnumerableSet.AddressSet;
    *
    * // Declare a set state variable
    * EnumerableSet.AddressSet private mySet;
    * }
    * ```
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 22 : IVoter.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.26;
    pragma abicoder v2;
    interface IVoter {
    error ACTIVE_GAUGE(address gauge);
    error GAUGE_INACTIVE(address gauge);
    error ALREADY_WHITELISTED(address token);
    error NOT_AUTHORIZED(address caller);
    error NOT_WHITELISTED();
    error NOT_POOL();
    error NOT_INIT();
    error LENGTH_MISMATCH();
    error NO_GAUGE();
    error ALREADY_DISTRIBUTED(address gauge, uint256 period);
    error ZERO_VOTE(address pool);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 22 : IRamsesV3Pool.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    import {IRamsesV3PoolImmutables} from './pool/IRamsesV3PoolImmutables.sol';
    import {IRamsesV3PoolState} from './pool/IRamsesV3PoolState.sol';
    import {IRamsesV3PoolDerivedState} from './pool/IRamsesV3PoolDerivedState.sol';
    import {IRamsesV3PoolActions} from './pool/IRamsesV3PoolActions.sol';
    import {IRamsesV3PoolOwnerActions} from './pool/IRamsesV3PoolOwnerActions.sol';
    import {IRamsesV3PoolErrors} from './pool/IRamsesV3PoolErrors.sol';
    import {IRamsesV3PoolEvents} from './pool/IRamsesV3PoolEvents.sol';
    /// @title The interface for a Ramses V3 Pool
    /// @notice A Ramses pool facilitates swapping and automated market making between any two assets that strictly conform
    /// to the ERC20 specification
    /// @dev The pool interface is broken up into many smaller pieces
    interface IRamsesV3Pool is
    IRamsesV3PoolImmutables,
    IRamsesV3PoolState,
    IRamsesV3PoolDerivedState,
    IRamsesV3PoolActions,
    IRamsesV3PoolOwnerActions,
    IRamsesV3PoolErrors,
    IRamsesV3PoolEvents
    {
    /// @notice if a new period, advance on interaction
    function _advancePeriod() external;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 22 : IXShadow.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity ^0.8.24;
    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
    import {IVoter} from "./IVoter.sol";
    interface IXShadow is IERC20 {
    struct VestPosition {
    /// @dev amount of xShadow
    uint256 amount;
    /// @dev start unix timestamp
    uint256 start;
    /// @dev start + MAX_VEST (end timestamp)
    uint256 maxEnd;
    /// @dev vest identifier (starting from 0)
    uint256 vestID;
    }
    error NOT_WHITELISTED(address);
    error NOT_MINTER();
    error ZERO();
    error NO_VEST();
    error ALREADY_EXEMPT();
    error NOT_EXEMPT();
    error CANT_RESCUE();
    error NO_CHANGE();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 22 : IVoteModule.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity ^0.8.26;
    interface IVoteModule {
    /** Custom Errors */
    /// @dev == 0
    error ZERO_AMOUNT();
    /// @dev if address is not xShadow
    error NOT_XSHADOW();
    /// @dev error for when the cooldown period has not been passed yet
    error COOLDOWN_ACTIVE();
    /// @dev error for when you try to deposit or withdraw for someone who isn't the msg.sender
    error NOT_VOTEMODULE();
    /// @dev error for when the caller is not authorized
    error UNAUTHORIZED();
    /// @dev error for accessHub gated functions
    error NOT_ACCESSHUB();
    /// @dev error for when there is no change of state
    error NO_CHANGE();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 22 : IERC20Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../IERC20.sol";
    /**
    * @dev Interface for the optional metadata functions from the ERC-20 standard.
    */
    interface IERC20Metadata is IERC20 {
    /**
    * @dev Returns the name of the token.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the symbol of the token.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the decimals places of the token.
    */
    function decimals() external view returns (uint8);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 22 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Provides information about the current execution context, including the
    * sender of the transaction and its data. While these are generally available
    * via msg.sender and msg.data, they should not be accessed in such a direct
    * manner, since when dealing with meta-transactions the account sending and
    * paying for execution may not be the actual sender (as far as an application
    * is concerned).
    *
    * This contract is only required for intermediate, library-like contracts.
    */
    abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
    return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
    }
    function _contextSuffixLength() internal view virtual returns (uint256) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 22 : draft-IERC6093.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Standard ERC-20 Errors
    * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
    */
    interface IERC20Errors {
    /**
    * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    * @param balance Current balance for the interacting account.
    * @param needed Minimum amount required to perform a transfer.
    */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    /**
    * @dev Indicates a failure with the token `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    */
    error ERC20InvalidSender(address sender);
    /**
    * @dev Indicates a failure with the token `receiver`. Used in transfers.
    * @param receiver Address to which tokens are being transferred.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 22 : Panic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Helper library for emitting standardized panic codes.
    *
    * ```solidity
    * contract Example {
    * using Panic for uint256;
    *
    * // Use any of the declared internal constants
    * function foo() { Panic.GENERIC.panic(); }
    *
    * // Alternatively
    * function foo() { Panic.panic(Panic.GENERIC); }
    * }
    * ```
    *
    * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
    *
    * _Available since v5.1._
    */
    // slither-disable-next-line unused-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 22 : SafeCast.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)
    // This file was procedurally generated from scripts/generate/templates/SafeCast.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
    * checks.
    *
    * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
    * easily result in undesired exploitation or bugs, since developers usually
    * assume that overflows raise errors. `SafeCast` restores this intuition by
    * reverting the transaction when such an operation overflows.
    *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
    library SafeCast {
    /**
    * @dev Value doesn't fit in an uint of `bits` size.
    */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    /**
    * @dev An int value doesn't fit in an uint of `bits` size.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 22 : IRamsesV3PoolImmutables.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Pool state that never changes
    /// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values
    interface IRamsesV3PoolImmutables {
    /// @notice The contract that deployed the pool, which must adhere to the IRamsesV3Factory interface
    /// @return The contract address
    function factory() external view returns (address);
    /// @notice The first of the two tokens of the pool, sorted by address
    /// @return The token contract address
    function token0() external view returns (address);
    /// @notice The second of the two tokens of the pool, sorted by address
    /// @return The token contract address
    function token1() external view returns (address);
    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6
    /// @return The fee
    function fee() external view returns (uint24);
    /// @notice The pool tick spacing
    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive
    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...
    /// This value is an int24 to avoid casting even though it is always positive.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 22 : IRamsesV3PoolState.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Pool state that can change
    /// @notice These methods compose the pool's state, and can change with any frequency including multiple times
    /// per transaction
    interface IRamsesV3PoolState {
    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas
    /// when accessed externally.
    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value
    /// @return tick The current tick of the pool, i.e. according to the last tick transition that was run.
    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick
    /// boundary.
    /// @return observationIndex The index of the last oracle observation that was written,
    /// @return observationCardinality The current maximum number of observations stored in the pool,
    /// @return observationCardinalityNext The next maximum number of observations, to be updated when the observation.
    /// @return feeProtocol The protocol fee for both tokens of the pool.
    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0
    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.
    /// unlocked Whether the pool is currently locked to reentrancy
    function slot0()
    external
    view
    returns (
    uint160 sqrtPriceX96,
    int24 tick,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 22 : IRamsesV3PoolDerivedState.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Pool state that is not stored
    /// @notice Contains view functions to provide information about the pool that is computed rather than stored on the
    /// blockchain. The functions here may have variable gas costs.
    interface IRamsesV3PoolDerivedState {
    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp
    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing
    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,
    /// you must call it with secondsAgos = [3600, 0].
    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in
    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.
    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned
    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp
    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block
    /// timestamp
    function observe(
    uint32[] calldata secondsAgos
    ) external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);
    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range
    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.
    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first
    /// snapshot is taken and the second snapshot is taken.
    /// @param tickLower The lower tick of the range
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 22 : IRamsesV3PoolActions.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Permissionless pool actions
    /// @notice Contains pool methods that can be called by anyone
    interface IRamsesV3PoolActions {
    /// @notice Sets the initial price for the pool
    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value
    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96
    function initialize(uint160 sqrtPriceX96) external;
    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position
    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback
    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends
    /// on tickLower, tickUpper, the amount of liquidity, and the current price.
    /// @param recipient The address for which the liquidity will be created
    /// @param index The index for which the liquidity will be created
    /// @param tickLower The lower tick of the position in which to add liquidity
    /// @param tickUpper The upper tick of the position in which to add liquidity
    /// @param amount The amount of liquidity to mint
    /// @param data Any data that should be passed through to the callback
    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback
    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback
    function mint(
    address recipient,
    uint256 index,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 22 : IRamsesV3PoolOwnerActions.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Permissioned pool actions
    /// @notice Contains pool methods that may only be called by the factory owner
    interface IRamsesV3PoolOwnerActions {
    /// @notice Set the denominator of the protocol's % share of the fees
    function setFeeProtocol() external;
    /// @notice Collect the protocol fee accrued to the pool
    /// @param recipient The address to which collected protocol fees should be sent
    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1
    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0
    /// @return amount0 The protocol fee collected in token0
    /// @return amount1 The protocol fee collected in token1
    function collectProtocol(
    address recipient,
    uint128 amount0Requested,
    uint128 amount1Requested
    ) external returns (uint128 amount0, uint128 amount1);
    function setFee(uint24 _fee) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 22 : IRamsesV3PoolErrors.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Errors emitted by a pool
    /// @notice Contains all events emitted by the pool
    interface IRamsesV3PoolErrors {
    error LOK();
    error TLU();
    error TLM();
    error TUM();
    error AI();
    error M0();
    error M1();
    error AS();
    error IIA();
    error L();
    error F0();
    error F1();
    error SPL();
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 22 : IRamsesV3PoolEvents.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Events emitted by a pool
    /// @notice Contains all events emitted by the pool
    interface IRamsesV3PoolEvents {
    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool
    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize
    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96
    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool
    event Initialize(uint160 sqrtPriceX96, int24 tick);
    /// @notice Emitted when liquidity is minted for a given position
    /// @param sender The address that minted the liquidity
    /// @param owner The owner of the position and recipient of any minted liquidity
    /// @param tickLower The lower tick of the position
    /// @param tickUpper The upper tick of the position
    /// @param amount The amount of liquidity minted to the position range
    /// @param amount0 How much token0 was required for the minted liquidity
    /// @param amount1 How much token1 was required for the minted liquidity
    event Mint(
    address sender,
    address indexed owner,
    int24 indexed tickLower,
    int24 indexed tickUpper,
    uint128 amount,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "remappings": [
    "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@forge-std-1.9.4/=dependencies/forge-std-1.9.4/",
    "@layerzerolabs/=node_modules/@layerzerolabs/",
    "@layerzerolabs/lz-evm-protocol-v2/=node_modules/@layerzerolabs/lz-evm-protocol-v2/",
    "@openzeppelin-contracts-upgradeable/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@openzeppelin-contracts/contracts/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-5.1.0/",
    "erc4626-tests/=dependencies/erc4626-property-tests-1.0/",
    "forge-std/=dependencies/forge-std-1.9.4/src/",
    "permit2/=lib/permit2/",
    "@openzeppelin-3.4.2/=node_modules/@openzeppelin-3.4.2/",
    "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@uniswap/=node_modules/@uniswap/",
    "base64-sol/=node_modules/base64-sol/",
    "ds-test/=node_modules/ds-test/",
    "erc4626-property-tests-1.0/=dependencies/erc4626-property-tests-1.0/",
    "eth-gas-reporter/=node_modules/eth-gas-reporter/",
    "forge-std-1.9.4/=dependencies/forge-std-1.9.4/src/",
    "hardhat/=node_modules/hardhat/",
    "solidity-bytes-utils/=node_modules/solidity-bytes-utils/",
    "solmate/=node_modules/solmate/"
    ],
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    [{"inputs":[{"internalType":"address","name":"_shadow","type":"address"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_accessHub","type":"address"},{"internalType":"address","name":"_voteModule","type":"address"},{"internalType":"address","name":"_minter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ALREADY_EXEMPT","type":"error"},{"inputs":[],"name":"ARRAY_LENGTHS","type":"error"},{"inputs":[],"name":"CANT_RESCUE","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"NOT_AUTHORIZED","type":"error"},{"inputs":[],"name":"NOT_EXEMPT","type":"error"},{"inputs":[],"name":"NOT_MINTER","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NOT_WHITELISTED","type":"error"},{"inputs":[],"name":"NO_CHANGE","type":"error"},{"inputs":[],"name":"NO_VEST","type":"error"},{"inputs":[],"name":"TOO_HIGH","type":"error"},{"inputs":[],"name":"VEST_OVERLAP","type":"error"},{"inputs":[],"name":"ZERO","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CancelVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Converted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"candidate","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"Exemption","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ExitVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"InstantExit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"o","type":"address"},{"indexed":true,"internalType":"address","name":"n","type":"address"}],"name":"NewOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"NewSlashingPenalty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NewVest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"min","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"max","type":"uint256"}],"name":"NewVestingTimes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"XShadowRedeemed","type":"event"},{"inputs":[],"name":"ACCESS_HUB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASIS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_VEST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_VEST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHADOW","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SLASHING_PENALTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTER","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTE_MODULE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"convertEmissionsToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"createVest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"exit","outputs":[{"internalType":"uint256","name":"_exitedAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vestID","type":"uint256"}],"name":"exitVest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalanceResiding","outputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"uint256","name":"_vestID","type":"uint256"}],"name":"getVestInfo","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"maxEnd","type":"uint256"},{"internalType":"uint256","name":"vestID","type":"uint256"}],"internalType":"struct IXShadow.VestPosition","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"}],"name":"isExempt","outputs":[{"internalType":"bool","name":"_exempt","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDistributedPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"migrateOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"operatorRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"rescueTrappedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_exemptee","type":"address[]"},{"internalType":"bool[]","name":"_exempt","type":"bool[]"}],"name":"setExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_exemptee","type":"address[]"},{"internalType":"bool[]","name":"_exempt","type":"bool[]"}],"name":"setExemptionTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shadow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"}],"name":"usersTotalVests","outputs":[{"internalType":"uint256","name":"_length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vestInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"maxEnd","type":"uint256"},{"internalType":"uint256","name":"vestID","type":"uint256"}],"stateMutability":"view","type":"function"}]

    61012080604052346103325760c081612acc8038038091610020828561053f565b8339810103126103325761003381610562565b61003f60208301610562565b9161004c60408201610562565b9161005960608301610562565b9061007260a061006b60808601610562565b9401610562565b936040519561008260408861053f565b600787526678536861646f7760c81b6020880152604051966100a560408961053f565b600788526678534841444f5760c81b60208901528051906001600160401b0382116104425760035490600182811c92168015610535575b60208310146104245781601f8493116104c7575b50602090601f8311600114610461575f92610456575b50508160011b915f199060031b1c1916176003555b86516001600160401b03811161044257600454600181811c91168015610438575b602082101461042457601f81116103c1575b506020601f821160011461035457908060209897969594939260049a5f92610349575b50508160011b915f199060031b1c19161788555b600580546001600160a01b0394851660e052919093166101008190526080969096526001600160a81b03191660089190911b610100600160a81b031617905560a05260c0526101d381610576565b506005546101ec9060081c6001600160a01b0316610576565b5060c051610202906001600160a01b0316610576565b5060c051610218906001600160a01b0316610602565b50604051631ed2419560e01b815292839182905afa90811561033e575f91610308575b50600a55604051612456908161067682396080518181816101f50152610542015260a051818181610289015281816104dd01528181610b9201528181610d3401528181610f7f015281816111a9015281816112560152611343015260c0518181816106150152610efd015260e0518181816102b2015281816104400152818161065f0152818161080e015281816108ff01528181610e2e015281816113c2015261166201526101005181818161059e01528181610cf201528181611c8001528181611eb001526120c90152f35b90506020813d602011610336575b816103236020938361053f565b8101031261033257515f61023b565b5f80fd5b3d9150610316565b6040513d5f823e3d90fd5b015190505f80610171565b601f1982169860045f52815f20995f5b8181106103a9575099600192849260209b9a999897969560049d10610391575b505050811b018855610185565b01515f1960f88460031b161c191690555f8080610384565b838301518c556001909b019a60209384019301610364565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101916020841061041a575b601f0160051c01905b81811061040f575061014e565b5f8155600101610402565b90915081906103f9565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610106565b60035f9081528281209350601f198516905b8181106104af5750908460019594939210610497575b505050811b0160035561011b565b01515f1960f88460031b161c191690555f8080610489565b92936020600181928786015181550195019301610473565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c8101916020851061052b575b90601f859493920160051c01905b81811061051d57506100f0565b5f8155849350600101610510565b9091508190610502565b91607f16916100dc565b601f909101601f19168101906001600160401b0382119082101761044257604052565b51906001600160a01b038216820361033257565b805f52600760205260405f2054155f146105fd57600654680100000000000000008110156104425760018101806006558110156105e9577ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018190556006545f9182526007602052604090912055600190565b634e487b7160e01b5f52603260045260245ffd5b505f90565b805f52600960205260405f2054155f146105fd57600854680100000000000000008110156104425760018101806008558110156105e9577ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018190556008545f918252600960205260409091205560019056fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816306fdde03146118d95750806308b4bd63146117d9578063095ea7b31461175757806311147bd6146116e557806312e82674146115f757806318160ddd146115da57806323b872dd146114aa57806325d64f4b1461148e5780632cf53bd814611456578063313ce5671461143b57806332fef3cf14611321578063353140d0146112375780633f4ba83a1461118b57806349e821931461116e578063528cfa9814611152578063570ca735146111295780635a8aed661461107e5780635c975abb1461105c5780636379808f14610f5857806370a0823114610f2157806379248d94146107ef5780637dd51d7a14610ede5780637f8661a114610db95780638392331114610d9c5780638456cb5914610d165780638ebf2fd614610cd35780638f7b565b14610cb657806394126bb114610b7357806395d89b4114610a6f578063a9059cbb14610a3e578063ab95605414610832578063ac600a3c146107ef578063ad5dff73146107b5578063af14052c1461051f578063b7f045e914610501578063b989216a146104bd578063bacbf61b146103f2578063beb7dc341461026a578063dd62ed3e1461021c5763fe6d8124146101d6575f80fd5b3461021957806003193601126102195760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b5034610219576040366003190112610219576001600160a01b0360406102406119bb565b928261024a6119d1565b9416815260016020522091165f52602052602060405f2054604051908152f35b50346102195761027936611a45565b90916102b0336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693855b8281106102e8578680f35b856001600160a01b036103046102ff848787611b37565b611b54565b16146103ca578060206001600160a01b036103266102ff610377958888611b37565b166001600160a01b0360055460081c169061034284898b611b37565b35918b60405180978195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19182156103bf57600192610391575b50016102dd565b6103b19060203d81116103b8575b6103a98183611ab3565b810190611ae2565b505f61038a565b503d61039f565b6040513d8a823e3d90fd5b6004877f512428f9000000000000000000000000000000000000000000000000000000008152fd5b5034610219578060031936011261021957604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104b1579061047a575b602090604051908152f35b506020813d6020116104a9575b8161049460209383611ab3565b810103126104a5576020905161046f565b5f80fd5b3d9150610487565b604051903d90823e3d90fd5b503461021957806003193601126102195760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102195780600319360112610219576020600a54604051908152f35b50346104a5575f3660031901126104a557610538611b75565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361078e576040517f1ed241950000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610726575f9161075c575b50600a5481118061074e575b6105e2575080f35b600a55600b80545f9091556040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116600483015260248201839052602082806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610726576001600160a01b0392610731575b5016803b156104a5575f80916024604051809481937f3c6b16ab0000000000000000000000000000000000000000000000000000000083528760048401525af1801561072657610711575b506040519081527fcf0cf43969b3f0a08a20481cfa1fd31d1023ab827f0babb8d8125862a9c403f860203392a280f35b61071e9192505f90611ab3565b5f905f6106e1565b6040513d5f823e3d90fd5b6107499060203d6020116103b8576103a98183611ab3565b610696565b50612710600b5410156105da565b90506020813d602011610786575b8161077760209383611ab3565b810103126104a557515f6105ce565b3d915061076a565b7e914334000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55760203660031901126104a5576001600160a01b036107d66119bb565b165f526007602052602060405f20541515604051908152f35b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104a55760203660031901126104a55760043561084e611b75565b335f52600c6020526108638160405f206119e7565b508054908115610a16576001810154905f8155621275008201808311610a02574210156108c45750506108968133611dd7565b6040519081527fcda231b62bdbcfdebaec108470aea3eb3fcc5ebe00d79b6e252850d4bf5c60b560203392a3005b600201544210610978575060405163a9059cbb60e01b81523360048201526024810182905260208180604481015b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107265761095b575b506040519081527f902061c3e3f4d419563154f2c22ef4847f185919d82ff921a64559c1dc83bb7660203392a3005b6109739060203d6020116103b8576103a98183611ab3565b61092c565b61138882029082820461138803610a02576109939042611b68565b9061138882840202918183041481151715610a02576109c36020916127108062ed4e006108f29604049104611ad5565b6109d86109d08286611b68565b600b54611ad5565b600b5560405163a9059cbb60e01b8152336004820152602481019190915291829081906044820190565b634e487b7160e01b5f52601160045260245ffd5b7f2b5d497a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55760403660031901126104a557610a64610a5a6119bb565b6024359033611fde565b602060405160018152f35b346104a5575f3660031901126104a5576040515f6004548060011c90600181168015610b69575b602083108114610b5557828552908115610b315750600114610ad3575b610acf83610ac381850382611ab3565b60405191829182611991565b0390f35b91905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f905b808210610b1757509091508101602001610ac3610ab3565b919260018160209254838588010152019101909291610aff565b60ff191660208086019190915291151560051b84019091019150610ac39050610ab3565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610a96565b346104a557610b8136611a45565b610bb9939193336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b808303610c8e575f5b818110610bcb57005b80837f0c26de26c21d52b9af1eae2bc6d3c4f03cf66cf139d32166af29b8aed71351926001600160a01b0388610c6d610c4d610c1f878a610c476102ff8f9c8d8160019f8e610c24610c1f848f8b90611b37565b611b47565b15610c76576102ff610c41938f93610c3b93611b37565b166123cb565b9c611b37565b95611b37565b946040519384931695839092916020906040830194151583521515910152565b0390a201610bc2565b6102ff610c41938f93610c8893611b37565b166122c6565b7f3d0084d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a5576020600b54604051908152f35b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104a5575f3660031901126104a557610d5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b610d63611b75565b600160ff1960055416176005557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346104a5575f3660031901126104a557602060405162ed4e008152f35b346104a55760203660031901126104a557600435610dd5611b75565b8015610eb657611388810281810461138803610a0257612710610e0791046109d0610e008285611b68565b9333611ba9565b600b5560405163a9059cbb60e01b815233600482015260248101829052906020826044815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af191821561072657602092610e9b575b506040518181527fa8a63b0531e55ae709827fb089d01034e24a200ad14dc710dfa9e962005f629a833392a2604051908152f35b610eb190833d85116103b8576103a98183611ab3565b610e67565b7f58fa63ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104a55760203660031901126104a5576001600160a01b03610f426119bb565b165f525f602052602060405f2054604051908152f35b346104a55760203660031901126104a557610f716119bb565b610fa6336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b600554906001600160a01b038260081c166001600160a01b03821691828214611034577fffffffffffffffffffffff0000000000000000000000000000000000000000ff9274ffffffffffffffffffffffffffffffffffffffff00927ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c5f80a360081b169116176005555f80f35b7fff302aa0000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a557602060ff600554166040519015158152f35b346104a55760403660031901126104a5576001600160a01b0361109f6119bb565b5f60606040516110ae81611a97565b8281528260208201528260408201520152165f52600c60205260806110d860243560405f206119e7565b506040516110e581611a97565b815491828252600181015460208301908152606060036002840154936040860194855201549301928352604051938452516020840152516040830152516060820152f35b346104a5575f3660031901126104a55760206001600160a01b0360055460081c16604051908152f35b346104a5575f3660031901126104a55760206040516127108152f35b346104a5575f3660031901126104a5576020604051621275008152f35b346104a5575f3660031901126104a5576111d0336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b60055460ff81161561120f5760ff19166005557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55761124536611a45565b61127d939193336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b808303610c8e575f5b81811061128f57005b80837f0c26de26c21d52b9af1eae2bc6d3c4f03cf66cf139d32166af29b8aed71351926001600160a01b0388611300610c4d610c1f878a610c476102ff8f9c8d8160019f8e6112e3610c1f848f8b90611b37565b15611309576102ff610c41938f936112fa93611b37565b16612371565b0390a201611286565b6102ff610c41938f9361131b93611b37565b166121eb565b346104a55760203660031901126104a55760043561136a336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b611382816001600160a01b0360055460081c16611ba9565b60055460405163a9059cbb60e01b815260089190911c6001600160a01b0316600482015260248101829052602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107265761141e575b506040519081527f2bccc9c67b5a114aacc02e37dd4596d5aa81ee83a8f7a93e36dd0c901bc258c960203092a2005b6114369060203d6020116103b8576103a98183611ab3565b6113ef565b346104a5575f3660031901126104a557602060405160128152f35b346104a55760203660031901126104a5576001600160a01b036114776119bb565b165f52600c602052602060405f2054604051908152f35b346104a5575f3660031901126104a55760206040516113888152f35b346104a55760603660031901126104a5576114c36119bb565b6114cb6119d1565b604435906001600160a01b03831692835f52600160205260405f206001600160a01b0333165f5260205260405f20545f19810361150e575b50610a649350611fde565b8381106115a657841561157a57331561154e57610a64945f52600160205260405f206001600160a01b0333165f526020528360405f209103905584611503565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b83907ffb8f41b2000000000000000000000000000000000000000000000000000000005f523360045260245260445260645ffd5b346104a5575f3660031901126104a5576020600254604051908152f35b346104a55760203660031901126104a557600435611613611b75565b8015610eb6576040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610726576116c8575b5061169a8133611dd7565b6040519081527fa428517b481b65176e7c35a57b564d5cf943c8462468b8a0f025fa689173f90160203392a2005b6116e09060203d6020116103b8576103a98183611ab3565b61168f565b346104a55760403660031901126104a5576116fe6119bb565b6001600160a01b0360243591165f52600c60205260405f2080548210156104a55760809161172b916119e7565b508054906001810154906003600282015491015491604051938452602084015260408301526060820152f35b346104a55760403660031901126104a5576117706119bb565b60243590331561157a576001600160a01b031690811561154e57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346104a55760203660031901126104a5576004356117f5611b75565b8015610eb6576118058133611ba9565b335f908152600c602052604090208054904262ed4e00810191908210610a02576040519061183282611a97565b84825260208201924284526040830190815260608301918583528054680100000000000000008110156118c55761186e916001820181556119e7565b9490946118b25760039351855551600185015551600284015551910155337f7d9230ebb47980ddc758fe4e69ea83a89dafbceb45bd45934798477baa5776685f80a4005b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b346104a5575f3660031901126104a5575f6003548060011c90600181168015611987575b602083108114610b5557828552908115610b31575060011461192957610acf83610ac381850382611ab3565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b80821061196d57509091508101602001610ac3610ab3565b919260018160209254838588010152019101909291611955565b91607f16916118fd565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036104a557565b602435906001600160a01b03821682036104a557565b8054821015611a00575f5260205f209060021b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9181601f840112156104a55782359167ffffffffffffffff83116104a5576020808501948460051b0101116104a557565b60406003198201126104a55760043567ffffffffffffffff81116104a55781611a7091600401611a14565b929092916024359067ffffffffffffffff82116104a557611a9391600401611a14565b9091565b6080810190811067ffffffffffffffff8211176118c557604052565b90601f8019910116810190811067ffffffffffffffff8211176118c557604052565b91908201809211610a0257565b908160209103126104a5575180151581036104a55790565b15611b025750565b6001600160a01b03907f2bc10c33000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9190811015611a005760051b0190565b3580151581036104a55790565b356001600160a01b03811681036104a55790565b91908203918211610a0257565b60ff60055416611b8157565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091906001600160a01b03168015611dab575f815f52600760205260405f205415801590611da4575b8015611d9c575b8015611d6a575b15611c765750600160ff815b1603611c6457805f525f60205260405f2054838110611c4a576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b630b7b234960e01b5f5260045260245ffd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166040519063aa79979b60e01b8252836004830152602082602481845afa918215610726575f92611d49575b508115611cf5575b50611ce3575b60ff600191611bec565b50611ced816123cb565b506001611cd9565b6024915060209060405192838092635397401b60e01b82528760048301525afa908115610726575f91611d2a575b505f611cd3565b611d43915060203d6020116103b8576103a98183611ab3565b5f611d23565b611d6391925060203d6020116103b8576103a98183611ab3565b905f611ccb565b505f805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b541515611be0565b506001611bd9565b505f611bd2565b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b0316908115611fb2575f80805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df5415801590611faa575b8015611fa3575b8015611f8e575b15611e9b5750600160ff815b1603611e88577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082611e6c5f94600254611ad5565b60025584845283825260408420818154019055604051908152a3565b630b7b234960e01b5f525f60045260245ffd5b60405163aa79979b60e01b81525f60048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa918215610726575f92611f6d575b508115611f19575b50611f07575b60ff600191611e35565b50611f115f6123cb565b506001611efd565b6024915060209060405192838092635397401b60e01b82525f60048301525afa908115610726575f91611f4e575b505f611ef7565b611f67915060203d6020116103b8576103a98183611ab3565b5f611f47565b611f8791925060203d6020116103b8576103a98183611ab3565b905f611eef565b50825f52600960205260405f20541515611e29565b505f611e22565b506001611e1b565b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b0316908115611dab576001600160a01b0316918215611fb2575f825f52600760205260405f2054158015906121cf575b80156121c8575b80156121b3575b156120bf5750600160ff815b16036120ac57815f525f60205260405f205481811061209357817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b50630b7b234960e01b5f5260045260245ffd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166040519063aa79979b60e01b8252846004830152602082602481845afa918215610726575f92612192575b50811561213e575b5061212c575b60ff60019161202f565b50612136826123cb565b506001612122565b6024915060209060405192838092635397401b60e01b82528860048301525afa908115610726575f91612173575b505f61211c565b61218c915060203d6020116103b8576103a98183611ab3565b5f61216c565b6121ac91925060203d6020116103b8576103a98183611ab3565b905f612114565b50835f52600960205260405f20541515612023565b505f61201c565b505f612015565b8054821015611a00575f5260205f2001905f90565b5f8181526009602052604090205480156122c0575f198101818111610a02576008545f19810191908211610a0257818103612272575b505050600854801561225e575f190161223b8160086121d6565b8154905f199060031b1b191690556008555f5260096020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b6122aa6122836122949360086121d6565b90549060031b1c92839260086121d6565b819391549060031b91821b915f19901b19161790565b90555f52600960205260405f20555f8080612221565b50505f90565b5f8181526007602052604090205480156122c0575f198101818111610a02576006545f19810191908211610a0257818103612339575b505050600654801561225e575f19016123168160066121d6565b8154905f199060031b1b191690556006555f5260076020525f6040812055600190565b61235b61234a6122949360066121d6565b90549060031b1c92839260066121d6565b90555f52600760205260405f20555f80806122fc565b805f52600960205260405f2054155f146123c657600854680100000000000000008110156118c5576123af61229482600185940160085560086121d6565b9055600854905f52600960205260405f2055600190565b505f90565b805f52600760205260405f2054155f146123c657600654680100000000000000008110156118c55761240961229482600185940160065560066121d6565b9055600654905f52600760205260405f205560019056fea264697066735822122033595f69a48a1f1ea8c6345866f43e67e3772812dfa858a95d7a81f3689ccda464736f6c634300081c00330000000000000000000000003333b97138d4b086720b5ae8a7844b1345a333330000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff5534320000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f3765

    Deployed Bytecode

    0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816306fdde03146118d95750806308b4bd63146117d9578063095ea7b31461175757806311147bd6146116e557806312e82674146115f757806318160ddd146115da57806323b872dd146114aa57806325d64f4b1461148e5780632cf53bd814611456578063313ce5671461143b57806332fef3cf14611321578063353140d0146112375780633f4ba83a1461118b57806349e821931461116e578063528cfa9814611152578063570ca735146111295780635a8aed661461107e5780635c975abb1461105c5780636379808f14610f5857806370a0823114610f2157806379248d94146107ef5780637dd51d7a14610ede5780637f8661a114610db95780638392331114610d9c5780638456cb5914610d165780638ebf2fd614610cd35780638f7b565b14610cb657806394126bb114610b7357806395d89b4114610a6f578063a9059cbb14610a3e578063ab95605414610832578063ac600a3c146107ef578063ad5dff73146107b5578063af14052c1461051f578063b7f045e914610501578063b989216a146104bd578063bacbf61b146103f2578063beb7dc341461026a578063dd62ed3e1461021c5763fe6d8124146101d6575f80fd5b3461021957806003193601126102195760206040516001600160a01b037f000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f3765168152f35b80fd5b5034610219576040366003190112610219576001600160a01b0360406102406119bb565b928261024a6119d1565b9416815260016020522091165f52602052602060405f2054604051908152f35b50346102195761027936611a45565b90916102b0336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b7f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a333336001600160a01b031693855b8281106102e8578680f35b856001600160a01b036103046102ff848787611b37565b611b54565b16146103ca578060206001600160a01b036103266102ff610377958888611b37565b166001600160a01b0360055460081c169061034284898b611b37565b35918b60405180978195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19182156103bf57600192610391575b50016102dd565b6103b19060203d81116103b8575b6103a98183611ab3565b810190611ae2565b505f61038a565b503d61039f565b6040513d8a823e3d90fd5b6004877f512428f9000000000000000000000000000000000000000000000000000000008152fd5b5034610219578060031936011261021957604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165afa9081156104b1579061047a575b602090604051908152f35b506020813d6020116104a9575b8161049460209383611ab3565b810103126104a5576020905161046f565b5f80fd5b3d9150610487565b604051903d90823e3d90fd5b503461021957806003193601126102195760206040516001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f168152f35b50346102195780600319360112610219576020600a54604051908152f35b50346104a5575f3660031901126104a557610538611b75565b6001600160a01b037f000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f376516330361078e576040517f1ed241950000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f165afa908115610726575f9161075c575b50600a5481118061074e575b6105e2575080f35b600a55600b80545f9091556040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b46001600160a01b038116600483015260248201839052602082806044810103815f6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165af1918215610726576001600160a01b0392610731575b5016803b156104a5575f80916024604051809481937f3c6b16ab0000000000000000000000000000000000000000000000000000000083528760048401525af1801561072657610711575b506040519081527fcf0cf43969b3f0a08a20481cfa1fd31d1023ab827f0babb8d8125862a9c403f860203392a280f35b61071e9192505f90611ab3565b5f905f6106e1565b6040513d5f823e3d90fd5b6107499060203d6020116103b8576103a98183611ab3565b610696565b50612710600b5410156105da565b90506020813d602011610786575b8161077760209383611ab3565b810103126104a557515f6105ce565b3d915061076a565b7e914334000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55760203660031901126104a5576001600160a01b036107d66119bb565b165f526007602052602060405f20541515604051908152f35b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333168152f35b346104a55760203660031901126104a55760043561084e611b75565b335f52600c6020526108638160405f206119e7565b508054908115610a16576001810154905f8155621275008201808311610a02574210156108c45750506108968133611dd7565b6040519081527fcda231b62bdbcfdebaec108470aea3eb3fcc5ebe00d79b6e252850d4bf5c60b560203392a3005b600201544210610978575060405163a9059cbb60e01b81523360048201526024810182905260208180604481015b03815f6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165af180156107265761095b575b506040519081527f902061c3e3f4d419563154f2c22ef4847f185919d82ff921a64559c1dc83bb7660203392a3005b6109739060203d6020116103b8576103a98183611ab3565b61092c565b61138882029082820461138803610a02576109939042611b68565b9061138882840202918183041481151715610a02576109c36020916127108062ed4e006108f29604049104611ad5565b6109d86109d08286611b68565b600b54611ad5565b600b5560405163a9059cbb60e01b8152336004820152602481019190915291829081906044820190565b634e487b7160e01b5f52601160045260245ffd5b7f2b5d497a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55760403660031901126104a557610a64610a5a6119bb565b6024359033611fde565b602060405160018152f35b346104a5575f3660031901126104a5576040515f6004548060011c90600181168015610b69575b602083108114610b5557828552908115610b315750600114610ad3575b610acf83610ac381850382611ab3565b60405191829182611991565b0390f35b91905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f905b808210610b1757509091508101602001610ac3610ab3565b919260018160209254838588010152019101909291610aff565b60ff191660208086019190915291151560051b84019091019150610ac39050610ab3565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610a96565b346104a557610b8136611a45565b610bb9939193336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b808303610c8e575f5b818110610bcb57005b80837f0c26de26c21d52b9af1eae2bc6d3c4f03cf66cf139d32166af29b8aed71351926001600160a01b0388610c6d610c4d610c1f878a610c476102ff8f9c8d8160019f8e610c24610c1f848f8b90611b37565b611b47565b15610c76576102ff610c41938f93610c3b93611b37565b166123cb565b9c611b37565b95611b37565b946040519384931695839092916020906040830194151583521515910152565b0390a201610bc2565b6102ff610c41938f93610c8893611b37565b166122c6565b7f3d0084d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a5576020600b54604051908152f35b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f168152f35b346104a5575f3660031901126104a557610d5b336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b610d63611b75565b600160ff1960055416176005557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346104a5575f3660031901126104a557602060405162ed4e008152f35b346104a55760203660031901126104a557600435610dd5611b75565b8015610eb657611388810281810461138803610a0257612710610e0791046109d0610e008285611b68565b9333611ba9565b600b5560405163a9059cbb60e01b815233600482015260248101829052906020826044815f7f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a333336001600160a01b03165af191821561072657602092610e9b575b506040518181527fa8a63b0531e55ae709827fb089d01034e24a200ad14dc710dfa9e962005f629a833392a2604051908152f35b610eb190833d85116103b8576103a98183611ab3565b610e67565b7f58fa63ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a55760206040516001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4168152f35b346104a55760203660031901126104a5576001600160a01b03610f426119bb565b165f525f602052602060405f2054604051908152f35b346104a55760203660031901126104a557610f716119bb565b610fa6336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b600554906001600160a01b038260081c166001600160a01b03821691828214611034577fffffffffffffffffffffff0000000000000000000000000000000000000000ff9274ffffffffffffffffffffffffffffffffffffffff00927ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c5f80a360081b169116176005555f80f35b7fff302aa0000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a557602060ff600554166040519015158152f35b346104a55760403660031901126104a5576001600160a01b0361109f6119bb565b5f60606040516110ae81611a97565b8281528260208201528260408201520152165f52600c60205260806110d860243560405f206119e7565b506040516110e581611a97565b815491828252600181015460208301908152606060036002840154936040860194855201549301928352604051938452516020840152516040830152516060820152f35b346104a5575f3660031901126104a55760206001600160a01b0360055460081c16604051908152f35b346104a5575f3660031901126104a55760206040516127108152f35b346104a5575f3660031901126104a5576020604051621275008152f35b346104a5575f3660031901126104a5576111d0336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b60055460ff81161561120f5760ff19166005557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55761124536611a45565b61127d939193336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b808303610c8e575f5b81811061128f57005b80837f0c26de26c21d52b9af1eae2bc6d3c4f03cf66cf139d32166af29b8aed71351926001600160a01b0388611300610c4d610c1f878a610c476102ff8f9c8d8160019f8e6112e3610c1f848f8b90611b37565b15611309576102ff610c41938f936112fa93611b37565b16612371565b0390a201611286565b6102ff610c41938f9361131b93611b37565b166121eb565b346104a55760203660031901126104a55760043561136a336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b611382816001600160a01b0360055460081c16611ba9565b60055460405163a9059cbb60e01b815260089190911c6001600160a01b0316600482015260248101829052602081806044810103815f6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165af180156107265761141e575b506040519081527f2bccc9c67b5a114aacc02e37dd4596d5aa81ee83a8f7a93e36dd0c901bc258c960203092a2005b6114369060203d6020116103b8576103a98183611ab3565b6113ef565b346104a5575f3660031901126104a557602060405160128152f35b346104a55760203660031901126104a5576001600160a01b036114776119bb565b165f52600c602052602060405f2054604051908152f35b346104a5575f3660031901126104a55760206040516113888152f35b346104a55760603660031901126104a5576114c36119bb565b6114cb6119d1565b604435906001600160a01b03831692835f52600160205260405f206001600160a01b0333165f5260205260405f20545f19810361150e575b50610a649350611fde565b8381106115a657841561157a57331561154e57610a64945f52600160205260405f206001600160a01b0333165f526020528360405f209103905584611503565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b83907ffb8f41b2000000000000000000000000000000000000000000000000000000005f523360045260245260445260645ffd5b346104a5575f3660031901126104a5576020600254604051908152f35b346104a55760203660031901126104a557600435611613611b75565b8015610eb6576040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064815f6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165af18015610726576116c8575b5061169a8133611dd7565b6040519081527fa428517b481b65176e7c35a57b564d5cf943c8462468b8a0f025fa689173f90160203392a2005b6116e09060203d6020116103b8576103a98183611ab3565b61168f565b346104a55760403660031901126104a5576116fe6119bb565b6001600160a01b0360243591165f52600c60205260405f2080548210156104a55760809161172b916119e7565b508054906001810154906003600282015491015491604051938452602084015260408301526060820152f35b346104a55760403660031901126104a5576117706119bb565b60243590331561157a576001600160a01b031690811561154e57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346104a55760203660031901126104a5576004356117f5611b75565b8015610eb6576118058133611ba9565b335f908152600c602052604090208054904262ed4e00810191908210610a02576040519061183282611a97565b84825260208201924284526040830190815260608301918583528054680100000000000000008110156118c55761186e916001820181556119e7565b9490946118b25760039351855551600185015551600284015551910155337f7d9230ebb47980ddc758fe4e69ea83a89dafbceb45bd45934798477baa5776685f80a4005b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b346104a5575f3660031901126104a5575f6003548060011c90600181168015611987575b602083108114610b5557828552908115610b31575060011461192957610acf83610ac381850382611ab3565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b80821061196d57509091508101602001610ac3610ab3565b919260018160209254838588010152019101909291611955565b91607f16916118fd565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036104a557565b602435906001600160a01b03821682036104a557565b8054821015611a00575f5260205f209060021b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9181601f840112156104a55782359167ffffffffffffffff83116104a5576020808501948460051b0101116104a557565b60406003198201126104a55760043567ffffffffffffffff81116104a55781611a7091600401611a14565b929092916024359067ffffffffffffffff82116104a557611a9391600401611a14565b9091565b6080810190811067ffffffffffffffff8211176118c557604052565b90601f8019910116810190811067ffffffffffffffff8211176118c557604052565b91908201809211610a0257565b908160209103126104a5575180151581036104a55790565b15611b025750565b6001600160a01b03907f2bc10c33000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9190811015611a005760051b0190565b3580151581036104a55790565b356001600160a01b03811681036104a55790565b91908203918211610a0257565b60ff60055416611b8157565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091906001600160a01b03168015611dab575f815f52600760205260405f205415801590611da4575b8015611d9c575b8015611d6a575b15611c765750600160ff815b1603611c6457805f525f60205260405f2054838110611c4a576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b630b7b234960e01b5f5260045260245ffd5b6001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f166040519063aa79979b60e01b8252836004830152602082602481845afa918215610726575f92611d49575b508115611cf5575b50611ce3575b60ff600191611bec565b50611ced816123cb565b506001611cd9565b6024915060209060405192838092635397401b60e01b82528760048301525afa908115610726575f91611d2a575b505f611cd3565b611d43915060203d6020116103b8576103a98183611ab3565b5f611d23565b611d6391925060203d6020116103b8576103a98183611ab3565b905f611ccb565b505f805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b541515611be0565b506001611bd9565b505f611bd2565b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b0316908115611fb2575f80805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df5415801590611faa575b8015611fa3575b8015611f8e575b15611e9b5750600160ff815b1603611e88577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082611e6c5f94600254611ad5565b60025584845283825260408420818154019055604051908152a3565b630b7b234960e01b5f525f60045260245ffd5b60405163aa79979b60e01b81525f60048201527f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f6001600160a01b0316602082602481845afa918215610726575f92611f6d575b508115611f19575b50611f07575b60ff600191611e35565b50611f115f6123cb565b506001611efd565b6024915060209060405192838092635397401b60e01b82525f60048301525afa908115610726575f91611f4e575b505f611ef7565b611f67915060203d6020116103b8576103a98183611ab3565b5f611f47565b611f8791925060203d6020116103b8576103a98183611ab3565b905f611eef565b50825f52600960205260405f20541515611e29565b505f611e22565b506001611e1b565b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b0316908115611dab576001600160a01b0316918215611fb2575f825f52600760205260405f2054158015906121cf575b80156121c8575b80156121b3575b156120bf5750600160ff815b16036120ac57815f525f60205260405f205481811061209357817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b50630b7b234960e01b5f5260045260245ffd5b6001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f166040519063aa79979b60e01b8252846004830152602082602481845afa918215610726575f92612192575b50811561213e575b5061212c575b60ff60019161202f565b50612136826123cb565b506001612122565b6024915060209060405192838092635397401b60e01b82528860048301525afa908115610726575f91612173575b505f61211c565b61218c915060203d6020116103b8576103a98183611ab3565b5f61216c565b6121ac91925060203d6020116103b8576103a98183611ab3565b905f612114565b50835f52600960205260405f20541515612023565b505f61201c565b505f612015565b8054821015611a00575f5260205f2001905f90565b5f8181526009602052604090205480156122c0575f198101818111610a02576008545f19810191908211610a0257818103612272575b505050600854801561225e575f190161223b8160086121d6565b8154905f199060031b1b191690556008555f5260096020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b6122aa6122836122949360086121d6565b90549060031b1c92839260086121d6565b819391549060031b91821b915f19901b19161790565b90555f52600960205260405f20555f8080612221565b50505f90565b5f8181526007602052604090205480156122c0575f198101818111610a02576006545f19810191908211610a0257818103612339575b505050600654801561225e575f19016123168160066121d6565b8154905f199060031b1b191690556006555f5260076020525f6040812055600190565b61235b61234a6122949360066121d6565b90549060031b1c92839260066121d6565b90555f52600760205260405f20555f80806122fc565b805f52600960205260405f2054155f146123c657600854680100000000000000008110156118c5576123af61229482600185940160085560086121d6565b9055600854905f52600960205260405f2055600190565b505f90565b805f52600760205260405f2054155f146123c657600654680100000000000000008110156118c55761240961229482600185940160065560066121d6565b9055600654905f52600760205260405f205560019056fea264697066735822122033595f69a48a1f1ea8c6345866f43e67e3772812dfa858a95d7a81f3689ccda464736f6c634300081c0033

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

    0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a333330000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff5534320000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f3765

    -----Decoded View---------------
    Arg [0] : _shadow (address): 0x3333b97138D4b086720b5aE8A7844b1345a33333
    Arg [1] : _voter (address): 0x3aF1dD7A2755201F8e2D6dCDA1a61d9f54838f4f
    Arg [2] : _operator (address): 0x5Be2e859D0c2453C9aA062860cA27711ff553432
    Arg [3] : _accessHub (address): 0x5e7A9eea6988063A4dBb9CcDDB3E04C923E8E37f
    Arg [4] : _voteModule (address): 0xDCB5A24ec708cc13cee12bFE6799A78a79b666b4
    Arg [5] : _minter (address): 0xc7022F359cD1bDa8aB8a19d1F19d769cbf7F3765

    -----Encoded View---------------
    6 Constructor Arguments found :
    Arg [0] : 0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333
    Arg [1] : 0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f
    Arg [2] : 0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
    Arg [3] : 0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f
    Arg [4] : 000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4
    Arg [5] : 000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f3765


    [ Download: CSV Export  ]
    [ Download: CSV Export  ]

    A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.