Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yann300/c1a28a1f5e9563966a7e3a9d60cea663 to your computer and use it in GitHub Desktop.
Save yann300/c1a28a1f5e9563966a7e3a9d60cea663 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.18+commit.87f61d96.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;
/// @title Callback for IUniswapV3PoolActions#swap
/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface
interface IUniswapV3SwapCallback {
/// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap.
/// @dev In the implementation you must pay the pool tokens owed for the swap.
/// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory.
/// amount0Delta and amount1Delta can both be 0 if no tokens were swapped.
/// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by
/// the end of the swap. If positive, the callback must send that amount of token0 to the pool.
/// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by
/// the end of the swap. If positive, the callback must send that amount of token1 to the pool.
/// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call
function uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes calldata data
) external;
}
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;
import './pool/IUniswapV3PoolImmutables.sol';
import './pool/IUniswapV3PoolState.sol';
import './pool/IUniswapV3PoolDerivedState.sol';
import './pool/IUniswapV3PoolActions.sol';
import './pool/IUniswapV3PoolOwnerActions.sol';
import './pool/IUniswapV3PoolEvents.sol';
/// @title The interface for a Uniswap V3 Pool
/// @notice A Uniswap 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 IUniswapV3Pool is
IUniswapV3PoolImmutables,
IUniswapV3PoolState,
IUniswapV3PoolDerivedState,
IUniswapV3PoolActions,
IUniswapV3PoolOwnerActions,
IUniswapV3PoolEvents
{
}
// 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 IUniswapV3PoolActions {
/// @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 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,
int24 tickLower,
int24 tickUpper,
uint128 amount,
bytes calldata data
) external returns (uint256 amount0, uint256 amount1);
/// @notice Collects tokens owed to a position
/// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.
/// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or
/// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the
/// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.
/// @param recipient The address which should receive the fees collected
/// @param tickLower The lower tick of the position for which to collect fees
/// @param tickUpper The upper tick of the position for which to collect fees
/// @param amount0Requested How much token0 should be withdrawn from the fees owed
/// @param amount1Requested How much token1 should be withdrawn from the fees owed
/// @return amount0 The amount of fees collected in token0
/// @return amount1 The amount of fees collected in token1
function collect(
address recipient,
int24 tickLower,
int24 tickUpper,
uint128 amount0Requested,
uint128 amount1Requested
) external returns (uint128 amount0, uint128 amount1);
/// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position
/// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0
/// @dev Fees must be collected separately via a call to #collect
/// @param tickLower The lower tick of the position for which to burn liquidity
/// @param tickUpper The upper tick of the position for which to burn liquidity
/// @param amount How much liquidity to burn
/// @return amount0 The amount of token0 sent to the recipient
/// @return amount1 The amount of token1 sent to the recipient
function burn(
int24 tickLower,
int24 tickUpper,
uint128 amount
) external returns (uint256 amount0, uint256 amount1);
/// @notice Swap token0 for token1, or token1 for token0
/// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback
/// @param recipient The address to receive the output of the swap
/// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0
/// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)
/// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this
/// value after the swap. If one for zero, the price cannot be greater than this value after the swap
/// @param data Any data to be passed through to the callback
/// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive
/// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive
function swap(
address recipient,
bool zeroForOne,
int256 amountSpecified,
uint160 sqrtPriceLimitX96,
bytes calldata data
) external returns (int256 amount0, int256 amount1);
/// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback
/// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback
/// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling
/// with 0 amount{0,1} and sending the donation amount(s) from the callback
/// @param recipient The address which will receive the token0 and token1 amounts
/// @param amount0 The amount of token0 to send
/// @param amount1 The amount of token1 to send
/// @param data Any data to be passed through to the callback
function flash(
address recipient,
uint256 amount0,
uint256 amount1,
bytes calldata data
) external;
/// @notice Increase the maximum number of price and liquidity observations that this pool will store
/// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to
/// the input observationCardinalityNext.
/// @param observationCardinalityNext The desired minimum number of observations for the pool to store
function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;
}
// 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 IUniswapV3PoolDerivedState {
/// @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
/// @param tickUpper The upper tick of the range
/// @return tickCumulativeInside The snapshot of the tick accumulator for the range
/// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range
/// @return secondsInside The snapshot of seconds per liquidity for the range
function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)
external
view
returns (
int56 tickCumulativeInside,
uint160 secondsPerLiquidityInsideX128,
uint32 secondsInside
);
}
// 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 IUniswapV3PoolEvents {
/// @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,
uint256 amount0,
uint256 amount1
);
/// @notice Emitted when fees are collected by the owner of a position
/// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees
/// @param owner The owner of the position for which fees are collected
/// @param tickLower The lower tick of the position
/// @param tickUpper The upper tick of the position
/// @param amount0 The amount of token0 fees collected
/// @param amount1 The amount of token1 fees collected
event Collect(
address indexed owner,
address recipient,
int24 indexed tickLower,
int24 indexed tickUpper,
uint128 amount0,
uint128 amount1
);
/// @notice Emitted when a position's liquidity is removed
/// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect
/// @param owner The owner of the position for which liquidity is removed
/// @param tickLower The lower tick of the position
/// @param tickUpper The upper tick of the position
/// @param amount The amount of liquidity to remove
/// @param amount0 The amount of token0 withdrawn
/// @param amount1 The amount of token1 withdrawn
event Burn(
address indexed owner,
int24 indexed tickLower,
int24 indexed tickUpper,
uint128 amount,
uint256 amount0,
uint256 amount1
);
/// @notice Emitted by the pool for any swaps between token0 and token1
/// @param sender The address that initiated the swap call, and that received the callback
/// @param recipient The address that received the output of the swap
/// @param amount0 The delta of the token0 balance of the pool
/// @param amount1 The delta of the token1 balance of the pool
/// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96
/// @param liquidity The liquidity of the pool after the swap
/// @param tick The log base 1.0001 of price of the pool after the swap
event Swap(
address indexed sender,
address indexed recipient,
int256 amount0,
int256 amount1,
uint160 sqrtPriceX96,
uint128 liquidity,
int24 tick
);
/// @notice Emitted by the pool for any flashes of token0/token1
/// @param sender The address that initiated the swap call, and that received the callback
/// @param recipient The address that received the tokens from flash
/// @param amount0 The amount of token0 that was flashed
/// @param amount1 The amount of token1 that was flashed
/// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee
/// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee
event Flash(
address indexed sender,
address indexed recipient,
uint256 amount0,
uint256 amount1,
uint256 paid0,
uint256 paid1
);
/// @notice Emitted by the pool for increases to the number of observations that can be stored
/// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index
/// just before a mint/swap/burn.
/// @param observationCardinalityNextOld The previous value of the next observation cardinality
/// @param observationCardinalityNextNew The updated value of the next observation cardinality
event IncreaseObservationCardinalityNext(
uint16 observationCardinalityNextOld,
uint16 observationCardinalityNextNew
);
/// @notice Emitted when the protocol fee is changed by the pool
/// @param feeProtocol0Old The previous value of the token0 protocol fee
/// @param feeProtocol1Old The previous value of the token1 protocol fee
/// @param feeProtocol0New The updated value of the token0 protocol fee
/// @param feeProtocol1New The updated value of the token1 protocol fee
event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);
/// @notice Emitted when the collected protocol fees are withdrawn by the factory owner
/// @param sender The address that collects the protocol fees
/// @param recipient The address that receives the collected protocol fees
/// @param amount0 The amount of token0 protocol fees that is withdrawn
/// @param amount0 The amount of token1 protocol fees that is withdrawn
event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);
}
// 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 IUniswapV3PoolImmutables {
/// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory 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.
/// @return The tick spacing
function tickSpacing() external view returns (int24);
/// @notice The maximum amount of position liquidity that can use any tick in the range
/// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and
/// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool
/// @return The max amount of liquidity per tick
function maxLiquidityPerTick() external view returns (uint128);
}
// 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 IUniswapV3PoolOwnerActions {
/// @notice Set the denominator of the protocol's % share of the fees
/// @param feeProtocol0 new protocol fee for token0 of the pool
/// @param feeProtocol1 new protocol fee for token1 of the pool
function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) 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);
}
// 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 IUniswapV3PoolState {
/// @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
/// 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.
/// observationIndex The index of the last oracle observation that was written,
/// observationCardinality The current maximum number of observations stored in the pool,
/// observationCardinalityNext The next maximum number of observations, to be updated when the observation.
/// 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,
uint16 observationIndex,
uint16 observationCardinality,
uint16 observationCardinalityNext,
uint8 feeProtocol,
bool unlocked
);
/// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool
/// @dev This value can overflow the uint256
function feeGrowthGlobal0X128() external view returns (uint256);
/// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool
/// @dev This value can overflow the uint256
function feeGrowthGlobal1X128() external view returns (uint256);
/// @notice The amounts of token0 and token1 that are owed to the protocol
/// @dev Protocol fees will never exceed uint128 max in either token
function protocolFees() external view returns (uint128 token0, uint128 token1);
/// @notice The currently in range liquidity available to the pool
/// @dev This value has no relationship to the total liquidity across all ticks
function liquidity() external view returns (uint128);
/// @notice Look up information about a specific tick in the pool
/// @param tick The tick to look up
/// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or
/// tick upper,
/// liquidityNet how much liquidity changes when the pool price crosses the tick,
/// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,
/// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,
/// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick
/// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,
/// secondsOutside the seconds spent on the other side of the tick from the current tick,
/// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.
/// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.
/// In addition, these values are only relative and must be used only in comparison to previous snapshots for
/// a specific position.
function ticks(int24 tick)
external
view
returns (
uint128 liquidityGross,
int128 liquidityNet,
uint256 feeGrowthOutside0X128,
uint256 feeGrowthOutside1X128,
int56 tickCumulativeOutside,
uint160 secondsPerLiquidityOutsideX128,
uint32 secondsOutside,
bool initialized
);
/// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information
function tickBitmap(int16 wordPosition) external view returns (uint256);
/// @notice Returns the information about a position by the position's key
/// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper
/// @return _liquidity The amount of liquidity in the position,
/// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,
/// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,
/// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,
/// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke
function positions(bytes32 key)
external
view
returns (
uint128 _liquidity,
uint256 feeGrowthInside0LastX128,
uint256 feeGrowthInside1LastX128,
uint128 tokensOwed0,
uint128 tokensOwed1
);
/// @notice Returns data about a specific observation index
/// @param index The element of the observations array to fetch
/// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time
/// ago, rather than at a specific index in the array.
/// @return blockTimestamp The timestamp of the observation,
/// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,
/// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,
/// Returns initialized whether the observation has been initialized and the values are safe to use
function observations(uint256 index)
external
view
returns (
uint32 blockTimestamp,
int56 tickCumulative,
uint160 secondsPerLiquidityCumulativeX128,
bool initialized
);
}
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;
/// @title Safe casting methods
/// @notice Contains methods for safely casting between types
library SafeCast {
/// @notice Cast a uint256 to a uint160, revert on overflow
/// @param y The uint256 to be downcasted
/// @return z The downcasted integer, now type uint160
function toUint160(uint256 y) internal pure returns (uint160 z) {
require((z = uint160(y)) == y);
}
/// @notice Cast a int256 to a int128, revert on overflow or underflow
/// @param y The int256 to be downcasted
/// @return z The downcasted integer, now type int128
function toInt128(int256 y) internal pure returns (int128 z) {
require((z = int128(y)) == y);
}
/// @notice Cast a uint256 to a int256, revert on overflow
/// @param y The uint256 to be casted
/// @return z The casted integer, now type int256
function toInt256(uint256 y) internal pure returns (int256 z) {
require(y < 2**255);
z = int256(y);
}
}
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;
/// @title Math library for computing sqrt prices from ticks and vice versa
/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports
/// prices between 2**-128 and 2**128
library TickMath {
/// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128
int24 internal constant MIN_TICK = -887272;
/// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128
int24 internal constant MAX_TICK = -MIN_TICK;
/// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)
uint160 internal constant MIN_SQRT_RATIO = 4295128739;
/// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)
uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;
/// @notice Calculates sqrt(1.0001^tick) * 2^96
/// @dev Throws if |tick| > max tick
/// @param tick The input tick for the above formula
/// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)
/// at the given tick
function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {
uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));
require(absTick <= uint256(MAX_TICK), 'T');
uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;
if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;
if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;
if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;
if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;
if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;
if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;
if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;
if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;
if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;
if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;
if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;
if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;
if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;
if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;
if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;
if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;
if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;
if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;
if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;
if (tick > 0) ratio = type(uint256).max / ratio;
// this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.
// we then downcast because we know the result always fits within 160 bits due to our tick input constraint
// we round up in the division so getTickAtSqrtRatio of the output price is always consistent
sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));
}
/// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio
/// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may
/// ever return.
/// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96
/// @return tick The greatest tick for which the ratio is less than or equal to the input ratio
function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {
// second inequality must be < because the price can never reach the price at the max tick
require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');
uint256 ratio = uint256(sqrtPriceX96) << 32;
uint256 r = ratio;
uint256 msb = 0;
assembly {
let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
msb := or(msb, f)
r := shr(f, r)
}
assembly {
let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))
msb := or(msb, f)
r := shr(f, r)
}
assembly {
let f := shl(5, gt(r, 0xFFFFFFFF))
msb := or(msb, f)
r := shr(f, r)
}
assembly {
let f := shl(4, gt(r, 0xFFFF))
msb := or(msb, f)
r := shr(f, r)
}
assembly {
let f := shl(3, gt(r, 0xFF))
msb := or(msb, f)
r := shr(f, r)
}
assembly {
let f := shl(2, gt(r, 0xF))
msb := or(msb, f)
r := shr(f, r)
}
assembly {
let f := shl(1, gt(r, 0x3))
msb := or(msb, f)
r := shr(f, r)
}
assembly {
let f := gt(r, 0x1)
msb := or(msb, f)
}
if (msb >= 128) r = ratio >> (msb - 127);
else r = ratio << (127 - msb);
int256 log_2 = (int256(msb) - 128) << 64;
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(63, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(62, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(61, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(60, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(59, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(58, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(57, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(56, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(55, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(54, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(53, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(52, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(51, f))
r := shr(f, r)
}
assembly {
r := shr(127, mul(r, r))
let f := shr(128, r)
log_2 := or(log_2, shl(50, f))
}
int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number
int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);
int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);
tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;
}
}
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;
import '../interfaces/IPeripheryImmutableState.sol';
/// @title Immutable state
/// @notice Immutable state used by periphery contracts
abstract contract PeripheryImmutableState is IPeripheryImmutableState {
/// @inheritdoc IPeripheryImmutableState
address public immutable override factory;
/// @inheritdoc IPeripheryImmutableState
address public immutable override WETH9;
constructor(address _factory, address _WETH9) {
factory = _factory;
WETH9 = _WETH9;
}
}
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;
/// @title Immutable state
/// @notice Functions that return immutable state of the router
interface IPeripheryImmutableState {
/// @return Returns the address of the Uniswap V3 factory
function factory() external view returns (address);
/// @return Returns the address of WETH9
function WETH9() external view returns (address);
}
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.7.5;
pragma abicoder v2;
/// @title Quoter Interface
/// @notice Supports quoting the calculated amounts from exact input or exact output swaps
/// @dev These functions are not marked view because they rely on calling non-view functions and reverting
/// to compute the result. They are also not gas efficient and should not be called on-chain.
interface IQuoter {
/// @notice Returns the amount out received for a given exact input swap without executing the swap
/// @param path The path of the swap, i.e. each token pair and the pool fee
/// @param amountIn The amount of the first token to swap
/// @return amountOut The amount of the last token that would be received
function quoteExactInput(bytes memory path, uint256 amountIn) external returns (uint256 amountOut);
/// @notice Returns the amount out received for a given exact input but for a swap of a single pool
/// @param tokenIn The token being swapped in
/// @param tokenOut The token being swapped out
/// @param fee The fee of the token pool to consider for the pair
/// @param amountIn The desired input amount
/// @param sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap
/// @return amountOut The amount of `tokenOut` that would be received
function quoteExactInputSingle(
address tokenIn,
address tokenOut,
uint24 fee,
uint256 amountIn,
uint160 sqrtPriceLimitX96
) external returns (uint256 amountOut);
/// @notice Returns the amount in required for a given exact output swap without executing the swap
/// @param path The path of the swap, i.e. each token pair and the pool fee
/// @param amountOut The amount of the last token to receive
/// @return amountIn The amount of first token required to be paid
function quoteExactOutput(bytes memory path, uint256 amountOut) external returns (uint256 amountIn);
/// @notice Returns the amount in required to receive the given exact output amount but for a swap of a single pool
/// @param tokenIn The token being swapped in
/// @param tokenOut The token being swapped out
/// @param fee The fee of the token pool to consider for the pair
/// @param amountOut The desired output amount
/// @param sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap
/// @return amountIn The amount required as the input for the swap in order to receive `amountOut`
function quoteExactOutputSingle(
address tokenIn,
address tokenOut,
uint24 fee,
uint256 amountOut,
uint160 sqrtPriceLimitX96
) external returns (uint256 amountIn);
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:507:18",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:18",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "76:117:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "86:22:18",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "101:6:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "95:5:18"
},
"nodeType": "YulFunctionCall",
"src": "95:13:18"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "86:5:18"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "171:16:18",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "180:1:18",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "183:1:18",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "173:6:18"
},
"nodeType": "YulFunctionCall",
"src": "173:12:18"
},
"nodeType": "YulExpressionStatement",
"src": "173:12:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "130:5:18"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "141:5:18"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "156:3:18",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "161:1:18",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "152:3:18"
},
"nodeType": "YulFunctionCall",
"src": "152:11:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "165:1:18",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "148:3:18"
},
"nodeType": "YulFunctionCall",
"src": "148:19:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "137:3:18"
},
"nodeType": "YulFunctionCall",
"src": "137:31:18"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "127:2:18"
},
"nodeType": "YulFunctionCall",
"src": "127:42:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "120:6:18"
},
"nodeType": "YulFunctionCall",
"src": "120:50:18"
},
"nodeType": "YulIf",
"src": "117:2:18"
}
]
},
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "55:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "66:5:18",
"type": ""
}
],
"src": "14:179:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "296:209:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "342:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "351:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "359:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "344:6:18"
},
"nodeType": "YulFunctionCall",
"src": "344:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "344:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "317:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "326:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "313:3:18"
},
"nodeType": "YulFunctionCall",
"src": "313:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "338:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "309:3:18"
},
"nodeType": "YulFunctionCall",
"src": "309:32:18"
},
"nodeType": "YulIf",
"src": "306:2:18"
},
{
"nodeType": "YulAssignment",
"src": "377:52:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "419:9:18"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "387:31:18"
},
"nodeType": "YulFunctionCall",
"src": "387:42:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "377:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "438:61:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "484:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "495:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "480:3:18"
},
"nodeType": "YulFunctionCall",
"src": "480:18:18"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "448:31:18"
},
"nodeType": "YulFunctionCall",
"src": "448:51:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "438:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "254:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "265:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "277:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "285:6:18",
"type": ""
}
],
"src": "198:307:18"
}
]
},
"contents": "{\n { }\n function abi_decode_t_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := abi_decode_t_address_fromMemory(headStart)\n value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n }\n}",
"id": 18,
"language": "Yul",
"name": "#utility.yul"
}
],
"linkReferences": {},
"object": "60c060405234801561001057600080fd5b5060405161130e38038061130e83398101604081905261002f91610069565b6001600160601b0319606092831b8116608052911b1660a05261009b565b80516001600160a01b038116811461006457600080fd5b919050565b6000806040838503121561007b578182fd5b6100848361004d565b91506100926020840161004d565b90509250929050565b60805160601c60a05160601c6112406100ce60003980610342525080610366528061058652806106d552506112406000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100d3578063cdca1753146100db578063f7729d43146100ee578063fa461e33146101015761007d565b80632f80bb1d1461008257806330d07f21146100ab5780634aa4a4fc146100be575b600080fd5b610095610090366004610e9e565b610116565b6040516100a29190611148565b60405180910390f35b6100956100b9366004610e30565b61017b565b6100c6610340565b6040516100a29190611084565b6100c6610364565b6100956100e9366004610e9e565b610388565b6100956100fc366004610e30565b6103d6565b61011461010f366004610f04565b610555565b005b60005b600061012484610660565b9050600080600061013487610668565b92509250925061014882848389600061017b565b955083156101605761015987610699565b965061016c565b85945050505050610175565b50505050610119565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff808616878216109083166101a65760008490555b6101b18787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836101d78861070c565b60000373ffffffffffffffffffffffffffffffffffffffff8816156101fc5787610222565b8561021b5773fffd8963efd1fc6a506488495d951d5263988d25610222565b6401000276a45b8b8b8e6040516020016102379392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016102669594939291906110a5565b6040805180830381600087803b15801561027f57600080fd5b505af19250505080156102cd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526102ca91810190610ee1565b60015b610333573d8080156102fb576040519150601f19603f3d011682016040523d82523d6000602084013e610300565b606091505b5073ffffffffffffffffffffffffffffffffffffffff841661032157600080555b61032a8161073e565b92505050610337565b5050505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b600061039684610660565b905060008060006103a687610668565b9250925092506103ba8383838960006103d6565b95508315610160576103cb87610699565b96505050505061038b565b600073ffffffffffffffffffffffffffffffffffffffff808616908716106103ff8787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836104258861070c565b73ffffffffffffffffffffffffffffffffffffffff881615610447578761046d565b856104665773fffd8963efd1fc6a506488495d951d5263988d2561046d565b6401000276a45b8c8b8d6040516020016104829392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016104b19594939291906110a5565b6040805180830381600087803b1580156104ca57600080fd5b505af1925050508015610518575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261051591810190610ee1565b60015b610333573d808015610546576040519150601f19603f3d011682016040523d82523d6000602084013e61054b565b606091505b5061032a8161073e565b60008313806105645750600082135b61056d57600080fd5b600080600061057b84610668565b9250925092506105ad7f00000000000000000000000000000000000000000000000000000000000000008484846107ef565b5060008060008089136105f3578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a600003610628565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250821561063f57604051818152602081fd5b6000541561065557600054811461065557600080fd5b604051828152602081fd5b516042111590565b600080806106768482610805565b9250610683846014610905565b9050610690846017610805565b91509193909250565b80516060906101759083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016109f5565b60006107047f00000000000000000000000000000000000000000000000000000000000000006106ff868686610bdc565b610c59565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061073a57600080fd5b5090565b600081516020146107db5760448251101561078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590611111565b60405180910390fd5b600482019150818060200190518101906107a89190610f52565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078591906110f7565b818060200190518101906101759190610fbc565b600061033785610800868686610bdc565b610d8f565b60008182601401101561087957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b81601401835110156108ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561097957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600301835110156109ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610a6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610ada57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015610b4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015610b6b5760405191506000825260208201604052610bd3565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610ba4578051835260209283019201610b8c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610be4610dbf565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610c1c579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c9b57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6000610d9b8383610c59565b90503373ffffffffffffffffffffffffffffffffffffffff82161461017557600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610def578081fd5b8135610e02610dfd82611175565b611151565b818152846020838601011115610e16578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a08688031215610e47578081fd5b8535610e52816111e5565b94506020860135610e62816111e5565b9350604086013562ffffff81168114610e79578182fd5b9250606086013591506080860135610e90816111e5565b809150509295509295909350565b60008060408385031215610eb0578182fd5b823567ffffffffffffffff811115610ec6578283fd5b610ed285828601610ddf565b95602094909401359450505050565b60008060408385031215610ef3578182fd5b505080516020909101519092909150565b600080600060608486031215610f18578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610f3c578182fd5b610f4886828701610ddf565b9150509250925092565b600060208284031215610f63578081fd5b815167ffffffffffffffff811115610f79578182fd5b8201601f81018413610f89578182fd5b8051610f97610dfd82611175565b818152856020838501011115610fab578384fd5b6103378260208301602086016111b5565b600060208284031215610fcd578081fd5b5051919050565b60008151808452610fec8160208601602086016111b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526110ec60a0830184610fd4565b979650505050505050565b60006020825261110a6020830184610fd4565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156111d05781810151838201526020016111b8565b838111156111df576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461120757600080fd5b5056fea26469706673582212204ba294eca0a366d4d8601eaa80323cb403aa01c4f4d2454757678b73f2acd97c64736f6c63430007060033",
"opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x130E CODESIZE SUB DUP1 PUSH2 0x130E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH2 0x9B JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x84 DUP4 PUSH2 0x4D JUMP JUMPDEST SWAP2 POP PUSH2 0x92 PUSH1 0x20 DUP5 ADD PUSH2 0x4D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x1240 PUSH2 0xCE PUSH1 0x0 CODECOPY DUP1 PUSH2 0x342 MSTORE POP DUP1 PUSH2 0x366 MSTORE DUP1 PUSH2 0x586 MSTORE DUP1 PUSH2 0x6D5 MSTORE POP PUSH2 0x1240 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC45A0155 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0xF7729D43 EQ PUSH2 0xEE JUMPI DUP1 PUSH4 0xFA461E33 EQ PUSH2 0x101 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x2F80BB1D EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x30D07F21 EQ PUSH2 0xAB JUMPI DUP1 PUSH4 0x4AA4A4FC EQ PUSH2 0xBE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA2 SWAP2 SWAP1 PUSH2 0x1148 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0xB9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x17B JUMP JUMPDEST PUSH2 0xC6 PUSH2 0x340 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA2 SWAP2 SWAP1 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0xC6 PUSH2 0x364 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xE9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x388 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xFC CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x3D6 JUMP JUMPDEST PUSH2 0x114 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0xF04 JUMP JUMPDEST PUSH2 0x555 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x124 DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x134 DUP8 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x148 DUP3 DUP5 DUP4 DUP10 PUSH1 0x0 PUSH2 0x17B JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x160 JUMPI PUSH2 0x159 DUP8 PUSH2 0x699 JUMP JUMPDEST SWAP7 POP PUSH2 0x16C JUMP JUMPDEST DUP6 SWAP5 POP POP POP POP POP PUSH2 0x175 JUMP JUMPDEST POP POP POP POP PUSH2 0x119 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP8 DUP3 AND LT SWAP1 DUP4 AND PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP5 SWAP1 SSTORE JUMPDEST PUSH2 0x1B1 DUP8 DUP8 DUP8 PUSH2 0x6CE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x1D7 DUP9 PUSH2 0x70C JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x1FC JUMPI DUP8 PUSH2 0x222 JUMP JUMPDEST DUP6 PUSH2 0x21B JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x222 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP12 DUP12 DUP15 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x237 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x266 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2CD JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2CA SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x333 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x2FB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x300 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 SSTORE JUMPDEST PUSH2 0x32A DUP2 PUSH2 0x73E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x337 JUMP JUMPDEST POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x396 DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3A6 DUP8 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x3BA DUP4 DUP4 DUP4 DUP10 PUSH1 0x0 PUSH2 0x3D6 JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x160 JUMPI PUSH2 0x3CB DUP8 PUSH2 0x699 JUMP JUMPDEST SWAP7 POP POP POP POP POP PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND SWAP1 DUP8 AND LT PUSH2 0x3FF DUP8 DUP8 DUP8 PUSH2 0x6CE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x425 DUP9 PUSH2 0x70C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x447 JUMPI DUP8 PUSH2 0x46D JUMP JUMPDEST DUP6 PUSH2 0x466 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x46D JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP13 DUP12 DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x482 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4B1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x518 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x515 SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x333 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x546 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x54B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH2 0x32A DUP2 PUSH2 0x73E JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x564 JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x57B DUP5 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x5AD PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x7EF JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP10 SGT PUSH2 0x5F3 JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 DUP11 PUSH1 0x0 SUB PUSH2 0x628 JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 DUP10 PUSH1 0x0 SUB JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP3 ISZERO PUSH2 0x63F JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST PUSH1 0x0 SLOAD ISZERO PUSH2 0x655 JUMPI PUSH1 0x0 SLOAD DUP2 EQ PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x676 DUP5 DUP3 PUSH2 0x805 JUMP JUMPDEST SWAP3 POP PUSH2 0x683 DUP5 PUSH1 0x14 PUSH2 0x905 JUMP JUMPDEST SWAP1 POP PUSH2 0x690 DUP5 PUSH1 0x17 PUSH2 0x805 JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x175 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x9F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x704 PUSH32 0x0 PUSH2 0x6FF DUP7 DUP7 DUP7 PUSH2 0xBDC JUMP JUMPDEST PUSH2 0xC59 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x73A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x7DB JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x785 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x7A8 SWAP2 SWAP1 PUSH2 0xF52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x785 SWAP2 SWAP1 PUSH2 0x10F7 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x175 SWAP2 SWAP1 PUSH2 0xFBC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x337 DUP6 PUSH2 0x800 DUP7 DUP7 DUP7 PUSH2 0xBDC JUMP JUMPDEST PUSH2 0xD8F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x879 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x979 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x9EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0xA69 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0xADA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0xB4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0xB6B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0xBA4 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xB8C JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xBE4 PUSH2 0xDBF JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xC1C JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xC9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0xE34F199B19B2B4F47F68442619D555527D244F78A3297EA89325F843F87B8B54 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD9B DUP4 DUP4 PUSH2 0xC59 JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xDEF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE02 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST PUSH2 0x1151 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xE16 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xE47 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xE52 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xE62 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE79 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0xE90 DUP2 PUSH2 0x11E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEB0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEC6 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xED2 DUP6 DUP3 DUP7 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEF3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF18 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF3C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xF48 DUP7 DUP3 DUP8 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF63 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF79 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0xF89 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xF97 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0xFAB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x337 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFCD JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xFEC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x10EC PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x110A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x116D JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1189 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11DF JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B LOG2 SWAP5 0xEC LOG0 LOG3 PUSH7 0xD4D8601EAA8032 EXTCODECOPY 0xB4 SUB 0xAA ADD 0xC4 DELEGATECALL 0xD2 GASLIMIT SELFBALANCE JUMPI PUSH8 0x8B73F2ACD97C6473 PUSH16 0x6C634300070600330000000000000000 ",
"sourceMap": "875:5721:13:-:0;;;1150:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;522:18:10;;;;;;;;550:14;;;;;875:5721:13;;14:179:18;95:13;;-1:-1:-1;;;;;137:31:18;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:307::-;;;338:2;326:9;317:7;313:23;309:32;306:2;;;359:6;351;344:22;306:2;387:42;419:9;387:42;:::i;:::-;377:52;;448:51;495:2;484:9;480:18;448:51;:::i;:::-;438:61;;296:209;;;;;:::o;:::-;875:5721:13;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:6675:18",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:18",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "68:431:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "117:24:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "126:5:18"
},
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "133:5:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "119:6:18"
},
"nodeType": "YulFunctionCall",
"src": "119:20:18"
},
"nodeType": "YulExpressionStatement",
"src": "119:20:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "96:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "104:4:18",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "92:3:18"
},
"nodeType": "YulFunctionCall",
"src": "92:17:18"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "111:3:18"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "88:3:18"
},
"nodeType": "YulFunctionCall",
"src": "88:27:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "81:6:18"
},
"nodeType": "YulFunctionCall",
"src": "81:35:18"
},
"nodeType": "YulIf",
"src": "78:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "150:30:18",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "173:6:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "160:12:18"
},
"nodeType": "YulFunctionCall",
"src": "160:20:18"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "154:2:18",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "189:64:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "249:2:18"
}
],
"functionName": {
"name": "array_allocation_size_t_bytes",
"nodeType": "YulIdentifier",
"src": "219:29:18"
},
"nodeType": "YulFunctionCall",
"src": "219:33:18"
}
],
"functionName": {
"name": "allocateMemory",
"nodeType": "YulIdentifier",
"src": "204:14:18"
},
"nodeType": "YulFunctionCall",
"src": "204:49:18"
},
"variables": [
{
"name": "array_1",
"nodeType": "YulTypedName",
"src": "193:7:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "array_1",
"nodeType": "YulIdentifier",
"src": "269:7:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "278:2:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "262:6:18"
},
"nodeType": "YulFunctionCall",
"src": "262:19:18"
},
"nodeType": "YulExpressionStatement",
"src": "262:19:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "329:24:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "338:5:18"
},
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "345:5:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "331:6:18"
},
"nodeType": "YulFunctionCall",
"src": "331:20:18"
},
"nodeType": "YulExpressionStatement",
"src": "331:20:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "304:6:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "312:2:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "300:3:18"
},
"nodeType": "YulFunctionCall",
"src": "300:15:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "296:3:18"
},
"nodeType": "YulFunctionCall",
"src": "296:26:18"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "324:3:18"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "293:2:18"
},
"nodeType": "YulFunctionCall",
"src": "293:35:18"
},
"nodeType": "YulIf",
"src": "290:2:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "array_1",
"nodeType": "YulIdentifier",
"src": "379:7:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "388:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "375:3:18"
},
"nodeType": "YulFunctionCall",
"src": "375:18:18"
},
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "399:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "407:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "395:3:18"
},
"nodeType": "YulFunctionCall",
"src": "395:17:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "414:2:18"
}
],
"functionName": {
"name": "calldatacopy",
"nodeType": "YulIdentifier",
"src": "362:12:18"
},
"nodeType": "YulFunctionCall",
"src": "362:55:18"
},
"nodeType": "YulExpressionStatement",
"src": "362:55:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "array_1",
"nodeType": "YulIdentifier",
"src": "441:7:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "450:2:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "437:3:18"
},
"nodeType": "YulFunctionCall",
"src": "437:16:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "455:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "433:3:18"
},
"nodeType": "YulFunctionCall",
"src": "433:27:18"
},
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "462:5:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "426:6:18"
},
"nodeType": "YulFunctionCall",
"src": "426:42:18"
},
"nodeType": "YulExpressionStatement",
"src": "426:42:18"
},
{
"nodeType": "YulAssignment",
"src": "477:16:18",
"value": {
"name": "array_1",
"nodeType": "YulIdentifier",
"src": "486:7:18"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "477:5:18"
}
]
}
]
},
"name": "abi_decode_t_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "42:6:18",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "50:3:18",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "58:5:18",
"type": ""
}
],
"src": "14:485:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "641:658:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "688:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "697:6:18"
},
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "705:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "690:6:18"
},
"nodeType": "YulFunctionCall",
"src": "690:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "690:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "662:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "671:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "658:3:18"
},
"nodeType": "YulFunctionCall",
"src": "658:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "683:3:18",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "654:3:18"
},
"nodeType": "YulFunctionCall",
"src": "654:33:18"
},
"nodeType": "YulIf",
"src": "651:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "723:36:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "749:9:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "736:12:18"
},
"nodeType": "YulFunctionCall",
"src": "736:23:18"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "727:5:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "795:5:18"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "768:26:18"
},
"nodeType": "YulFunctionCall",
"src": "768:33:18"
},
"nodeType": "YulExpressionStatement",
"src": "768:33:18"
},
{
"nodeType": "YulAssignment",
"src": "810:15:18",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "820:5:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "810:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "834:47:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "866:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "877:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "862:3:18"
},
"nodeType": "YulFunctionCall",
"src": "862:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "849:12:18"
},
"nodeType": "YulFunctionCall",
"src": "849:32:18"
},
"variables": [
{
"name": "value_1",
"nodeType": "YulTypedName",
"src": "838:7:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "917:7:18"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "890:26:18"
},
"nodeType": "YulFunctionCall",
"src": "890:35:18"
},
"nodeType": "YulExpressionStatement",
"src": "890:35:18"
},
{
"nodeType": "YulAssignment",
"src": "934:17:18",
"value": {
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "944:7:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "934:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "960:47:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "992:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1003:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "988:3:18"
},
"nodeType": "YulFunctionCall",
"src": "988:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "975:12:18"
},
"nodeType": "YulFunctionCall",
"src": "975:32:18"
},
"variables": [
{
"name": "value_2",
"nodeType": "YulTypedName",
"src": "964:7:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1063:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "1072:6:18"
},
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "1080:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1065:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1065:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "1065:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value_2",
"nodeType": "YulIdentifier",
"src": "1029:7:18"
},
{
"arguments": [
{
"name": "value_2",
"nodeType": "YulIdentifier",
"src": "1042:7:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1051:8:18",
"type": "",
"value": "0xffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "1038:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1038:22:18"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "1026:2:18"
},
"nodeType": "YulFunctionCall",
"src": "1026:35:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1019:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1019:43:18"
},
"nodeType": "YulIf",
"src": "1016:2:18"
},
{
"nodeType": "YulAssignment",
"src": "1098:17:18",
"value": {
"name": "value_2",
"nodeType": "YulIdentifier",
"src": "1108:7:18"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1098:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1124:42:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1151:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1162:2:18",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1147:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1147:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1134:12:18"
},
"nodeType": "YulFunctionCall",
"src": "1134:32:18"
},
"variableNames": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "1124:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "1175:48:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1207:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1218:3:18",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1203:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1203:19:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1190:12:18"
},
"nodeType": "YulFunctionCall",
"src": "1190:33:18"
},
"variables": [
{
"name": "value_3",
"nodeType": "YulTypedName",
"src": "1179:7:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value_3",
"nodeType": "YulIdentifier",
"src": "1259:7:18"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "1232:26:18"
},
"nodeType": "YulFunctionCall",
"src": "1232:35:18"
},
"nodeType": "YulExpressionStatement",
"src": "1232:35:18"
},
{
"nodeType": "YulAssignment",
"src": "1276:17:18",
"value": {
"name": "value_3",
"nodeType": "YulIdentifier",
"src": "1286:7:18"
},
"variableNames": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "1276:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint24t_uint256t_uint160",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "575:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "586:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "598:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "606:6:18",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "614:6:18",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "622:6:18",
"type": ""
},
{
"name": "value4",
"nodeType": "YulTypedName",
"src": "630:6:18",
"type": ""
}
],
"src": "504:795:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1400:314:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1446:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1455:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1463:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1448:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1448:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "1448:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1421:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1430:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1417:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1417:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1442:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1413:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1413:32:18"
},
"nodeType": "YulIf",
"src": "1410:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "1481:37:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1508:9:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1495:12:18"
},
"nodeType": "YulFunctionCall",
"src": "1495:23:18"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1485:6:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1561:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1570:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1578:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1563:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1563:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "1563:22:18"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1533:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1541:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "1530:2:18"
},
"nodeType": "YulFunctionCall",
"src": "1530:30:18"
},
"nodeType": "YulIf",
"src": "1527:2:18"
},
{
"nodeType": "YulAssignment",
"src": "1596:61:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1629:9:18"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1640:6:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1625:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1625:22:18"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1649:7:18"
}
],
"functionName": {
"name": "abi_decode_t_bytes",
"nodeType": "YulIdentifier",
"src": "1606:18:18"
},
"nodeType": "YulFunctionCall",
"src": "1606:51:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1596:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1666:42:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1693:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1704:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1689:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1689:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1676:12:18"
},
"nodeType": "YulFunctionCall",
"src": "1676:32:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1666:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes_memory_ptrt_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1358:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1369:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1381:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1389:6:18",
"type": ""
}
],
"src": "1304:410:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1815:157:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1861:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1870:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1878:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1863:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1863:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "1863:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1836:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1845:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1832:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1832:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1857:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1828:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1828:32:18"
},
"nodeType": "YulIf",
"src": "1825:2:18"
},
{
"nodeType": "YulAssignment",
"src": "1896:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1912:9:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "1906:5:18"
},
"nodeType": "YulFunctionCall",
"src": "1906:16:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1896:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1931:35:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1951:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1962:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1947:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1947:18:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "1941:5:18"
},
"nodeType": "YulFunctionCall",
"src": "1941:25:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1931:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_int256t_int256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1773:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1784:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1796:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1804:6:18",
"type": ""
}
],
"src": "1719:253:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2088:365:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2134:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2143:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2151:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2136:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2136:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2136:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2109:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2118:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2105:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2105:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2130:2:18",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2101:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2101:32:18"
},
"nodeType": "YulIf",
"src": "2098:2:18"
},
{
"nodeType": "YulAssignment",
"src": "2169:33:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2192:9:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2179:12:18"
},
"nodeType": "YulFunctionCall",
"src": "2179:23:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2169:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2211:42:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2238:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2249:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2234:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2234:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2221:12:18"
},
"nodeType": "YulFunctionCall",
"src": "2221:32:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2211:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "2262:46:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2293:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2304:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2289:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2289:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2276:12:18"
},
"nodeType": "YulFunctionCall",
"src": "2276:32:18"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2266:6:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2351:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "2360:6:18"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "2368:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2353:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2353:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2353:22:18"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2323:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2331:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2320:2:18"
},
"nodeType": "YulFunctionCall",
"src": "2320:30:18"
},
"nodeType": "YulIf",
"src": "2317:2:18"
},
{
"nodeType": "YulAssignment",
"src": "2386:61:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2419:9:18"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2430:6:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2415:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2415:22:18"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2439:7:18"
}
],
"functionName": {
"name": "abi_decode_t_bytes",
"nodeType": "YulIdentifier",
"src": "2396:18:18"
},
"nodeType": "YulFunctionCall",
"src": "2396:51:18"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "2386:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2038:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2049:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2061:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "2069:6:18",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "2077:6:18",
"type": ""
}
],
"src": "1977:476:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2549:585:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2595:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2604:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2612:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2597:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2597:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2597:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2570:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2579:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2566:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2566:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2591:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2562:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2562:32:18"
},
"nodeType": "YulIf",
"src": "2559:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "2630:30:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2650:9:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2644:5:18"
},
"nodeType": "YulFunctionCall",
"src": "2644:16:18"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2634:6:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2703:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2712:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2720:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2705:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2705:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2705:22:18"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2675:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2683:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2672:2:18"
},
"nodeType": "YulFunctionCall",
"src": "2672:30:18"
},
"nodeType": "YulIf",
"src": "2669:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "2738:32:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2752:9:18"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2763:6:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2748:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2748:22:18"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "2742:2:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2818:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2827:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2835:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2820:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2820:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2820:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "2797:2:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2801:4:18",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2793:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2793:13:18"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2808:7:18"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2789:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2789:27:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2782:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2782:35:18"
},
"nodeType": "YulIf",
"src": "2779:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "2853:19:18",
"value": {
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "2869:2:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2863:5:18"
},
"nodeType": "YulFunctionCall",
"src": "2863:9:18"
},
"variables": [
{
"name": "_2",
"nodeType": "YulTypedName",
"src": "2857:2:18",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "2881:62:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "2939:2:18"
}
],
"functionName": {
"name": "array_allocation_size_t_bytes",
"nodeType": "YulIdentifier",
"src": "2909:29:18"
},
"nodeType": "YulFunctionCall",
"src": "2909:33:18"
}
],
"functionName": {
"name": "allocateMemory",
"nodeType": "YulIdentifier",
"src": "2894:14:18"
},
"nodeType": "YulFunctionCall",
"src": "2894:49:18"
},
"variables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "2885:5:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "2959:5:18"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "2966:2:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2952:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2952:17:18"
},
"nodeType": "YulExpressionStatement",
"src": "2952:17:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3015:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3024:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3032:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3017:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3017:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "3017:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "2992:2:18"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "2996:2:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2988:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2988:11:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3001:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2984:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2984:20:18"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3006:7:18"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2981:2:18"
},
"nodeType": "YulFunctionCall",
"src": "2981:33:18"
},
"nodeType": "YulIf",
"src": "2978:2:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "3076:2:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3080:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3072:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3072:11:18"
},
{
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "3089:5:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3096:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3085:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3085:14:18"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "3101:2:18"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "3050:21:18"
},
"nodeType": "YulFunctionCall",
"src": "3050:54:18"
},
"nodeType": "YulExpressionStatement",
"src": "3050:54:18"
},
{
"nodeType": "YulAssignment",
"src": "3113:15:18",
"value": {
"name": "array",
"nodeType": "YulIdentifier",
"src": "3123:5:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3113:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2515:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2526:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2538:6:18",
"type": ""
}
],
"src": "2458:676:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3220:113:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "3266:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3275:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3283:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3268:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3268:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "3268:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3241:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3250:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "3237:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3237:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3262:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "3233:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3233:32:18"
},
"nodeType": "YulIf",
"src": "3230:2:18"
},
{
"nodeType": "YulAssignment",
"src": "3301:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3317:9:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3311:5:18"
},
"nodeType": "YulFunctionCall",
"src": "3311:16:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3301:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "3186:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "3197:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3209:6:18",
"type": ""
}
],
"src": "3139:194:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3389:267:18",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3399:26:18",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3419:5:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3413:5:18"
},
"nodeType": "YulFunctionCall",
"src": "3413:12:18"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3403:6:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3441:3:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3446:6:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3434:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3434:19:18"
},
"nodeType": "YulExpressionStatement",
"src": "3434:19:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3488:5:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3495:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3484:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3484:16:18"
},
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3506:3:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3511:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3502:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3502:14:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3518:6:18"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "3462:21:18"
},
"nodeType": "YulFunctionCall",
"src": "3462:63:18"
},
"nodeType": "YulExpressionStatement",
"src": "3462:63:18"
},
{
"nodeType": "YulAssignment",
"src": "3534:116:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3549:3:18"
},
{
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3562:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3570:2:18",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3558:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3558:15:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3575:66:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3554:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3554:88:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3545:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3545:98:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3645:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3541:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3541:109:18"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "3534:3:18"
}
]
}
]
},
"name": "abi_encode_t_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3366:5:18",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3373:3:18",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "3381:3:18",
"type": ""
}
],
"src": "3338:318:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3834:341:18",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3844:76:18",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "3854:66:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "3848:2:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3936:3:18"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3949:2:18",
"type": "",
"value": "96"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3953:6:18"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "3945:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3945:15:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "3962:2:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3941:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3941:24:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3929:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3929:37:18"
},
"nodeType": "YulExpressionStatement",
"src": "3929:37:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3986:3:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3991:2:18",
"type": "",
"value": "20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3982:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3982:12:18"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4004:3:18",
"type": "",
"value": "232"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "4009:6:18"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "4000:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4000:16:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4018:66:18",
"type": "",
"value": "0xffffff0000000000000000000000000000000000000000000000000000000000"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3996:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3996:89:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3975:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3975:111:18"
},
"nodeType": "YulExpressionStatement",
"src": "3975:111:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4106:3:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4111:2:18",
"type": "",
"value": "23"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4102:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4102:12:18"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4124:2:18",
"type": "",
"value": "96"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4128:6:18"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "4120:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4120:15:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4137:2:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4116:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4116:24:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4095:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4095:46:18"
},
"nodeType": "YulExpressionStatement",
"src": "4095:46:18"
},
{
"nodeType": "YulAssignment",
"src": "4150:19:18",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4161:3:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4166:2:18",
"type": "",
"value": "43"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4157:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4157:12:18"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "4150:3:18"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3794:3:18",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "3799:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "3807:6:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3815:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "3826:3:18",
"type": ""
}
],
"src": "3661:514:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4281:125:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4291:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4303:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4314:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4299:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4299:18:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4291:4:18"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4333:9:18"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4348:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4356:42:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4344:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4344:55:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4326:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4326:74:18"
},
"nodeType": "YulExpressionStatement",
"src": "4326:74:18"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4250:9:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4261:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4272:4:18",
"type": ""
}
],
"src": "4180:226:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4634:370:18",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4644:52:18",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "4654:42:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "4648:2:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4712:9:18"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4727:6:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4735:2:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4723:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4723:15:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4705:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4705:34:18"
},
"nodeType": "YulExpressionStatement",
"src": "4705:34:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4759:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4770:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4755:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4755:18:18"
},
{
"arguments": [
{
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "4789:6:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "4782:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4782:14:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "4775:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4775:22:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4748:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4748:50:18"
},
"nodeType": "YulExpressionStatement",
"src": "4748:50:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4818:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4829:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4814:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4814:18:18"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4834:6:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4807:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4807:34:18"
},
"nodeType": "YulExpressionStatement",
"src": "4807:34:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4861:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4872:2:18",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4857:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4857:18:18"
},
{
"arguments": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "4881:6:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4889:2:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4877:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4877:15:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4850:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4850:43:18"
},
"nodeType": "YulExpressionStatement",
"src": "4850:43:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4913:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4924:3:18",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4909:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4909:19:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4930:3:18",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4902:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4902:32:18"
},
"nodeType": "YulExpressionStatement",
"src": "4902:32:18"
},
{
"nodeType": "YulAssignment",
"src": "4943:55:18",
"value": {
"arguments": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "4970:6:18"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4982:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4993:3:18",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4978:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4978:19:18"
}
],
"functionName": {
"name": "abi_encode_t_bytes",
"nodeType": "YulIdentifier",
"src": "4951:18:18"
},
"nodeType": "YulFunctionCall",
"src": "4951:47:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4943:4:18"
}
]
}
]
},
"name": "abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4571:9:18",
"type": ""
},
{
"name": "value4",
"nodeType": "YulTypedName",
"src": "4582:6:18",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "4590:6:18",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "4598:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "4606:6:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4614:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4625:4:18",
"type": ""
}
],
"src": "4411:593:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5130:100:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5147:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5158:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5140:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5140:21:18"
},
"nodeType": "YulExpressionStatement",
"src": "5140:21:18"
},
{
"nodeType": "YulAssignment",
"src": "5170:54:18",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5197:6:18"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5209:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5220:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5205:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5205:18:18"
}
],
"functionName": {
"name": "abi_encode_t_bytes",
"nodeType": "YulIdentifier",
"src": "5178:18:18"
},
"nodeType": "YulFunctionCall",
"src": "5178:46:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5170:4:18"
}
]
}
]
},
"name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5099:9:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "5110:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5121:4:18",
"type": ""
}
],
"src": "5009:221:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5409:166:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5426:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5437:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5419:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5419:21:18"
},
"nodeType": "YulExpressionStatement",
"src": "5419:21:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5460:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5471:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5456:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5456:18:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5476:2:18",
"type": "",
"value": "16"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5449:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5449:30:18"
},
"nodeType": "YulExpressionStatement",
"src": "5449:30:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5499:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5510:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5495:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5495:18:18"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "5515:18:18",
"type": "",
"value": "Unexpected error"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5488:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5488:46:18"
},
"nodeType": "YulExpressionStatement",
"src": "5488:46:18"
},
{
"nodeType": "YulAssignment",
"src": "5543:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5555:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5566:2:18",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5551:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5551:18:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5543:4:18"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5386:9:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5400:4:18",
"type": ""
}
],
"src": "5235:340:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5681:76:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5691:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5703:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5714:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5699:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5699:18:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5691:4:18"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5733:9:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5744:6:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5726:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5726:25:18"
},
"nodeType": "YulExpressionStatement",
"src": "5726:25:18"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5650:9:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "5661:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5672:4:18",
"type": ""
}
],
"src": "5580:177:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5806:198:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5816:19:18",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5832:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "5826:5:18"
},
"nodeType": "YulFunctionCall",
"src": "5826:9:18"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5816:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "5844:35:18",
"value": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5866:6:18"
},
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "5874:4:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5862:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5862:17:18"
},
"variables": [
{
"name": "newFreePtr",
"nodeType": "YulTypedName",
"src": "5848:10:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "5954:13:18",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "invalid",
"nodeType": "YulIdentifier",
"src": "5956:7:18"
},
"nodeType": "YulFunctionCall",
"src": "5956:9:18"
},
"nodeType": "YulExpressionStatement",
"src": "5956:9:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5897:10:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5909:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "5894:2:18"
},
"nodeType": "YulFunctionCall",
"src": "5894:34:18"
},
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5933:10:18"
},
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5945:6:18"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "5930:2:18"
},
"nodeType": "YulFunctionCall",
"src": "5930:22:18"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "5891:2:18"
},
"nodeType": "YulFunctionCall",
"src": "5891:62:18"
},
"nodeType": "YulIf",
"src": "5888:2:18"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5983:2:18",
"type": "",
"value": "64"
},
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5987:10:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5976:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5976:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "5976:22:18"
}
]
},
"name": "allocateMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "5786:4:18",
"type": ""
}
],
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "5795:6:18",
"type": ""
}
],
"src": "5762:242:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6068:181:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "6112:13:18",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "invalid",
"nodeType": "YulIdentifier",
"src": "6114:7:18"
},
"nodeType": "YulFunctionCall",
"src": "6114:9:18"
},
"nodeType": "YulExpressionStatement",
"src": "6114:9:18"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6084:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6092:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6081:2:18"
},
"nodeType": "YulFunctionCall",
"src": "6081:30:18"
},
"nodeType": "YulIf",
"src": "6078:2:18"
},
{
"nodeType": "YulAssignment",
"src": "6134:109:18",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6154:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6162:4:18",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6150:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6150:17:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6169:66:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "6146:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6146:90:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6238:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6142:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6142:101:18"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "6134:4:18"
}
]
}
]
},
"name": "array_allocation_size_t_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "6048:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "6059:4:18",
"type": ""
}
],
"src": "6009:240:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6307:205:18",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6317:10:18",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "6326:1:18",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "6321:1:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "6386:63:18",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "6411:3:18"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6416:1:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6407:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6407:11:18"
},
{
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "6430:3:18"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6435:1:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6426:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6426:11:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "6420:5:18"
},
"nodeType": "YulFunctionCall",
"src": "6420:18:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6400:6:18"
},
"nodeType": "YulFunctionCall",
"src": "6400:39:18"
},
"nodeType": "YulExpressionStatement",
"src": "6400:39:18"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6347:1:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6350:6:18"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "6344:2:18"
},
"nodeType": "YulFunctionCall",
"src": "6344:13:18"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "6358:19:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "6360:15:18",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6369:1:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6372:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6365:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6365:10:18"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6360:1:18"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "6340:3:18",
"statements": []
},
"src": "6336:113:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6475:31:18",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "6488:3:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6493:6:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6484:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6484:16:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6502:1:18",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6477:6:18"
},
"nodeType": "YulFunctionCall",
"src": "6477:27:18"
},
"nodeType": "YulExpressionStatement",
"src": "6477:27:18"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6464:1:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6467:6:18"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6461:2:18"
},
"nodeType": "YulFunctionCall",
"src": "6461:13:18"
},
"nodeType": "YulIf",
"src": "6458:2:18"
}
]
},
"name": "copy_memory_to_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "6285:3:18",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "6290:3:18",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "6295:6:18",
"type": ""
}
],
"src": "6254:258:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6564:109:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "6651:16:18",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6660:1:18",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6663:1:18",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "6653:6:18"
},
"nodeType": "YulFunctionCall",
"src": "6653:12:18"
},
"nodeType": "YulExpressionStatement",
"src": "6653:12:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6587:5:18"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6598:5:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6605:42:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "6594:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6594:54:18"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "6584:2:18"
},
"nodeType": "YulFunctionCall",
"src": "6584:65:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "6577:6:18"
},
"nodeType": "YulFunctionCall",
"src": "6577:73:18"
},
"nodeType": "YulIf",
"src": "6574:2:18"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "6553:5:18",
"type": ""
}
],
"src": "6517:156:18"
}
]
},
"contents": "{\n { }\n function abi_decode_t_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), array)\n array := array_1\n }\n function abi_decode_tuple_t_addresst_addresst_uint24t_uint256t_uint160(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(value4, value4) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_t_address(value_1)\n value1 := value_1\n let value_2 := calldataload(add(headStart, 64))\n if iszero(eq(value_2, and(value_2, 0xffffff))) { revert(value4, value4) }\n value2 := value_2\n value3 := calldataload(add(headStart, 96))\n let value_3 := calldataload(add(headStart, 128))\n validator_revert_t_address(value_3)\n value4 := value_3\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_decode_tuple_t_int256t_int256_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := mload(headStart)\n value1 := mload(add(headStart, 32))\n }\n function abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n value2 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := mload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value0, value0) }\n let _2 := mload(_1)\n let array := allocateMemory(array_allocation_size_t_bytes(_2))\n mstore(array, _2)\n if gt(add(add(_1, _2), 32), dataEnd) { revert(value0, value0) }\n copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n value0 := array\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := mload(headStart)\n }\n function abi_encode_t_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n }\n function abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n mstore(pos, and(shl(96, value0), _1))\n mstore(add(pos, 20), and(shl(232, value1), 0xffffff0000000000000000000000000000000000000000000000000000000000))\n mstore(add(pos, 23), and(shl(96, value2), _1))\n end := add(pos, 43)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), iszero(iszero(value1)))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, _1))\n mstore(add(headStart, 128), 160)\n tail := abi_encode_t_bytes(value4, add(headStart, 160))\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_t_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 16)\n mstore(add(headStart, 64), \"Unexpected error\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function allocateMemory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, size)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_t_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { invalid() }\n size := add(and(add(length, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function validator_revert_t_address(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n}",
"id": 18,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {
"1070": [
{
"length": 32,
"start": 870
},
{
"length": 32,
"start": 1414
},
{
"length": 32,
"start": 1749
}
],
"1074": [
{
"length": 32,
"start": 834
}
]
},
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100d3578063cdca1753146100db578063f7729d43146100ee578063fa461e33146101015761007d565b80632f80bb1d1461008257806330d07f21146100ab5780634aa4a4fc146100be575b600080fd5b610095610090366004610e9e565b610116565b6040516100a29190611148565b60405180910390f35b6100956100b9366004610e30565b61017b565b6100c6610340565b6040516100a29190611084565b6100c6610364565b6100956100e9366004610e9e565b610388565b6100956100fc366004610e30565b6103d6565b61011461010f366004610f04565b610555565b005b60005b600061012484610660565b9050600080600061013487610668565b92509250925061014882848389600061017b565b955083156101605761015987610699565b965061016c565b85945050505050610175565b50505050610119565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff808616878216109083166101a65760008490555b6101b18787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836101d78861070c565b60000373ffffffffffffffffffffffffffffffffffffffff8816156101fc5787610222565b8561021b5773fffd8963efd1fc6a506488495d951d5263988d25610222565b6401000276a45b8b8b8e6040516020016102379392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016102669594939291906110a5565b6040805180830381600087803b15801561027f57600080fd5b505af19250505080156102cd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526102ca91810190610ee1565b60015b610333573d8080156102fb576040519150601f19603f3d011682016040523d82523d6000602084013e610300565b606091505b5073ffffffffffffffffffffffffffffffffffffffff841661032157600080555b61032a8161073e565b92505050610337565b5050505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b600061039684610660565b905060008060006103a687610668565b9250925092506103ba8383838960006103d6565b95508315610160576103cb87610699565b96505050505061038b565b600073ffffffffffffffffffffffffffffffffffffffff808616908716106103ff8787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836104258861070c565b73ffffffffffffffffffffffffffffffffffffffff881615610447578761046d565b856104665773fffd8963efd1fc6a506488495d951d5263988d2561046d565b6401000276a45b8c8b8d6040516020016104829392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016104b19594939291906110a5565b6040805180830381600087803b1580156104ca57600080fd5b505af1925050508015610518575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261051591810190610ee1565b60015b610333573d808015610546576040519150601f19603f3d011682016040523d82523d6000602084013e61054b565b606091505b5061032a8161073e565b60008313806105645750600082135b61056d57600080fd5b600080600061057b84610668565b9250925092506105ad7f00000000000000000000000000000000000000000000000000000000000000008484846107ef565b5060008060008089136105f3578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a600003610628565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250821561063f57604051818152602081fd5b6000541561065557600054811461065557600080fd5b604051828152602081fd5b516042111590565b600080806106768482610805565b9250610683846014610905565b9050610690846017610805565b91509193909250565b80516060906101759083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016109f5565b60006107047f00000000000000000000000000000000000000000000000000000000000000006106ff868686610bdc565b610c59565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061073a57600080fd5b5090565b600081516020146107db5760448251101561078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590611111565b60405180910390fd5b600482019150818060200190518101906107a89190610f52565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078591906110f7565b818060200190518101906101759190610fbc565b600061033785610800868686610bdc565b610d8f565b60008182601401101561087957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b81601401835110156108ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561097957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600301835110156109ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610a6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610ada57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015610b4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015610b6b5760405191506000825260208201604052610bd3565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610ba4578051835260209283019201610b8c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610be4610dbf565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610c1c579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c9b57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6000610d9b8383610c59565b90503373ffffffffffffffffffffffffffffffffffffffff82161461017557600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610def578081fd5b8135610e02610dfd82611175565b611151565b818152846020838601011115610e16578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a08688031215610e47578081fd5b8535610e52816111e5565b94506020860135610e62816111e5565b9350604086013562ffffff81168114610e79578182fd5b9250606086013591506080860135610e90816111e5565b809150509295509295909350565b60008060408385031215610eb0578182fd5b823567ffffffffffffffff811115610ec6578283fd5b610ed285828601610ddf565b95602094909401359450505050565b60008060408385031215610ef3578182fd5b505080516020909101519092909150565b600080600060608486031215610f18578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610f3c578182fd5b610f4886828701610ddf565b9150509250925092565b600060208284031215610f63578081fd5b815167ffffffffffffffff811115610f79578182fd5b8201601f81018413610f89578182fd5b8051610f97610dfd82611175565b818152856020838501011115610fab578384fd5b6103378260208301602086016111b5565b600060208284031215610fcd578081fd5b5051919050565b60008151808452610fec8160208601602086016111b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526110ec60a0830184610fd4565b979650505050505050565b60006020825261110a6020830184610fd4565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156111d05781810151838201526020016111b8565b838111156111df576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461120757600080fd5b5056fea26469706673582212204ba294eca0a366d4d8601eaa80323cb403aa01c4f4d2454757678b73f2acd97c64736f6c63430007060033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC45A0155 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0xF7729D43 EQ PUSH2 0xEE JUMPI DUP1 PUSH4 0xFA461E33 EQ PUSH2 0x101 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x2F80BB1D EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x30D07F21 EQ PUSH2 0xAB JUMPI DUP1 PUSH4 0x4AA4A4FC EQ PUSH2 0xBE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA2 SWAP2 SWAP1 PUSH2 0x1148 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0xB9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x17B JUMP JUMPDEST PUSH2 0xC6 PUSH2 0x340 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA2 SWAP2 SWAP1 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0xC6 PUSH2 0x364 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xE9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x388 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xFC CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x3D6 JUMP JUMPDEST PUSH2 0x114 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0xF04 JUMP JUMPDEST PUSH2 0x555 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x124 DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x134 DUP8 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x148 DUP3 DUP5 DUP4 DUP10 PUSH1 0x0 PUSH2 0x17B JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x160 JUMPI PUSH2 0x159 DUP8 PUSH2 0x699 JUMP JUMPDEST SWAP7 POP PUSH2 0x16C JUMP JUMPDEST DUP6 SWAP5 POP POP POP POP POP PUSH2 0x175 JUMP JUMPDEST POP POP POP POP PUSH2 0x119 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP8 DUP3 AND LT SWAP1 DUP4 AND PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP5 SWAP1 SSTORE JUMPDEST PUSH2 0x1B1 DUP8 DUP8 DUP8 PUSH2 0x6CE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x1D7 DUP9 PUSH2 0x70C JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x1FC JUMPI DUP8 PUSH2 0x222 JUMP JUMPDEST DUP6 PUSH2 0x21B JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x222 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP12 DUP12 DUP15 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x237 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x266 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2CD JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2CA SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x333 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x2FB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x300 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 SSTORE JUMPDEST PUSH2 0x32A DUP2 PUSH2 0x73E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x337 JUMP JUMPDEST POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x396 DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3A6 DUP8 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x3BA DUP4 DUP4 DUP4 DUP10 PUSH1 0x0 PUSH2 0x3D6 JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x160 JUMPI PUSH2 0x3CB DUP8 PUSH2 0x699 JUMP JUMPDEST SWAP7 POP POP POP POP POP PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND SWAP1 DUP8 AND LT PUSH2 0x3FF DUP8 DUP8 DUP8 PUSH2 0x6CE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x425 DUP9 PUSH2 0x70C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x447 JUMPI DUP8 PUSH2 0x46D JUMP JUMPDEST DUP6 PUSH2 0x466 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x46D JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP13 DUP12 DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x482 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4B1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x518 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x515 SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x333 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x546 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x54B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH2 0x32A DUP2 PUSH2 0x73E JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x564 JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x57B DUP5 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x5AD PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x7EF JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP10 SGT PUSH2 0x5F3 JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 DUP11 PUSH1 0x0 SUB PUSH2 0x628 JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 DUP10 PUSH1 0x0 SUB JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP3 ISZERO PUSH2 0x63F JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST PUSH1 0x0 SLOAD ISZERO PUSH2 0x655 JUMPI PUSH1 0x0 SLOAD DUP2 EQ PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x676 DUP5 DUP3 PUSH2 0x805 JUMP JUMPDEST SWAP3 POP PUSH2 0x683 DUP5 PUSH1 0x14 PUSH2 0x905 JUMP JUMPDEST SWAP1 POP PUSH2 0x690 DUP5 PUSH1 0x17 PUSH2 0x805 JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x175 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x9F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x704 PUSH32 0x0 PUSH2 0x6FF DUP7 DUP7 DUP7 PUSH2 0xBDC JUMP JUMPDEST PUSH2 0xC59 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x73A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x7DB JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x785 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x7A8 SWAP2 SWAP1 PUSH2 0xF52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x785 SWAP2 SWAP1 PUSH2 0x10F7 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x175 SWAP2 SWAP1 PUSH2 0xFBC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x337 DUP6 PUSH2 0x800 DUP7 DUP7 DUP7 PUSH2 0xBDC JUMP JUMPDEST PUSH2 0xD8F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x879 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x979 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x9EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0xA69 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0xADA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0xB4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0xB6B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0xBA4 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xB8C JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xBE4 PUSH2 0xDBF JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xC1C JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xC9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0xE34F199B19B2B4F47F68442619D555527D244F78A3297EA89325F843F87B8B54 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD9B DUP4 DUP4 PUSH2 0xC59 JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xDEF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE02 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST PUSH2 0x1151 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xE16 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xE47 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xE52 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xE62 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE79 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0xE90 DUP2 PUSH2 0x11E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEB0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEC6 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xED2 DUP6 DUP3 DUP7 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEF3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF18 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF3C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xF48 DUP7 DUP3 DUP8 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF63 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF79 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0xF89 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xF97 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0xFAB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x337 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFCD JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xFEC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x10EC PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x110A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x116D JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1189 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11DF JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B LOG2 SWAP5 0xEC LOG0 LOG3 PUSH7 0xD4D8601EAA8032 EXTCODECOPY 0xB4 SUB 0xAA ADD 0xC4 DELEGATECALL 0xD2 GASLIMIT SELFBALANCE JUMPI PUSH8 0x8B73F2ACD97C6473 PUSH16 0x6C634300070600330000000000000000 ",
"sourceMap": "875:5721:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5929:665;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4821:1074;;;;;;:::i;:::-;;:::i;420:39:10:-;;;:::i;:::-;;;;;;;:::i;328:41::-;;;:::i;4127:660:13:-;;;;;;:::i;:::-;;:::i;3275:818::-;;;;;;:::i;:::-;;:::i;1544:1245::-;;;;;;:::i;:::-;;:::i;:::-;;5929:665;6020:16;6048:540;6075:21;6099:23;:4;:21;:23::i;:::-;6075:47;;6138:16;6156:15;6173:10;6187:22;:4;:20;:22::i;:::-;6137:72;;;;;;6315:60;6338:7;6347:8;6357:3;6362:9;6373:1;6315:22;:60::i;:::-;6303:72;;6449:16;6445:133;;;6492:16;:4;:14;:16::i;:::-;6485:23;;6445:133;;;6554:9;6547:16;;;;;;;;6445:133;6048:540;;;;;;;5929:665;;;;:::o;4821:1074::-;5017:16;5063:18;;;;;;;;;5205:22;;5201:55;;5229:15;:27;;;5201:55;5282:31;5290:7;5299:8;5309:3;5282:7;:31::i;:::-;:36;;;5344:4;5417:10;5446:20;:9;:18;:20::i;:::-;5445:21;;5484:22;;;;:157;;5624:17;5484:157;;;5530:10;:70;;5573:27;5530:70;;;5543:27;5530:70;5676:8;5686:3;5691:7;5659:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5282:431;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5282:431:13;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5266:623;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5771:22:13;;;5767:50;;5802:15;5795:22;;5767:50;5853:25;5871:6;5853:17;:25::i;:::-;5846:32;;;;;;5266:623;;;4821:1074;;;;;;;;;:::o;420:39:10:-;;;:::o;328:41::-;;;:::o;4127:660:13:-;4216:17;4245:536;4272:21;4296:23;:4;:21;:23::i;:::-;4272:47;;4335:15;4352:16;4370:10;4384:22;:4;:20;:22::i;:::-;4334:72;;;;;;4511:58;4533:7;4542:8;4552:3;4557:8;4567:1;4511:21;:58::i;:::-;4500:69;;4643:16;4639:132;;;4686:16;:4;:14;:16::i;:::-;4679:23;;4245:536;;;;;;3275:818;3469:17;3516:18;;;;;;;;3561:31;3516:7;3526:8;3588:3;3561:7;:31::i;:::-;:36;;;3623:4;3696:10;3724:19;:8;:17;:19::i;:::-;3761:22;;;;:157;;3901:17;3761:157;;;3807:10;:70;;3850:27;3807:70;;;3820:27;3807:70;3953:7;3962:3;3967:8;3936:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3561:429;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3561:429:13;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3545:542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4051:25;4069:6;4051:17;:25::i;1544:1245::-;1722:1;1707:12;:16;:36;;;;1742:1;1727:12;:16;1707:36;1699:45;;;;;;1818:15;1835:16;1853:10;1867:22;:4;:20;:22::i;:::-;1817:72;;;;;;1899:66;1933:7;1942;1951:8;1961:3;1899:33;:66::i;:::-;;1977:17;1996:19;2017:22;2070:1;2055:12;:16;:188;;2188:7;2177:18;;:8;:18;;;2205:12;2229;2228:13;;2055:188;;;2101:8;2091:18;;:7;:18;;;2119:12;2143;2142:13;;2055:188;1976:267;;;;;;2257:12;2253:530;;;2329:4;2323:11;2363:14;2358:3;2351:27;2407:2;2402:3;2395:15;2294:130;2559:15;;:20;2555:68;;2607:15;;2589:14;:33;2581:42;;;;;;2681:4;2675:11;2715;2710:3;2703:24;2756:2;2751:3;2744:15;992:138:16;1083:11;777:24;-1:-1:-1;1083:40:16;;992:138::o;1392:314::-;1496:14;;;1596:17;:4;1496:14;1596;:17::i;:::-;1587:26;-1:-1:-1;1629:24:16;:4;304:2;1629:13;:24::i;:::-;1623:30;-1:-1:-1;1672:27:16;:4;507:20;1672:14;:27::i;:::-;1663:36;;1392:314;;;;;:::o;2248:149::-;2364:11;;2309:12;;2340:50;;2364:4;;507:20;;2364:25;;2340:10;:50::i;1246:249:13:-;1359:14;1407:80;1434:7;1443:43;1466:6;1474;1482:3;1443:22;:43::i;:::-;1407:26;:80::i;:::-;1385:103;1246:249;-1:-1:-1;;;;1246:249:13:o;924:121:8:-;976:8;1008:6;1004:1;:10;996:19;;;;;;-1:-1:-1;1036:1:8;924:121::o;2869:372:13:-;2939:7;2962:6;:13;2979:2;2962:19;2958:231;;3017:2;3001:6;:13;:18;2997:50;;;3021:26;;;;;;;;;;:::i;:::-;;;;;;;;2997:50;3110:4;3102:6;3098:17;3088:27;;3160:6;3149:28;;;;;;;;;;;;:::i;:::-;3142:36;;;;;;;;;;;:::i;2958:231::-;3216:6;3205:29;;;;;;;;;;;;:::i;683:259:15:-;829:19;867:68;882:7;891:43;914:6;922;930:3;891:22;:43::i;:::-;867:14;:68::i;3412:416:14:-;3491:7;3533:6;3518;3527:2;3518:11;:21;;3510:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3597:6;3606:2;3597:11;3580:6;:13;:28;;3572:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3722:30:14;3738:4;3722:30;3716:37;3755:27;3712:71;;;3412:416::o;3834:365::-;3912:6;3952;3938;3947:1;3938:10;:20;;3930:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4015:6;4024:1;4015:10;3998:6;:13;:27;;3990:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4127:29:14;4143:3;4127:29;4121:36;;3834:365::o;399:3007::-;521:12;569:7;553;563:2;553:12;:23;;545:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;633:6;622:7;613:6;:16;:26;;605:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;702:7;693:6;:16;676:6;:13;:33;;668:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:22;805:15;;837:2099;;;;3089:4;3083:11;3070:24;;3287:1;3276:9;3269:20;3339:4;3328:9;3324:20;3318:4;3311:34;798:2565;;837:2099;1031:4;1025:11;1012:24;;1726:2;1717:7;1713:16;2128:9;2121:17;2115:4;2111:28;2099:9;2088;2084:25;2080:60;2180:7;2176:2;2172:16;2448:6;2434:9;2427:17;2421:4;2417:28;2405:9;2397:6;2393:22;2389:57;2385:70;2210:461;2485:3;2481:2;2478:11;2210:461;;;2639:9;;2628:21;;2530:4;2522:13;;;;2566;2210:461;;;-1:-1:-1;;2693:26:14;;;2913:2;2896:11;2909:7;2892:25;2886:4;2879:39;-1:-1:-1;798:2565:14;-1:-1:-1;3390:9:14;399:3007;-1:-1:-1;;;;399:3007:14:o;784:274:17:-;901:14;;:::i;:::-;940:6;931:15;;:6;:15;;;927:56;;;968:6;;976;927:56;-1:-1:-1;1000:51:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:274::o;1305:512::-;1389:12;1434:3;:10;;;1421:23;;:3;:10;;;:23;;;1413:32;;;;;;-1:-1:-1;1668:10:17;;1680;;;;;1692:7;;;;;1657:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:54;;;;;;1539:229;;;;;;;;;;;;;;;;;;;;;241:66;1539:229;;;;;;;;;;;;;;;;;;;;;;;;;1508:278;;;;;;1305:512::o;1189:279:15:-;1313:19;1370:44;1397:7;1406;1370:26;:44::i;:::-;1348:67;-1:-1:-1;1433:10:15;:27;;;;1425:36;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:485:18:-;;111:3;104:4;96:6;92:17;88:27;78:2;;133:5;126;119:20;78:2;173:6;160:20;204:49;219:33;249:2;219:33;:::i;:::-;204:49;:::i;:::-;278:2;269:7;262:19;324:3;317:4;312:2;304:6;300:15;296:26;293:35;290:2;;;345:5;338;331:20;290:2;414;407:4;399:6;395:17;388:4;379:7;375:18;362:55;437:16;;;455:4;433:27;426:42;;;;441:7;68:431;-1:-1:-1;;68:431:18:o;504:795::-;;;;;;683:3;671:9;662:7;658:23;654:33;651:2;;;705:6;697;690:22;651:2;749:9;736:23;768:33;795:5;768:33;:::i;:::-;820:5;-1:-1:-1;877:2:18;862:18;;849:32;890:35;849:32;890:35;:::i;:::-;944:7;-1:-1:-1;1003:2:18;988:18;;975:32;1051:8;1038:22;;1026:35;;1016:2;;1080:6;1072;1065:22;1016:2;1108:7;-1:-1:-1;1162:2:18;1147:18;;1134:32;;-1:-1:-1;1218:3:18;1203:19;;1190:33;1232:35;1190:33;1232:35;:::i;:::-;1286:7;1276:17;;;641:658;;;;;;;;:::o;1304:410::-;;;1442:2;1430:9;1421:7;1417:23;1413:32;1410:2;;;1463:6;1455;1448:22;1410:2;1508:9;1495:23;1541:18;1533:6;1530:30;1527:2;;;1578:6;1570;1563:22;1527:2;1606:51;1649:7;1640:6;1629:9;1625:22;1606:51;:::i;:::-;1596:61;1704:2;1689:18;;;;1676:32;;-1:-1:-1;;;;1400:314:18:o;1719:253::-;;;1857:2;1845:9;1836:7;1832:23;1828:32;1825:2;;;1878:6;1870;1863:22;1825:2;-1:-1:-1;;1906:16:18;;1962:2;1947:18;;;1941:25;1906:16;;1941:25;;-1:-1:-1;1815:157:18:o;1977:476::-;;;;2130:2;2118:9;2109:7;2105:23;2101:32;2098:2;;;2151:6;2143;2136:22;2098:2;2192:9;2179:23;2169:33;;2249:2;2238:9;2234:18;2221:32;2211:42;;2304:2;2293:9;2289:18;2276:32;2331:18;2323:6;2320:30;2317:2;;;2368:6;2360;2353:22;2317:2;2396:51;2439:7;2430:6;2419:9;2415:22;2396:51;:::i;:::-;2386:61;;;2088:365;;;;;:::o;2458:676::-;;2591:2;2579:9;2570:7;2566:23;2562:32;2559:2;;;2612:6;2604;2597:22;2559:2;2650:9;2644:16;2683:18;2675:6;2672:30;2669:2;;;2720:6;2712;2705:22;2669:2;2748:22;;2801:4;2793:13;;2789:27;-1:-1:-1;2779:2:18;;2835:6;2827;2820:22;2779:2;2869;2863:9;2894:49;2909:33;2939:2;2909:33;:::i;2894:49::-;2966:2;2959:5;2952:17;3006:7;3001:2;2996;2992;2988:11;2984:20;2981:33;2978:2;;;3032:6;3024;3017:22;2978:2;3050:54;3101:2;3096;3089:5;3085:14;3080:2;3076;3072:11;3050:54;:::i;3139:194::-;;3262:2;3250:9;3241:7;3237:23;3233:32;3230:2;;;3283:6;3275;3268:22;3230:2;-1:-1:-1;3311:16:18;;3220:113;-1:-1:-1;3220:113:18:o;3338:318::-;;3419:5;3413:12;3446:6;3441:3;3434:19;3462:63;3518:6;3511:4;3506:3;3502:14;3495:4;3488:5;3484:16;3462:63;:::i;:::-;3570:2;3558:15;3575:66;3554:88;3545:98;;;;3645:4;3541:109;;3389:267;-1:-1:-1;;3389:267:18:o;3661:514::-;3949:2;3945:15;;;3854:66;3941:24;;;3929:37;;4004:3;4000:16;;;;4018:66;3996:89;3991:2;3982:12;;3975:111;4120:15;;4116:24;4111:2;4102:12;;4095:46;4166:2;4157:12;;3834:341::o;4180:226::-;4356:42;4344:55;;;;4326:74;;4314:2;4299:18;;4281:125::o;4411:593::-;;4654:42;4735:2;4727:6;4723:15;4712:9;4705:34;4789:6;4782:14;4775:22;4770:2;4759:9;4755:18;4748:50;4834:6;4829:2;4818:9;4814:18;4807:34;4889:2;4881:6;4877:15;4872:2;4861:9;4857:18;4850:43;;4930:3;4924;4913:9;4909:19;4902:32;4951:47;4993:3;4982:9;4978:19;4970:6;4951:47;:::i;:::-;4943:55;4634:370;-1:-1:-1;;;;;;;4634:370:18:o;5009:221::-;;5158:2;5147:9;5140:21;5178:46;5220:2;5209:9;5205:18;5197:6;5178:46;:::i;:::-;5170:54;5130:100;-1:-1:-1;;;5130:100:18:o;5235:340::-;5437:2;5419:21;;;5476:2;5456:18;;;5449:30;5515:18;5510:2;5495:18;;5488:46;5566:2;5551:18;;5409:166::o;5580:177::-;5726:25;;;5714:2;5699:18;;5681:76::o;5762:242::-;5832:2;5826:9;5862:17;;;5909:18;5894:34;;5930:22;;;5891:62;5888:2;;;5956:9;5888:2;5983;5976:22;5806:198;;-1:-1:-1;5806:198:18:o;6009:240::-;;6092:18;6084:6;6081:30;6078:2;;;6114:9;6078:2;-1:-1:-1;6162:4:18;6150:17;6169:66;6146:90;6238:4;6142:101;;6068:181::o;6254:258::-;6326:1;6336:113;6350:6;6347:1;6344:13;6336:113;;;6426:11;;;6420:18;6407:11;;;6400:39;6372:2;6365:10;6336:113;;;6467:6;6464:1;6461:13;6458:2;;;6502:1;6493:6;6488:3;6484:16;6477:27;6458:2;;6307:205;;;:::o;6517:156::-;6605:42;6598:5;6594:54;6587:5;6584:65;6574:2;;6663:1;6660;6653:12;6574:2;6564:109;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "934400",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"WETH9()": "infinite",
"factory()": "infinite",
"quoteExactInput(bytes,uint256)": "infinite",
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": "infinite",
"quoteExactOutput(bytes,uint256)": "infinite",
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": "infinite",
"uniswapV3SwapCallback(int256,int256,bytes)": "infinite"
},
"internal": {
"getPool(address,address,uint24)": "infinite",
"parseRevertReason(bytes memory)": "infinite"
}
},
"methodIdentifiers": {
"WETH9()": "4aa4a4fc",
"factory()": "c45a0155",
"quoteExactInput(bytes,uint256)": "cdca1753",
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": "f7729d43",
"quoteExactOutput(bytes,uint256)": "2f80bb1d",
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": "30d07f21",
"uniswapV3SwapCallback(int256,int256,bytes)": "fa461e33"
}
},
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_factory",
"type": "address"
},
{
"internalType": "address",
"name": "_WETH9",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "WETH9",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"name": "quoteExactInput",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint24",
"name": "fee",
"type": "uint24"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
}
],
"name": "quoteExactInputSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"name": "quoteExactOutput",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint24",
"name": "fee",
"type": "uint24"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
}
],
"name": "quoteExactOutputSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "amount0Delta",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1Delta",
"type": "int256"
},
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
}
],
"name": "uniswapV3SwapCallback",
"outputs": [],
"stateMutability": "view",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.7.6+commit.7338295f"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_factory",
"type": "address"
},
{
"internalType": "address",
"name": "_WETH9",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "WETH9",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"name": "quoteExactInput",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint24",
"name": "fee",
"type": "uint24"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
}
],
"name": "quoteExactInputSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"name": "quoteExactOutput",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint24",
"name": "fee",
"type": "uint24"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
}
],
"name": "quoteExactOutputSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "amount0Delta",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1Delta",
"type": "int256"
},
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
}
],
"name": "uniswapV3SwapCallback",
"outputs": [],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute the swap and check the amounts in the callback.",
"kind": "dev",
"methods": {
"quoteExactInput(bytes,uint256)": {
"params": {
"amountIn": "The amount of the first token to swap",
"path": "The path of the swap, i.e. each token pair and the pool fee"
},
"returns": {
"amountOut": "The amount of the last token that would be received"
}
},
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": {
"params": {
"amountIn": "The desired input amount",
"fee": "The fee of the token pool to consider for the pair",
"sqrtPriceLimitX96": "The price limit of the pool that cannot be exceeded by the swap",
"tokenIn": "The token being swapped in",
"tokenOut": "The token being swapped out"
},
"returns": {
"amountOut": "The amount of `tokenOut` that would be received"
}
},
"quoteExactOutput(bytes,uint256)": {
"params": {
"amountOut": "The amount of the last token to receive",
"path": "The path of the swap, i.e. each token pair and the pool fee"
},
"returns": {
"amountIn": "The amount of first token required to be paid"
}
},
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": {
"params": {
"amountOut": "The desired output amount",
"fee": "The fee of the token pool to consider for the pair",
"sqrtPriceLimitX96": "The price limit of the pool that cannot be exceeded by the swap",
"tokenIn": "The token being swapped in",
"tokenOut": "The token being swapped out"
},
"returns": {
"amountIn": "The amount required as the input for the swap in order to receive `amountOut`"
}
},
"uniswapV3SwapCallback(int256,int256,bytes)": {
"details": "In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.",
"params": {
"amount0Delta": "The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.",
"amount1Delta": "The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.",
"data": "Any data passed through by the caller via the IUniswapV3PoolActions#swap call"
}
}
},
"stateVariables": {
"amountOutCached": {
"details": "Transient storage variable used to check a safety condition in exact output swaps."
}
},
"title": "Provides quotes for swaps",
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"quoteExactInput(bytes,uint256)": {
"notice": "Returns the amount out received for a given exact input swap without executing the swap"
},
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": {
"notice": "Returns the amount out received for a given exact input but for a swap of a single pool"
},
"quoteExactOutput(bytes,uint256)": {
"notice": "Returns the amount in required for a given exact output swap without executing the swap"
},
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": {
"notice": "Returns the amount in required to receive the given exact output amount but for a swap of a single pool"
},
"uniswapV3SwapCallback(int256,int256,bytes)": {
"notice": "Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap."
}
},
"notice": "Allows getting the expected amount out or amount in for a given swap without executing the swap",
"version": 1
}
},
"settings": {
"compilationTarget": {
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol": "Quoter"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 1000000
},
"remappings": []
},
"sources": {
"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol": {
"keccak256": "0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://1c42b9e6f5902ac38dd43e25750939baa7e0c1425dc75afd717c4412731065d5",
"dweb:/ipfs/QmWaoacnzsucTvBME2o7YgZBZMhaHv7fkj83htHMVWJKWh"
]
},
"@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol": {
"keccak256": "0x3f485fb1a44e8fbeadefb5da07d66edab3cfe809f0ac4074b1e54e3eb3c4cf69",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://095ce0626b41318c772b3ebf19d548282607f6a8f3d6c41c13edfbd5370c8652",
"dweb:/ipfs/QmVDZfJJ89UUCE1hMyzqpkZAtQ8jUsBgZNE5AMRG7RzRFS"
]
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": {
"keccak256": "0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5",
"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ"
]
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": {
"keccak256": "0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7",
"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c"
]
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": {
"keccak256": "0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03",
"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39"
]
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": {
"keccak256": "0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047",
"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3"
]
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": {
"keccak256": "0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735",
"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u"
]
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": {
"keccak256": "0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f",
"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg"
]
},
"@uniswap/v3-core/contracts/libraries/SafeCast.sol": {
"keccak256": "0x4c12bf820c0b011f5490a209960ca34dd8af34660ef9e01de0438393d15e3fd8",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://fed11489e218e55d087d42b4f350a30e10cd2aedec8f432bd3cc712f648d5869",
"dweb:/ipfs/QmWfRnRxyXwHUDcTQPazxYYk5jxErGeQqdvnYtyg5nBPbU"
]
},
"@uniswap/v3-core/contracts/libraries/TickMath.sol": {
"keccak256": "0xda8c2c0b12d2976acfd364453ba5f5bf0117ba3c91175ee9e1067d3fb26944d9",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://3f3d2d7c2723c91830c74d96292f28fc1cfe28d388cdb9c1a5ebadb4c2b96f81",
"dweb:/ipfs/QmYU4wk8MEm33wVWR38LoncvR7b8PP1mLuGBKX3dUpYJVE"
]
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol": {
"keccak256": "0xd43c2355a7d5659b1fa1fb322647f760722d73a6a5e62ede53d426f3b406b795",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://657920576878ca936157383782a97b74166c303a3932c0d72eac3a2d057c3a96",
"dweb:/ipfs/Qma71Ska1ZbPBnYpeE5S2EAeEtwGfHEMHo3SnDwY1fVmm5"
]
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IPeripheryImmutableState.sol": {
"keccak256": "0x7affcfeb5127c0925a71d6a65345e117c33537523aeca7bc98085ead8452519d",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://e16b291294210e71cb0f20cd0afe62ae2dc6878d627f5ccc19c4dc9cd80aec3f",
"dweb:/ipfs/QmQGitSyBr26nour81BZmpmDMyJpvZRqHQZvnCD1Acb127"
]
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IQuoter.sol": {
"keccak256": "0xabe1e7831b0e4c3fe78ab89b5dd46d75d05e74d21ebd19b898f3605f455b39d8",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://7bace6abd0dd8fe9038ea95336107b7f40adefed93f347a1d726eefe46a27c85",
"dweb:/ipfs/QmYsCNTJPU87a8todV5NCvZyMzzx8EaJCrEKKeywSnPBDd"
]
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol": {
"keccak256": "0x11b426465342c1094b9749f6f62c5e422745238a9609d1dce6098a19190775eb",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://402876e9d288ea5fc604835d9d7746bbb904e99499438bd8201f42fbf0a77af0",
"dweb:/ipfs/QmZ7JoyVa6Ab4vhYAVfbXzJqfbN4YcfPrZ4SLxNNYqUhf5"
]
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol": {
"keccak256": "0x68629e5b1a30b6490c6ae721c28117f6f963745462b007da0769758eb67f10d4",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://370e31ceab1a7504f98dec122f65d9b8c6fc6420fd8cdd171b3dd57c4d5d21fc",
"dweb:/ipfs/QmcquKATbnopgs92RdM5bKewt7GdCpgGhVY4hxmv1KjnnH"
]
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol": {
"keccak256": "0x490c80ca7f4a0ee0514041ddec0867e8a52b24febf1670991797af8fed9f3eec",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://f775ba8ad52041a351fbd7000801266d5a10be2f1a53d13c6c9862b2baa935bd",
"dweb:/ipfs/Qmcaxyr6VutZeaymeBNVcZrBVAHhyJ11sjhWpgj2GX6D5K"
]
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol": {
"keccak256": "0xd18f02aff3aa26f895ba187bedfbe10d9f8be2b198dcd8a2284c4d89f4743005",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://5833c03271b577f9fd01eb1ac606864352deeef8c2ff6a119f5e0e8e6b8d9fcb",
"dweb:/ipfs/QmcNj8LwgdkcyQKSr8VUDnFcW2yaV6wbqYnE5xrw3rVGFk"
]
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol": {
"keccak256": "0x5edd84eb8ba7c12fd8cb6cffe52e1e9f3f6464514ee5f539c2283826209035a2",
"license": "GPL-2.0-or-later",
"urls": [
"bzz-raw://f375d0e6d5ea3674e1aa6f112b021e9a86721a6a2f3cb22d673378b30cf0e840",
"dweb:/ipfs/QmWJir2qnJyp963mU6U3jEEx9i3H3V5BgKawAfSnG1pC8w"
]
}
},
"version": 1
}
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;
pragma abicoder v2;
import '@uniswap/v3-core/contracts/libraries/SafeCast.sol';
import '@uniswap/v3-core/contracts/libraries/TickMath.sol';
import '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';
import '@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol';
import '../interfaces/IQuoter.sol';
import '../base/PeripheryImmutableState.sol';
import '../libraries/Path.sol';
import '../libraries/PoolAddress.sol';
import '../libraries/CallbackValidation.sol';
/// @title Provides quotes for swaps
/// @notice Allows getting the expected amount out or amount in for a given swap without executing the swap
/// @dev These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute
/// the swap and check the amounts in the callback.
contract Quoter is IQuoter, IUniswapV3SwapCallback, PeripheryImmutableState {
using Path for bytes;
using SafeCast for uint256;
/// @dev Transient storage variable used to check a safety condition in exact output swaps.
uint256 private amountOutCached;
constructor(address _factory, address _WETH9) PeripheryImmutableState(_factory, _WETH9) {}
function getPool(
address tokenA,
address tokenB,
uint24 fee
) private view returns (IUniswapV3Pool) {
return IUniswapV3Pool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));
}
/// @inheritdoc IUniswapV3SwapCallback
function uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes memory path
) external view override {
require(amount0Delta > 0 || amount1Delta > 0); // swaps entirely within 0-liquidity regions are not supported
(address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();
CallbackValidation.verifyCallback(factory, tokenIn, tokenOut, fee);
(bool isExactInput, uint256 amountToPay, uint256 amountReceived) =
amount0Delta > 0
? (tokenIn < tokenOut, uint256(amount0Delta), uint256(-amount1Delta))
: (tokenOut < tokenIn, uint256(amount1Delta), uint256(-amount0Delta));
if (isExactInput) {
assembly {
let ptr := mload(0x40)
mstore(ptr, amountReceived)
revert(ptr, 32)
}
} else {
// if the cache has been populated, ensure that the full output amount has been received
if (amountOutCached != 0) require(amountReceived == amountOutCached);
assembly {
let ptr := mload(0x40)
mstore(ptr, amountToPay)
revert(ptr, 32)
}
}
}
/// @dev Parses a revert reason that should contain the numeric quote
function parseRevertReason(bytes memory reason) private pure returns (uint256) {
if (reason.length != 32) {
if (reason.length < 68) revert('Unexpected error');
assembly {
reason := add(reason, 0x04)
}
revert(abi.decode(reason, (string)));
}
return abi.decode(reason, (uint256));
}
/// @inheritdoc IQuoter
function quoteExactInputSingle(
address tokenIn,
address tokenOut,
uint24 fee,
uint256 amountIn,
uint160 sqrtPriceLimitX96
) public override returns (uint256 amountOut) {
bool zeroForOne = tokenIn < tokenOut;
try
getPool(tokenIn, tokenOut, fee).swap(
address(this), // address(0) might cause issues with some tokens
zeroForOne,
amountIn.toInt256(),
sqrtPriceLimitX96 == 0
? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)
: sqrtPriceLimitX96,
abi.encodePacked(tokenIn, fee, tokenOut)
)
{} catch (bytes memory reason) {
return parseRevertReason(reason);
}
}
/// @inheritdoc IQuoter
function quoteExactInput(bytes memory path, uint256 amountIn) external override returns (uint256 amountOut) {
while (true) {
bool hasMultiplePools = path.hasMultiplePools();
(address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();
// the outputs of prior swaps become the inputs to subsequent ones
amountIn = quoteExactInputSingle(tokenIn, tokenOut, fee, amountIn, 0);
// decide whether to continue or terminate
if (hasMultiplePools) {
path = path.skipToken();
} else {
return amountIn;
}
}
}
/// @inheritdoc IQuoter
function quoteExactOutputSingle(
address tokenIn,
address tokenOut,
uint24 fee,
uint256 amountOut,
uint160 sqrtPriceLimitX96
) public override returns (uint256 amountIn) {
bool zeroForOne = tokenIn < tokenOut;
// if no price limit has been specified, cache the output amount for comparison in the swap callback
if (sqrtPriceLimitX96 == 0) amountOutCached = amountOut;
try
getPool(tokenIn, tokenOut, fee).swap(
address(this), // address(0) might cause issues with some tokens
zeroForOne,
-amountOut.toInt256(),
sqrtPriceLimitX96 == 0
? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)
: sqrtPriceLimitX96,
abi.encodePacked(tokenOut, fee, tokenIn)
)
{} catch (bytes memory reason) {
if (sqrtPriceLimitX96 == 0) delete amountOutCached; // clear cache
return parseRevertReason(reason);
}
}
/// @inheritdoc IQuoter
function quoteExactOutput(bytes memory path, uint256 amountOut) external override returns (uint256 amountIn) {
while (true) {
bool hasMultiplePools = path.hasMultiplePools();
(address tokenOut, address tokenIn, uint24 fee) = path.decodeFirstPool();
// the inputs of prior swaps become the outputs of subsequent ones
amountOut = quoteExactOutputSingle(tokenIn, tokenOut, fee, amountOut, 0);
// decide whether to continue or terminate
if (hasMultiplePools) {
path = path.skipToken();
} else {
return amountOut;
}
}
}
}
This file has been truncated, but you can view the full file.
{
"id": "46272880f3ca3c6ebd26cbb059daab05",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.7.6",
"solcLongVersion": "0.7.6+commit.7338295f",
"input": {
"language": "Solidity",
"sources": {
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@uniswap/v3-core/contracts/libraries/SafeCast.sol';\nimport '@uniswap/v3-core/contracts/libraries/TickMath.sol';\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\nimport '@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol';\n\nimport '../interfaces/IQuoter.sol';\nimport '../base/PeripheryImmutableState.sol';\nimport '../libraries/Path.sol';\nimport '../libraries/PoolAddress.sol';\nimport '../libraries/CallbackValidation.sol';\n\n/// @title Provides quotes for swaps\n/// @notice Allows getting the expected amount out or amount in for a given swap without executing the swap\n/// @dev These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute\n/// the swap and check the amounts in the callback.\ncontract Quoter is IQuoter, IUniswapV3SwapCallback, PeripheryImmutableState {\n using Path for bytes;\n using SafeCast for uint256;\n\n /// @dev Transient storage variable used to check a safety condition in exact output swaps.\n uint256 private amountOutCached;\n\n constructor(address _factory, address _WETH9) PeripheryImmutableState(_factory, _WETH9) {}\n\n function getPool(\n address tokenA,\n address tokenB,\n uint24 fee\n ) private view returns (IUniswapV3Pool) {\n return IUniswapV3Pool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));\n }\n\n /// @inheritdoc IUniswapV3SwapCallback\n function uniswapV3SwapCallback(\n int256 amount0Delta,\n int256 amount1Delta,\n bytes memory path\n ) external view override {\n require(amount0Delta > 0 || amount1Delta > 0); // swaps entirely within 0-liquidity regions are not supported\n (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n CallbackValidation.verifyCallback(factory, tokenIn, tokenOut, fee);\n\n (bool isExactInput, uint256 amountToPay, uint256 amountReceived) =\n amount0Delta > 0\n ? (tokenIn < tokenOut, uint256(amount0Delta), uint256(-amount1Delta))\n : (tokenOut < tokenIn, uint256(amount1Delta), uint256(-amount0Delta));\n if (isExactInput) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, amountReceived)\n revert(ptr, 32)\n }\n } else {\n // if the cache has been populated, ensure that the full output amount has been received\n if (amountOutCached != 0) require(amountReceived == amountOutCached);\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, amountToPay)\n revert(ptr, 32)\n }\n }\n }\n\n /// @dev Parses a revert reason that should contain the numeric quote\n function parseRevertReason(bytes memory reason) private pure returns (uint256) {\n if (reason.length != 32) {\n if (reason.length < 68) revert('Unexpected error');\n assembly {\n reason := add(reason, 0x04)\n }\n revert(abi.decode(reason, (string)));\n }\n return abi.decode(reason, (uint256));\n }\n\n /// @inheritdoc IQuoter\n function quoteExactInputSingle(\n address tokenIn,\n address tokenOut,\n uint24 fee,\n uint256 amountIn,\n uint160 sqrtPriceLimitX96\n ) public override returns (uint256 amountOut) {\n bool zeroForOne = tokenIn < tokenOut;\n\n try\n getPool(tokenIn, tokenOut, fee).swap(\n address(this), // address(0) might cause issues with some tokens\n zeroForOne,\n amountIn.toInt256(),\n sqrtPriceLimitX96 == 0\n ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n : sqrtPriceLimitX96,\n abi.encodePacked(tokenIn, fee, tokenOut)\n )\n {} catch (bytes memory reason) {\n return parseRevertReason(reason);\n }\n }\n\n /// @inheritdoc IQuoter\n function quoteExactInput(bytes memory path, uint256 amountIn) external override returns (uint256 amountOut) {\n while (true) {\n bool hasMultiplePools = path.hasMultiplePools();\n\n (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n\n // the outputs of prior swaps become the inputs to subsequent ones\n amountIn = quoteExactInputSingle(tokenIn, tokenOut, fee, amountIn, 0);\n\n // decide whether to continue or terminate\n if (hasMultiplePools) {\n path = path.skipToken();\n } else {\n return amountIn;\n }\n }\n }\n\n /// @inheritdoc IQuoter\n function quoteExactOutputSingle(\n address tokenIn,\n address tokenOut,\n uint24 fee,\n uint256 amountOut,\n uint160 sqrtPriceLimitX96\n ) public override returns (uint256 amountIn) {\n bool zeroForOne = tokenIn < tokenOut;\n\n // if no price limit has been specified, cache the output amount for comparison in the swap callback\n if (sqrtPriceLimitX96 == 0) amountOutCached = amountOut;\n try\n getPool(tokenIn, tokenOut, fee).swap(\n address(this), // address(0) might cause issues with some tokens\n zeroForOne,\n -amountOut.toInt256(),\n sqrtPriceLimitX96 == 0\n ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n : sqrtPriceLimitX96,\n abi.encodePacked(tokenOut, fee, tokenIn)\n )\n {} catch (bytes memory reason) {\n if (sqrtPriceLimitX96 == 0) delete amountOutCached; // clear cache\n return parseRevertReason(reason);\n }\n }\n\n /// @inheritdoc IQuoter\n function quoteExactOutput(bytes memory path, uint256 amountOut) external override returns (uint256 amountIn) {\n while (true) {\n bool hasMultiplePools = path.hasMultiplePools();\n\n (address tokenOut, address tokenIn, uint24 fee) = path.decodeFirstPool();\n\n // the inputs of prior swaps become the outputs of subsequent ones\n amountOut = quoteExactOutputSingle(tokenIn, tokenOut, fee, amountOut, 0);\n\n // decide whether to continue or terminate\n if (hasMultiplePools) {\n path = path.skipToken();\n } else {\n return amountOut;\n }\n }\n }\n}\n"
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\nimport './PoolAddress.sol';\n\n/// @notice Provides validation for callbacks from Uniswap V3 Pools\nlibrary CallbackValidation {\n /// @notice Returns the address of a valid Uniswap V3 Pool\n /// @param factory The contract address of the Uniswap V3 factory\n /// @param tokenA The contract address of either token0 or token1\n /// @param tokenB The contract address of the other token\n /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n /// @return pool The V3 pool contract address\n function verifyCallback(\n address factory,\n address tokenA,\n address tokenB,\n uint24 fee\n ) internal view returns (IUniswapV3Pool pool) {\n return verifyCallback(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee));\n }\n\n /// @notice Returns the address of a valid Uniswap V3 Pool\n /// @param factory The contract address of the Uniswap V3 factory\n /// @param poolKey The identifying key of the V3 pool\n /// @return pool The V3 pool contract address\n function verifyCallback(address factory, PoolAddress.PoolKey memory poolKey)\n internal\n view\n returns (IUniswapV3Pool pool)\n {\n pool = IUniswapV3Pool(PoolAddress.computeAddress(factory, poolKey));\n require(msg.sender == address(pool));\n }\n}\n"
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Provides functions for deriving a pool address from the factory, tokens, and the fee\nlibrary PoolAddress {\n bytes32 internal constant POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;\n\n /// @notice The identifying key of the pool\n struct PoolKey {\n address token0;\n address token1;\n uint24 fee;\n }\n\n /// @notice Returns PoolKey: the ordered tokens with the matched fee levels\n /// @param tokenA The first token of a pool, unsorted\n /// @param tokenB The second token of a pool, unsorted\n /// @param fee The fee level of the pool\n /// @return Poolkey The pool details with ordered token0 and token1 assignments\n function getPoolKey(\n address tokenA,\n address tokenB,\n uint24 fee\n ) internal pure returns (PoolKey memory) {\n if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);\n return PoolKey({token0: tokenA, token1: tokenB, fee: fee});\n }\n\n /// @notice Deterministically computes the pool address given the factory and PoolKey\n /// @param factory The Uniswap V3 factory contract address\n /// @param key The PoolKey\n /// @return pool The contract address of the V3 pool\n function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {\n require(key.token0 < key.token1);\n pool = address(\n uint256(\n keccak256(\n abi.encodePacked(\n hex'ff',\n factory,\n keccak256(abi.encode(key.token0, key.token1, key.fee)),\n POOL_INIT_CODE_HASH\n )\n )\n )\n );\n }\n}\n"
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.6.0;\n\nimport './BytesLib.sol';\n\n/// @title Functions for manipulating path data for multihop swaps\nlibrary Path {\n using BytesLib for bytes;\n\n /// @dev The length of the bytes encoded address\n uint256 private constant ADDR_SIZE = 20;\n /// @dev The length of the bytes encoded fee\n uint256 private constant FEE_SIZE = 3;\n\n /// @dev The offset of a single token address and pool fee\n uint256 private constant NEXT_OFFSET = ADDR_SIZE + FEE_SIZE;\n /// @dev The offset of an encoded pool key\n uint256 private constant POP_OFFSET = NEXT_OFFSET + ADDR_SIZE;\n /// @dev The minimum length of an encoding that contains 2 or more pools\n uint256 private constant MULTIPLE_POOLS_MIN_LENGTH = POP_OFFSET + NEXT_OFFSET;\n\n /// @notice Returns true iff the path contains two or more pools\n /// @param path The encoded swap path\n /// @return True if path contains two or more pools, otherwise false\n function hasMultiplePools(bytes memory path) internal pure returns (bool) {\n return path.length >= MULTIPLE_POOLS_MIN_LENGTH;\n }\n\n /// @notice Decodes the first pool in path\n /// @param path The bytes encoded swap path\n /// @return tokenA The first token of the given pool\n /// @return tokenB The second token of the given pool\n /// @return fee The fee level of the pool\n function decodeFirstPool(bytes memory path)\n internal\n pure\n returns (\n address tokenA,\n address tokenB,\n uint24 fee\n )\n {\n tokenA = path.toAddress(0);\n fee = path.toUint24(ADDR_SIZE);\n tokenB = path.toAddress(NEXT_OFFSET);\n }\n\n /// @notice Gets the segment corresponding to the first pool in the path\n /// @param path The bytes encoded swap path\n /// @return The segment containing all data necessary to target the first pool in the path\n function getFirstPool(bytes memory path) internal pure returns (bytes memory) {\n return path.slice(0, POP_OFFSET);\n }\n\n /// @notice Skips a token + fee element from the buffer and returns the remainder\n /// @param path The swap path\n /// @return The remaining token + fee elements in the path\n function skipToken(bytes memory path) internal pure returns (bytes memory) {\n return path.slice(NEXT_OFFSET, path.length - NEXT_OFFSET);\n }\n}\n"
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\nimport '../interfaces/IPeripheryImmutableState.sol';\n\n/// @title Immutable state\n/// @notice Immutable state used by periphery contracts\nabstract contract PeripheryImmutableState is IPeripheryImmutableState {\n /// @inheritdoc IPeripheryImmutableState\n address public immutable override factory;\n /// @inheritdoc IPeripheryImmutableState\n address public immutable override WETH9;\n\n constructor(address _factory, address _WETH9) {\n factory = _factory;\n WETH9 = _WETH9;\n }\n}\n"
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IQuoter.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @title Quoter Interface\n/// @notice Supports quoting the calculated amounts from exact input or exact output swaps\n/// @dev These functions are not marked view because they rely on calling non-view functions and reverting\n/// to compute the result. They are also not gas efficient and should not be called on-chain.\ninterface IQuoter {\n /// @notice Returns the amount out received for a given exact input swap without executing the swap\n /// @param path The path of the swap, i.e. each token pair and the pool fee\n /// @param amountIn The amount of the first token to swap\n /// @return amountOut The amount of the last token that would be received\n function quoteExactInput(bytes memory path, uint256 amountIn) external returns (uint256 amountOut);\n\n /// @notice Returns the amount out received for a given exact input but for a swap of a single pool\n /// @param tokenIn The token being swapped in\n /// @param tokenOut The token being swapped out\n /// @param fee The fee of the token pool to consider for the pair\n /// @param amountIn The desired input amount\n /// @param sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n /// @return amountOut The amount of `tokenOut` that would be received\n function quoteExactInputSingle(\n address tokenIn,\n address tokenOut,\n uint24 fee,\n uint256 amountIn,\n uint160 sqrtPriceLimitX96\n ) external returns (uint256 amountOut);\n\n /// @notice Returns the amount in required for a given exact output swap without executing the swap\n /// @param path The path of the swap, i.e. each token pair and the pool fee\n /// @param amountOut The amount of the last token to receive\n /// @return amountIn The amount of first token required to be paid\n function quoteExactOutput(bytes memory path, uint256 amountOut) external returns (uint256 amountIn);\n\n /// @notice Returns the amount in required to receive the given exact output amount but for a swap of a single pool\n /// @param tokenIn The token being swapped in\n /// @param tokenOut The token being swapped out\n /// @param fee The fee of the token pool to consider for the pair\n /// @param amountOut The desired output amount\n /// @param sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n /// @return amountIn The amount required as the input for the swap in order to receive `amountOut`\n function quoteExactOutputSingle(\n address tokenIn,\n address tokenOut,\n uint24 fee,\n uint256 amountOut,\n uint160 sqrtPriceLimitX96\n ) external returns (uint256 amountIn);\n}\n"
},
"@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Callback for IUniswapV3PoolActions#swap\n/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface\ninterface IUniswapV3SwapCallback {\n /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap.\n /// @dev In the implementation you must pay the pool tokens owed for the swap.\n /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory.\n /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\n /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by\n /// the end of the swap. If positive, the callback must send that amount of token0 to the pool.\n /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by\n /// the end of the swap. If positive, the callback must send that amount of token1 to the pool.\n /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call\n function uniswapV3SwapCallback(\n int256 amount0Delta,\n int256 amount1Delta,\n bytes calldata data\n ) external;\n}\n"
},
"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\nimport './pool/IUniswapV3PoolImmutables.sol';\nimport './pool/IUniswapV3PoolState.sol';\nimport './pool/IUniswapV3PoolDerivedState.sol';\nimport './pool/IUniswapV3PoolActions.sol';\nimport './pool/IUniswapV3PoolOwnerActions.sol';\nimport './pool/IUniswapV3PoolEvents.sol';\n\n/// @title The interface for a Uniswap V3 Pool\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\n/// to the ERC20 specification\n/// @dev The pool interface is broken up into many smaller pieces\ninterface IUniswapV3Pool is\n IUniswapV3PoolImmutables,\n IUniswapV3PoolState,\n IUniswapV3PoolDerivedState,\n IUniswapV3PoolActions,\n IUniswapV3PoolOwnerActions,\n IUniswapV3PoolEvents\n{\n\n}\n"
},
"@uniswap/v3-core/contracts/libraries/TickMath.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0 <0.8.0;\n\n/// @title Math library for computing sqrt prices from ticks and vice versa\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\n/// prices between 2**-128 and 2**128\nlibrary TickMath {\n /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\n int24 internal constant MIN_TICK = -887272;\n /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\n int24 internal constant MAX_TICK = -MIN_TICK;\n\n /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\n uint160 internal constant MIN_SQRT_RATIO = 4295128739;\n /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\n uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\n\n /// @notice Calculates sqrt(1.0001^tick) * 2^96\n /// @dev Throws if |tick| > max tick\n /// @param tick The input tick for the above formula\n /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n /// at the given tick\n function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\n uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\n require(absTick <= uint256(MAX_TICK), 'T');\n\n uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\n if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\n if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\n if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\n if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\n if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\n if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\n if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\n if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\n if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\n if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\n if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\n if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\n if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\n if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\n if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\n if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\n if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\n if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\n if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\n\n if (tick > 0) ratio = type(uint256).max / ratio;\n\n // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\n // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\n // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\n sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\n }\n\n /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\n /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may\n /// ever return.\n /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\n /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\n function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\n // second inequality must be < because the price can never reach the price at the max tick\n require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\n uint256 ratio = uint256(sqrtPriceX96) << 32;\n\n uint256 r = ratio;\n uint256 msb = 0;\n\n assembly {\n let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\n msb := or(msb, f)\n r := shr(f, r)\n }\n assembly {\n let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\n msb := or(msb, f)\n r := shr(f, r)\n }\n assembly {\n let f := shl(5, gt(r, 0xFFFFFFFF))\n msb := or(msb, f)\n r := shr(f, r)\n }\n assembly {\n let f := shl(4, gt(r, 0xFFFF))\n msb := or(msb, f)\n r := shr(f, r)\n }\n assembly {\n let f := shl(3, gt(r, 0xFF))\n msb := or(msb, f)\n r := shr(f, r)\n }\n assembly {\n let f := shl(2, gt(r, 0xF))\n msb := or(msb, f)\n r := shr(f, r)\n }\n assembly {\n let f := shl(1, gt(r, 0x3))\n msb := or(msb, f)\n r := shr(f, r)\n }\n assembly {\n let f := gt(r, 0x1)\n msb := or(msb, f)\n }\n\n if (msb >= 128) r = ratio >> (msb - 127);\n else r = ratio << (127 - msb);\n\n int256 log_2 = (int256(msb) - 128) << 64;\n\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(63, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(62, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(61, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(60, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(59, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(58, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(57, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(56, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(55, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(54, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(53, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(52, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(51, f))\n r := shr(f, r)\n }\n assembly {\n r := shr(127, mul(r, r))\n let f := shr(128, r)\n log_2 := or(log_2, shl(50, f))\n }\n\n int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\n\n int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\n int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\n\n tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\n }\n}\n"
},
"@uniswap/v3-core/contracts/libraries/SafeCast.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Safe casting methods\n/// @notice Contains methods for safely casting between types\nlibrary SafeCast {\n /// @notice Cast a uint256 to a uint160, revert on overflow\n /// @param y The uint256 to be downcasted\n /// @return z The downcasted integer, now type uint160\n function toUint160(uint256 y) internal pure returns (uint160 z) {\n require((z = uint160(y)) == y);\n }\n\n /// @notice Cast a int256 to a int128, revert on overflow or underflow\n /// @param y The int256 to be downcasted\n /// @return z The downcasted integer, now type int128\n function toInt128(int256 y) internal pure returns (int128 z) {\n require((z = int128(y)) == y);\n }\n\n /// @notice Cast a uint256 to a int256, revert on overflow\n /// @param y The uint256 to be casted\n /// @return z The casted integer, now type int256\n function toInt256(uint256 y) internal pure returns (int256 z) {\n require(y < 2**255);\n z = int256(y);\n }\n}\n"
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\n/*\n * @title Solidity Bytes Arrays Utils\n * @author Gonçalo Sá <goncalo.sa@consensys.net>\n *\n * @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity.\n * The library lets you concatenate, slice and type cast bytes arrays both in memory and storage.\n */\npragma solidity >=0.5.0 <0.8.0;\n\nlibrary BytesLib {\n function slice(\n bytes memory _bytes,\n uint256 _start,\n uint256 _length\n ) internal pure returns (bytes memory) {\n require(_length + 31 >= _length, 'slice_overflow');\n require(_start + _length >= _start, 'slice_overflow');\n require(_bytes.length >= _start + _length, 'slice_outOfBounds');\n\n bytes memory tempBytes;\n\n assembly {\n switch iszero(_length)\n case 0 {\n // Get a location of some free memory and store it in tempBytes as\n // Solidity does for memory variables.\n tempBytes := mload(0x40)\n\n // The first word of the slice result is potentially a partial\n // word read from the original array. To read it, we calculate\n // the length of that partial word and start copying that many\n // bytes into the array. The first word we copy will start with\n // data we don't care about, but the last `lengthmod` bytes will\n // land at the beginning of the contents of the new array. When\n // we're done copying, we overwrite the full first word with\n // the actual length of the slice.\n let lengthmod := and(_length, 31)\n\n // The multiplication in the next line is necessary\n // because when slicing multiples of 32 bytes (lengthmod == 0)\n // the following copy loop was copying the origin's length\n // and then ending prematurely not copying everything it should.\n let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\n let end := add(mc, _length)\n\n for {\n // The multiplication in the next line has the same exact purpose\n // as the one above.\n let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\n } lt(mc, end) {\n mc := add(mc, 0x20)\n cc := add(cc, 0x20)\n } {\n mstore(mc, mload(cc))\n }\n\n mstore(tempBytes, _length)\n\n //update free-memory pointer\n //allocating the array padded to 32 bytes like the compiler does now\n mstore(0x40, and(add(mc, 31), not(31)))\n }\n //if we want a zero-length slice let's just return a zero-length array\n default {\n tempBytes := mload(0x40)\n //zero out the 32 bytes slice we are about to return\n //we need to do it because Solidity does not garbage collect\n mstore(tempBytes, 0)\n\n mstore(0x40, add(tempBytes, 0x20))\n }\n }\n\n return tempBytes;\n }\n\n function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) {\n require(_start + 20 >= _start, 'toAddress_overflow');\n require(_bytes.length >= _start + 20, 'toAddress_outOfBounds');\n address tempAddress;\n\n assembly {\n tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\n }\n\n return tempAddress;\n }\n\n function toUint24(bytes memory _bytes, uint256 _start) internal pure returns (uint24) {\n require(_start + 3 >= _start, 'toUint24_overflow');\n require(_bytes.length >= _start + 3, 'toUint24_outOfBounds');\n uint24 tempUint;\n\n assembly {\n tempUint := mload(add(add(_bytes, 0x3), _start))\n }\n\n return tempUint;\n }\n}\n"
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IPeripheryImmutableState.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Immutable state\n/// @notice Functions that return immutable state of the router\ninterface IPeripheryImmutableState {\n /// @return Returns the address of the Uniswap V3 factory\n function factory() external view returns (address);\n\n /// @return Returns the address of WETH9\n function WETH9() external view returns (address);\n}\n"
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Events emitted by a pool\n/// @notice Contains all events emitted by the pool\ninterface IUniswapV3PoolEvents {\n /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\n /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\n /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\n /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\n event Initialize(uint160 sqrtPriceX96, int24 tick);\n\n /// @notice Emitted when liquidity is minted for a given position\n /// @param sender The address that minted the liquidity\n /// @param owner The owner of the position and recipient of any minted liquidity\n /// @param tickLower The lower tick of the position\n /// @param tickUpper The upper tick of the position\n /// @param amount The amount of liquidity minted to the position range\n /// @param amount0 How much token0 was required for the minted liquidity\n /// @param amount1 How much token1 was required for the minted liquidity\n event Mint(\n address sender,\n address indexed owner,\n int24 indexed tickLower,\n int24 indexed tickUpper,\n uint128 amount,\n uint256 amount0,\n uint256 amount1\n );\n\n /// @notice Emitted when fees are collected by the owner of a position\n /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\n /// @param owner The owner of the position for which fees are collected\n /// @param tickLower The lower tick of the position\n /// @param tickUpper The upper tick of the position\n /// @param amount0 The amount of token0 fees collected\n /// @param amount1 The amount of token1 fees collected\n event Collect(\n address indexed owner,\n address recipient,\n int24 indexed tickLower,\n int24 indexed tickUpper,\n uint128 amount0,\n uint128 amount1\n );\n\n /// @notice Emitted when a position's liquidity is removed\n /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\n /// @param owner The owner of the position for which liquidity is removed\n /// @param tickLower The lower tick of the position\n /// @param tickUpper The upper tick of the position\n /// @param amount The amount of liquidity to remove\n /// @param amount0 The amount of token0 withdrawn\n /// @param amount1 The amount of token1 withdrawn\n event Burn(\n address indexed owner,\n int24 indexed tickLower,\n int24 indexed tickUpper,\n uint128 amount,\n uint256 amount0,\n uint256 amount1\n );\n\n /// @notice Emitted by the pool for any swaps between token0 and token1\n /// @param sender The address that initiated the swap call, and that received the callback\n /// @param recipient The address that received the output of the swap\n /// @param amount0 The delta of the token0 balance of the pool\n /// @param amount1 The delta of the token1 balance of the pool\n /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\n /// @param liquidity The liquidity of the pool after the swap\n /// @param tick The log base 1.0001 of price of the pool after the swap\n event Swap(\n address indexed sender,\n address indexed recipient,\n int256 amount0,\n int256 amount1,\n uint160 sqrtPriceX96,\n uint128 liquidity,\n int24 tick\n );\n\n /// @notice Emitted by the pool for any flashes of token0/token1\n /// @param sender The address that initiated the swap call, and that received the callback\n /// @param recipient The address that received the tokens from flash\n /// @param amount0 The amount of token0 that was flashed\n /// @param amount1 The amount of token1 that was flashed\n /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\n /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\n event Flash(\n address indexed sender,\n address indexed recipient,\n uint256 amount0,\n uint256 amount1,\n uint256 paid0,\n uint256 paid1\n );\n\n /// @notice Emitted by the pool for increases to the number of observations that can be stored\n /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\n /// just before a mint/swap/burn.\n /// @param observationCardinalityNextOld The previous value of the next observation cardinality\n /// @param observationCardinalityNextNew The updated value of the next observation cardinality\n event IncreaseObservationCardinalityNext(\n uint16 observationCardinalityNextOld,\n uint16 observationCardinalityNextNew\n );\n\n /// @notice Emitted when the protocol fee is changed by the pool\n /// @param feeProtocol0Old The previous value of the token0 protocol fee\n /// @param feeProtocol1Old The previous value of the token1 protocol fee\n /// @param feeProtocol0New The updated value of the token0 protocol fee\n /// @param feeProtocol1New The updated value of the token1 protocol fee\n event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\n\n /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\n /// @param sender The address that collects the protocol fees\n /// @param recipient The address that receives the collected protocol fees\n /// @param amount0 The amount of token0 protocol fees that is withdrawn\n /// @param amount0 The amount of token1 protocol fees that is withdrawn\n event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\n}\n"
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Permissioned pool actions\n/// @notice Contains pool methods that may only be called by the factory owner\ninterface IUniswapV3PoolOwnerActions {\n /// @notice Set the denominator of the protocol's % share of the fees\n /// @param feeProtocol0 new protocol fee for token0 of the pool\n /// @param feeProtocol1 new protocol fee for token1 of the pool\n function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\n\n /// @notice Collect the protocol fee accrued to the pool\n /// @param recipient The address to which collected protocol fees should be sent\n /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\n /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\n /// @return amount0 The protocol fee collected in token0\n /// @return amount1 The protocol fee collected in token1\n function collectProtocol(\n address recipient,\n uint128 amount0Requested,\n uint128 amount1Requested\n ) external returns (uint128 amount0, uint128 amount1);\n}\n"
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Permissionless pool actions\n/// @notice Contains pool methods that can be called by anyone\ninterface IUniswapV3PoolActions {\n /// @notice Sets the initial price for the pool\n /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\n /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\n function initialize(uint160 sqrtPriceX96) external;\n\n /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\n /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\n /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\n /// on tickLower, tickUpper, the amount of liquidity, and the current price.\n /// @param recipient The address for which the liquidity will be created\n /// @param tickLower The lower tick of the position in which to add liquidity\n /// @param tickUpper The upper tick of the position in which to add liquidity\n /// @param amount The amount of liquidity to mint\n /// @param data Any data that should be passed through to the callback\n /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\n /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\n function mint(\n address recipient,\n int24 tickLower,\n int24 tickUpper,\n uint128 amount,\n bytes calldata data\n ) external returns (uint256 amount0, uint256 amount1);\n\n /// @notice Collects tokens owed to a position\n /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\n /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\n /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\n /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\n /// @param recipient The address which should receive the fees collected\n /// @param tickLower The lower tick of the position for which to collect fees\n /// @param tickUpper The upper tick of the position for which to collect fees\n /// @param amount0Requested How much token0 should be withdrawn from the fees owed\n /// @param amount1Requested How much token1 should be withdrawn from the fees owed\n /// @return amount0 The amount of fees collected in token0\n /// @return amount1 The amount of fees collected in token1\n function collect(\n address recipient,\n int24 tickLower,\n int24 tickUpper,\n uint128 amount0Requested,\n uint128 amount1Requested\n ) external returns (uint128 amount0, uint128 amount1);\n\n /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\n /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\n /// @dev Fees must be collected separately via a call to #collect\n /// @param tickLower The lower tick of the position for which to burn liquidity\n /// @param tickUpper The upper tick of the position for which to burn liquidity\n /// @param amount How much liquidity to burn\n /// @return amount0 The amount of token0 sent to the recipient\n /// @return amount1 The amount of token1 sent to the recipient\n function burn(\n int24 tickLower,\n int24 tickUpper,\n uint128 amount\n ) external returns (uint256 amount0, uint256 amount1);\n\n /// @notice Swap token0 for token1, or token1 for token0\n /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\n /// @param recipient The address to receive the output of the swap\n /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\n /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\n /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\n /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\n /// @param data Any data to be passed through to the callback\n /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\n /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\n function swap(\n address recipient,\n bool zeroForOne,\n int256 amountSpecified,\n uint160 sqrtPriceLimitX96,\n bytes calldata data\n ) external returns (int256 amount0, int256 amount1);\n\n /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\n /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\n /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\n /// with 0 amount{0,1} and sending the donation amount(s) from the callback\n /// @param recipient The address which will receive the token0 and token1 amounts\n /// @param amount0 The amount of token0 to send\n /// @param amount1 The amount of token1 to send\n /// @param data Any data to be passed through to the callback\n function flash(\n address recipient,\n uint256 amount0,\n uint256 amount1,\n bytes calldata data\n ) external;\n\n /// @notice Increase the maximum number of price and liquidity observations that this pool will store\n /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\n /// the input observationCardinalityNext.\n /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\n function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\n}\n"
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that is not stored\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\n/// blockchain. The functions here may have variable gas costs.\ninterface IUniswapV3PoolDerivedState {\n /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\n /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\n /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\n /// you must call it with secondsAgos = [3600, 0].\n /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\n /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\n /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\n /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\n /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\n /// timestamp\n function observe(uint32[] calldata secondsAgos)\n external\n view\n returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\n\n /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\n /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\n /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\n /// snapshot is taken and the second snapshot is taken.\n /// @param tickLower The lower tick of the range\n /// @param tickUpper The upper tick of the range\n /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\n /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\n /// @return secondsInside The snapshot of seconds per liquidity for the range\n function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\n external\n view\n returns (\n int56 tickCumulativeInside,\n uint160 secondsPerLiquidityInsideX128,\n uint32 secondsInside\n );\n}\n"
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that can change\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\n/// per transaction\ninterface IUniswapV3PoolState {\n /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\n /// when accessed externally.\n /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\n /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\n /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\n /// boundary.\n /// observationIndex The index of the last oracle observation that was written,\n /// observationCardinality The current maximum number of observations stored in the pool,\n /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\n /// feeProtocol The protocol fee for both tokens of the pool.\n /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\n /// 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.\n /// unlocked Whether the pool is currently locked to reentrancy\n function slot0()\n external\n view\n returns (\n uint160 sqrtPriceX96,\n int24 tick,\n uint16 observationIndex,\n uint16 observationCardinality,\n uint16 observationCardinalityNext,\n uint8 feeProtocol,\n bool unlocked\n );\n\n /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\n /// @dev This value can overflow the uint256\n function feeGrowthGlobal0X128() external view returns (uint256);\n\n /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\n /// @dev This value can overflow the uint256\n function feeGrowthGlobal1X128() external view returns (uint256);\n\n /// @notice The amounts of token0 and token1 that are owed to the protocol\n /// @dev Protocol fees will never exceed uint128 max in either token\n function protocolFees() external view returns (uint128 token0, uint128 token1);\n\n /// @notice The currently in range liquidity available to the pool\n /// @dev This value has no relationship to the total liquidity across all ticks\n function liquidity() external view returns (uint128);\n\n /// @notice Look up information about a specific tick in the pool\n /// @param tick The tick to look up\n /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\n /// tick upper,\n /// liquidityNet how much liquidity changes when the pool price crosses the tick,\n /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\n /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\n /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\n /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\n /// secondsOutside the seconds spent on the other side of the tick from the current tick,\n /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\n /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\n /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\n /// a specific position.\n function ticks(int24 tick)\n external\n view\n returns (\n uint128 liquidityGross,\n int128 liquidityNet,\n uint256 feeGrowthOutside0X128,\n uint256 feeGrowthOutside1X128,\n int56 tickCumulativeOutside,\n uint160 secondsPerLiquidityOutsideX128,\n uint32 secondsOutside,\n bool initialized\n );\n\n /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\n function tickBitmap(int16 wordPosition) external view returns (uint256);\n\n /// @notice Returns the information about a position by the position's key\n /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\n /// @return _liquidity The amount of liquidity in the position,\n /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\n /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\n /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\n /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\n function positions(bytes32 key)\n external\n view\n returns (\n uint128 _liquidity,\n uint256 feeGrowthInside0LastX128,\n uint256 feeGrowthInside1LastX128,\n uint128 tokensOwed0,\n uint128 tokensOwed1\n );\n\n /// @notice Returns data about a specific observation index\n /// @param index The element of the observations array to fetch\n /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\n /// ago, rather than at a specific index in the array.\n /// @return blockTimestamp The timestamp of the observation,\n /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\n /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\n /// Returns initialized whether the observation has been initialized and the values are safe to use\n function observations(uint256 index)\n external\n view\n returns (\n uint32 blockTimestamp,\n int56 tickCumulative,\n uint160 secondsPerLiquidityCumulativeX128,\n bool initialized\n );\n}\n"
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": {
"content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that never changes\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\ninterface IUniswapV3PoolImmutables {\n /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\n /// @return The contract address\n function factory() external view returns (address);\n\n /// @notice The first of the two tokens of the pool, sorted by address\n /// @return The token contract address\n function token0() external view returns (address);\n\n /// @notice The second of the two tokens of the pool, sorted by address\n /// @return The token contract address\n function token1() external view returns (address);\n\n /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\n /// @return The fee\n function fee() external view returns (uint24);\n\n /// @notice The pool tick spacing\n /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\n /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\n /// This value is an int24 to avoid casting even though it is always positive.\n /// @return The tick spacing\n function tickSpacing() external view returns (int24);\n\n /// @notice The maximum amount of position liquidity that can use any tick in the range\n /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\n /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\n /// @return The max amount of liquidity per tick\n function maxLiquidityPerTick() external view returns (uint128);\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 1000000
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol": {
"IUniswapV3Pool": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"name": "Burn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount0",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount1",
"type": "uint128"
}
],
"name": "Collect",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount0",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount1",
"type": "uint128"
}
],
"name": "CollectProtocol",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "paid0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "paid1",
"type": "uint256"
}
],
"name": "Flash",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint16",
"name": "observationCardinalityNextOld",
"type": "uint16"
},
{
"indexed": false,
"internalType": "uint16",
"name": "observationCardinalityNextNew",
"type": "uint16"
}
],
"name": "IncreaseObservationCardinalityNext",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
},
{
"indexed": false,
"internalType": "int24",
"name": "tick",
"type": "int24"
}
],
"name": "Initialize",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"name": "Mint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "feeProtocol0Old",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint8",
"name": "feeProtocol1Old",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint8",
"name": "feeProtocol0New",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint8",
"name": "feeProtocol1New",
"type": "uint8"
}
],
"name": "SetFeeProtocol",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "int256",
"name": "amount0",
"type": "int256"
},
{
"indexed": false,
"internalType": "int256",
"name": "amount1",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
},
{
"indexed": false,
"internalType": "uint128",
"name": "liquidity",
"type": "uint128"
},
{
"indexed": false,
"internalType": "int24",
"name": "tick",
"type": "int24"
}
],
"name": "Swap",
"type": "event"
},
{
"inputs": [
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"internalType": "uint128",
"name": "amount",
"type": "uint128"
}
],
"name": "burn",
"outputs": [
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"internalType": "uint128",
"name": "amount0Requested",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amount1Requested",
"type": "uint128"
}
],
"name": "collect",
"outputs": [
{
"internalType": "uint128",
"name": "amount0",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amount1",
"type": "uint128"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint128",
"name": "amount0Requested",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amount1Requested",
"type": "uint128"
}
],
"name": "collectProtocol",
"outputs": [
{
"internalType": "uint128",
"name": "amount0",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amount1",
"type": "uint128"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "fee",
"outputs": [
{
"internalType": "uint24",
"name": "",
"type": "uint24"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "feeGrowthGlobal0X128",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "feeGrowthGlobal1X128",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "flash",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "observationCardinalityNext",
"type": "uint16"
}
],
"name": "increaseObservationCardinalityNext",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "liquidity",
"outputs": [
{
"internalType": "uint128",
"name": "",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxLiquidityPerTick",
"outputs": [
{
"internalType": "uint128",
"name": "",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"internalType": "uint128",
"name": "amount",
"type": "uint128"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "mint",
"outputs": [
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "observations",
"outputs": [
{
"internalType": "uint32",
"name": "blockTimestamp",
"type": "uint32"
},
{
"internalType": "int56",
"name": "tickCumulative",
"type": "int56"
},
{
"internalType": "uint160",
"name": "secondsPerLiquidityCumulativeX128",
"type": "uint160"
},
{
"internalType": "bool",
"name": "initialized",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32[]",
"name": "secondsAgos",
"type": "uint32[]"
}
],
"name": "observe",
"outputs": [
{
"internalType": "int56[]",
"name": "tickCumulatives",
"type": "int56[]"
},
{
"internalType": "uint160[]",
"name": "secondsPerLiquidityCumulativeX128s",
"type": "uint160[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "key",
"type": "bytes32"
}
],
"name": "positions",
"outputs": [
{
"internalType": "uint128",
"name": "_liquidity",
"type": "uint128"
},
{
"internalType": "uint256",
"name": "feeGrowthInside0LastX128",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "feeGrowthInside1LastX128",
"type": "uint256"
},
{
"internalType": "uint128",
"name": "tokensOwed0",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "tokensOwed1",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "protocolFees",
"outputs": [
{
"internalType": "uint128",
"name": "token0",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "token1",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "feeProtocol0",
"type": "uint8"
},
{
"internalType": "uint8",
"name": "feeProtocol1",
"type": "uint8"
}
],
"name": "setFeeProtocol",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "slot0",
"outputs": [
{
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
},
{
"internalType": "int24",
"name": "tick",
"type": "int24"
},
{
"internalType": "uint16",
"name": "observationIndex",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "observationCardinality",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "observationCardinalityNext",
"type": "uint16"
},
{
"internalType": "uint8",
"name": "feeProtocol",
"type": "uint8"
},
{
"internalType": "bool",
"name": "unlocked",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
}
],
"name": "snapshotCumulativesInside",
"outputs": [
{
"internalType": "int56",
"name": "tickCumulativeInside",
"type": "int56"
},
{
"internalType": "uint160",
"name": "secondsPerLiquidityInsideX128",
"type": "uint160"
},
{
"internalType": "uint32",
"name": "secondsInside",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "zeroForOne",
"type": "bool"
},
{
"internalType": "int256",
"name": "amountSpecified",
"type": "int256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "swap",
"outputs": [
{
"internalType": "int256",
"name": "amount0",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1",
"type": "int256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "int16",
"name": "wordPosition",
"type": "int16"
}
],
"name": "tickBitmap",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tickSpacing",
"outputs": [
{
"internalType": "int24",
"name": "",
"type": "int24"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int24",
"name": "tick",
"type": "int24"
}
],
"name": "ticks",
"outputs": [
{
"internalType": "uint128",
"name": "liquidityGross",
"type": "uint128"
},
{
"internalType": "int128",
"name": "liquidityNet",
"type": "int128"
},
{
"internalType": "uint256",
"name": "feeGrowthOutside0X128",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "feeGrowthOutside1X128",
"type": "uint256"
},
{
"internalType": "int56",
"name": "tickCumulativeOutside",
"type": "int56"
},
{
"internalType": "uint160",
"name": "secondsPerLiquidityOutsideX128",
"type": "uint160"
},
{
"internalType": "uint32",
"name": "secondsOutside",
"type": "uint32"
},
{
"internalType": "bool",
"name": "initialized",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token0",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token1",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "The pool interface is broken up into many smaller pieces",
"kind": "dev",
"methods": {
"burn(int24,int24,uint128)": {
"details": "Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect",
"params": {
"amount": "How much liquidity to burn",
"tickLower": "The lower tick of the position for which to burn liquidity",
"tickUpper": "The upper tick of the position for which to burn liquidity"
},
"returns": {
"amount0": "The amount of token0 sent to the recipient",
"amount1": "The amount of token1 sent to the recipient"
}
},
"collect(address,int24,int24,uint128,uint128)": {
"details": "Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.",
"params": {
"amount0Requested": "How much token0 should be withdrawn from the fees owed",
"amount1Requested": "How much token1 should be withdrawn from the fees owed",
"recipient": "The address which should receive the fees collected",
"tickLower": "The lower tick of the position for which to collect fees",
"tickUpper": "The upper tick of the position for which to collect fees"
},
"returns": {
"amount0": "The amount of fees collected in token0",
"amount1": "The amount of fees collected in token1"
}
},
"collectProtocol(address,uint128,uint128)": {
"params": {
"amount0Requested": "The maximum amount of token0 to send, can be 0 to collect fees in only token1",
"amount1Requested": "The maximum amount of token1 to send, can be 0 to collect fees in only token0",
"recipient": "The address to which collected protocol fees should be sent"
},
"returns": {
"amount0": "The protocol fee collected in token0",
"amount1": "The protocol fee collected in token1"
}
},
"factory()": {
"returns": {
"_0": "The contract address"
}
},
"fee()": {
"returns": {
"_0": "The fee"
}
},
"feeGrowthGlobal0X128()": {
"details": "This value can overflow the uint256"
},
"feeGrowthGlobal1X128()": {
"details": "This value can overflow the uint256"
},
"flash(address,uint256,uint256,bytes)": {
"details": "The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback",
"params": {
"amount0": "The amount of token0 to send",
"amount1": "The amount of token1 to send",
"data": "Any data to be passed through to the callback",
"recipient": "The address which will receive the token0 and token1 amounts"
}
},
"increaseObservationCardinalityNext(uint16)": {
"details": "This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.",
"params": {
"observationCardinalityNext": "The desired minimum number of observations for the pool to store"
}
},
"initialize(uint160)": {
"details": "Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value",
"params": {
"sqrtPriceX96": "the initial sqrt price of the pool as a Q64.96"
}
},
"liquidity()": {
"details": "This value has no relationship to the total liquidity across all ticks"
},
"maxLiquidityPerTick()": {
"details": "This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool",
"returns": {
"_0": "The max amount of liquidity per tick"
}
},
"mint(address,int24,int24,uint128,bytes)": {
"details": "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.",
"params": {
"amount": "The amount of liquidity to mint",
"data": "Any data that should be passed through to the callback",
"recipient": "The address for which the liquidity will be created",
"tickLower": "The lower tick of the position in which to add liquidity",
"tickUpper": "The upper tick of the position in which to add liquidity"
},
"returns": {
"amount0": "The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback",
"amount1": "The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback"
}
},
"observations(uint256)": {
"details": "You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.",
"params": {
"index": "The element of the observations array to fetch"
},
"returns": {
"blockTimestamp": "The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use"
}
},
"observe(uint32[])": {
"details": "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].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.",
"params": {
"secondsAgos": "From how long ago each cumulative tick and liquidity value should be returned"
},
"returns": {
"secondsPerLiquidityCumulativeX128s": "Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp",
"tickCumulatives": "Cumulative tick values as of each `secondsAgos` from the current block timestamp"
}
},
"positions(bytes32)": {
"params": {
"key": "The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper"
},
"returns": {
"_liquidity": "The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke"
}
},
"protocolFees()": {
"details": "Protocol fees will never exceed uint128 max in either token"
},
"setFeeProtocol(uint8,uint8)": {
"params": {
"feeProtocol0": "new protocol fee for token0 of the pool",
"feeProtocol1": "new protocol fee for token1 of the pool"
}
},
"slot0()": {
"returns": {
"sqrtPriceX96": "The current price of the pool as a sqrt(token1/token0) Q64.96 value 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. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. 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"
}
},
"snapshotCumulativesInside(int24,int24)": {
"details": "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.",
"params": {
"tickLower": "The lower tick of the range",
"tickUpper": "The upper tick of the range"
},
"returns": {
"secondsInside": "The snapshot of seconds per liquidity for the range",
"secondsPerLiquidityInsideX128": "The snapshot of seconds per liquidity for the range",
"tickCumulativeInside": "The snapshot of the tick accumulator for the range"
}
},
"swap(address,bool,int256,uint160,bytes)": {
"details": "The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback",
"params": {
"amountSpecified": "The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)",
"data": "Any data to be passed through to the callback",
"recipient": "The address to receive the output of the swap",
"sqrtPriceLimitX96": "The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap",
"zeroForOne": "The direction of the swap, true for token0 to token1, false for token1 to token0"
},
"returns": {
"amount0": "The delta of the balance of token0 of the pool, exact when negative, minimum when positive",
"amount1": "The delta of the balance of token1 of the pool, exact when negative, minimum when positive"
}
},
"tickSpacing()": {
"details": "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.",
"returns": {
"_0": "The tick spacing"
}
},
"ticks(int24)": {
"params": {
"tick": "The tick to look up"
},
"returns": {
"liquidityGross": "the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position."
}
},
"token0()": {
"returns": {
"_0": "The token contract address"
}
},
"token1()": {
"returns": {
"_0": "The token contract address"
}
}
},
"title": "The interface for a Uniswap V3 Pool",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"burn(int24,int24,uint128)": "a34123a7",
"collect(address,int24,int24,uint128,uint128)": "4f1eb3d8",
"collectProtocol(address,uint128,uint128)": "85b66729",
"factory()": "c45a0155",
"fee()": "ddca3f43",
"feeGrowthGlobal0X128()": "f3058399",
"feeGrowthGlobal1X128()": "46141319",
"flash(address,uint256,uint256,bytes)": "490e6cbc",
"increaseObservationCardinalityNext(uint16)": "32148f67",
"initialize(uint160)": "f637731d",
"liquidity()": "1a686502",
"maxLiquidityPerTick()": "70cf754a",
"mint(address,int24,int24,uint128,bytes)": "3c8a7d8d",
"observations(uint256)": "252c09d7",
"observe(uint32[])": "883bdbfd",
"positions(bytes32)": "514ea4bf",
"protocolFees()": "1ad8b03b",
"setFeeProtocol(uint8,uint8)": "8206a4d1",
"slot0()": "3850c7bd",
"snapshotCumulativesInside(int24,int24)": "a38807f2",
"swap(address,bool,int256,uint160,bytes)": "128acb08",
"tickBitmap(int16)": "5339c296",
"tickSpacing()": "d0c93a7c",
"ticks(int24)": "f30dba93",
"token0()": "0dfe1681",
"token1()": "d21220a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"_liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"wordPosition\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The pool interface is broken up into many smaller pieces\",\"kind\":\"dev\",\"methods\":{\"burn(int24,int24,uint128)\":{\"details\":\"Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect\",\"params\":{\"amount\":\"How much liquidity to burn\",\"tickLower\":\"The lower tick of the position for which to burn liquidity\",\"tickUpper\":\"The upper tick of the position for which to burn liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 sent to the recipient\",\"amount1\":\"The amount of token1 sent to the recipient\"}},\"collect(address,int24,int24,uint128,uint128)\":{\"details\":\"Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\",\"params\":{\"amount0Requested\":\"How much token0 should be withdrawn from the fees owed\",\"amount1Requested\":\"How much token1 should be withdrawn from the fees owed\",\"recipient\":\"The address which should receive the fees collected\",\"tickLower\":\"The lower tick of the position for which to collect fees\",\"tickUpper\":\"The upper tick of the position for which to collect fees\"},\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"collectProtocol(address,uint128,uint128)\":{\"params\":{\"amount0Requested\":\"The maximum amount of token0 to send, can be 0 to collect fees in only token1\",\"amount1Requested\":\"The maximum amount of token1 to send, can be 0 to collect fees in only token0\",\"recipient\":\"The address to which collected protocol fees should be sent\"},\"returns\":{\"amount0\":\"The protocol fee collected in token0\",\"amount1\":\"The protocol fee collected in token1\"}},\"factory()\":{\"returns\":{\"_0\":\"The contract address\"}},\"fee()\":{\"returns\":{\"_0\":\"The fee\"}},\"feeGrowthGlobal0X128()\":{\"details\":\"This value can overflow the uint256\"},\"feeGrowthGlobal1X128()\":{\"details\":\"This value can overflow the uint256\"},\"flash(address,uint256,uint256,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback\",\"params\":{\"amount0\":\"The amount of token0 to send\",\"amount1\":\"The amount of token1 to send\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address which will receive the token0 and token1 amounts\"}},\"increaseObservationCardinalityNext(uint16)\":{\"details\":\"This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.\",\"params\":{\"observationCardinalityNext\":\"The desired minimum number of observations for the pool to store\"}},\"initialize(uint160)\":{\"details\":\"Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\",\"params\":{\"sqrtPriceX96\":\"the initial sqrt price of the pool as a Q64.96\"}},\"liquidity()\":{\"details\":\"This value has no relationship to the total liquidity across all ticks\"},\"maxLiquidityPerTick()\":{\"details\":\"This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\",\"returns\":{\"_0\":\"The max amount of liquidity per tick\"}},\"mint(address,int24,int24,uint128,bytes)\":{\"details\":\"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.\",\"params\":{\"amount\":\"The amount of liquidity to mint\",\"data\":\"Any data that should be passed through to the callback\",\"recipient\":\"The address for which the liquidity will be created\",\"tickLower\":\"The lower tick of the position in which to add liquidity\",\"tickUpper\":\"The upper tick of the position in which to add liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\",\"amount1\":\"The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\"}},\"observations(uint256)\":{\"details\":\"You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.\",\"params\":{\"index\":\"The element of the observations array to fetch\"},\"returns\":{\"blockTimestamp\":\"The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use\"}},\"observe(uint32[])\":{\"details\":\"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].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.\",\"params\":{\"secondsAgos\":\"From how long ago each cumulative tick and liquidity value should be returned\"},\"returns\":{\"secondsPerLiquidityCumulativeX128s\":\"Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp\",\"tickCumulatives\":\"Cumulative tick values as of each `secondsAgos` from the current block timestamp\"}},\"positions(bytes32)\":{\"params\":{\"key\":\"The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\"},\"returns\":{\"_liquidity\":\"The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\"}},\"protocolFees()\":{\"details\":\"Protocol fees will never exceed uint128 max in either token\"},\"setFeeProtocol(uint8,uint8)\":{\"params\":{\"feeProtocol0\":\"new protocol fee for token0 of the pool\",\"feeProtocol1\":\"new protocol fee for token1 of the pool\"}},\"slot0()\":{\"returns\":{\"sqrtPriceX96\":\"The current price of the pool as a sqrt(token1/token0) Q64.96 value 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. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. 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\"}},\"snapshotCumulativesInside(int24,int24)\":{\"details\":\"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.\",\"params\":{\"tickLower\":\"The lower tick of the range\",\"tickUpper\":\"The upper tick of the range\"},\"returns\":{\"secondsInside\":\"The snapshot of seconds per liquidity for the range\",\"secondsPerLiquidityInsideX128\":\"The snapshot of seconds per liquidity for the range\",\"tickCumulativeInside\":\"The snapshot of the tick accumulator for the range\"}},\"swap(address,bool,int256,uint160,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\",\"params\":{\"amountSpecified\":\"The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address to receive the output of the swap\",\"sqrtPriceLimitX96\":\"The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\",\"zeroForOne\":\"The direction of the swap, true for token0 to token1, false for token1 to token0\"},\"returns\":{\"amount0\":\"The delta of the balance of token0 of the pool, exact when negative, minimum when positive\",\"amount1\":\"The delta of the balance of token1 of the pool, exact when negative, minimum when positive\"}},\"tickSpacing()\":{\"details\":\"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.\",\"returns\":{\"_0\":\"The tick spacing\"}},\"ticks(int24)\":{\"params\":{\"tick\":\"The tick to look up\"},\"returns\":{\"liquidityGross\":\"the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position.\"}},\"token0()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"token1()\":{\"returns\":{\"_0\":\"The token contract address\"}}},\"title\":\"The interface for a Uniswap V3 Pool\",\"version\":1},\"userdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when a position's liquidity is removed\"},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"notice\":\"Emitted when fees are collected by the owner of a position\"},\"CollectProtocol(address,address,uint128,uint128)\":{\"notice\":\"Emitted when the collected protocol fees are withdrawn by the factory owner\"},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted by the pool for any flashes of token0/token1\"},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"notice\":\"Emitted by the pool for increases to the number of observations that can be stored\"},\"Initialize(uint160,int24)\":{\"notice\":\"Emitted exactly once by a pool when #initialize is first called on the pool\"},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is minted for a given position\"},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"notice\":\"Emitted when the protocol fee is changed by the pool\"},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"notice\":\"Emitted by the pool for any swaps between token0 and token1\"}},\"kind\":\"user\",\"methods\":{\"burn(int24,int24,uint128)\":{\"notice\":\"Burn liquidity from the sender and account tokens owed for the liquidity to the position\"},\"collect(address,int24,int24,uint128,uint128)\":{\"notice\":\"Collects tokens owed to a position\"},\"collectProtocol(address,uint128,uint128)\":{\"notice\":\"Collect the protocol fee accrued to the pool\"},\"factory()\":{\"notice\":\"The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\"},\"fee()\":{\"notice\":\"The pool's fee in hundredths of a bip, i.e. 1e-6\"},\"feeGrowthGlobal0X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\"},\"feeGrowthGlobal1X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\"},\"flash(address,uint256,uint256,bytes)\":{\"notice\":\"Receive token0 and/or token1 and pay it back, plus a fee, in the callback\"},\"increaseObservationCardinalityNext(uint16)\":{\"notice\":\"Increase the maximum number of price and liquidity observations that this pool will store\"},\"initialize(uint160)\":{\"notice\":\"Sets the initial price for the pool\"},\"liquidity()\":{\"notice\":\"The currently in range liquidity available to the pool\"},\"maxLiquidityPerTick()\":{\"notice\":\"The maximum amount of position liquidity that can use any tick in the range\"},\"mint(address,int24,int24,uint128,bytes)\":{\"notice\":\"Adds liquidity for the given recipient/tickLower/tickUpper position\"},\"observations(uint256)\":{\"notice\":\"Returns data about a specific observation index\"},\"observe(uint32[])\":{\"notice\":\"Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\"},\"positions(bytes32)\":{\"notice\":\"Returns the information about a position by the position's key\"},\"protocolFees()\":{\"notice\":\"The amounts of token0 and token1 that are owed to the protocol\"},\"setFeeProtocol(uint8,uint8)\":{\"notice\":\"Set the denominator of the protocol's % share of the fees\"},\"slot0()\":{\"notice\":\"The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally.\"},\"snapshotCumulativesInside(int24,int24)\":{\"notice\":\"Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\"},\"swap(address,bool,int256,uint160,bytes)\":{\"notice\":\"Swap token0 for token1, or token1 for token0\"},\"tickBitmap(int16)\":{\"notice\":\"Returns 256 packed tick initialized boolean values. See TickBitmap for more information\"},\"tickSpacing()\":{\"notice\":\"The pool tick spacing\"},\"ticks(int24)\":{\"notice\":\"Look up information about a specific tick in the pool\"},\"token0()\":{\"notice\":\"The first of the two tokens of the pool, sorted by address\"},\"token1()\":{\"notice\":\"The second of the two tokens of the pool, sorted by address\"}},\"notice\":\"A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform to the ERC20 specification\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":\"IUniswapV3Pool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1c42b9e6f5902ac38dd43e25750939baa7e0c1425dc75afd717c4412731065d5\",\"dweb:/ipfs/QmWaoacnzsucTvBME2o7YgZBZMhaHv7fkj83htHMVWJKWh\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"]},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f\",\"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"events": {
"Burn(address,int24,int24,uint128,uint256,uint256)": {
"notice": "Emitted when a position's liquidity is removed"
},
"Collect(address,address,int24,int24,uint128,uint128)": {
"notice": "Emitted when fees are collected by the owner of a position"
},
"CollectProtocol(address,address,uint128,uint128)": {
"notice": "Emitted when the collected protocol fees are withdrawn by the factory owner"
},
"Flash(address,address,uint256,uint256,uint256,uint256)": {
"notice": "Emitted by the pool for any flashes of token0/token1"
},
"IncreaseObservationCardinalityNext(uint16,uint16)": {
"notice": "Emitted by the pool for increases to the number of observations that can be stored"
},
"Initialize(uint160,int24)": {
"notice": "Emitted exactly once by a pool when #initialize is first called on the pool"
},
"Mint(address,address,int24,int24,uint128,uint256,uint256)": {
"notice": "Emitted when liquidity is minted for a given position"
},
"SetFeeProtocol(uint8,uint8,uint8,uint8)": {
"notice": "Emitted when the protocol fee is changed by the pool"
},
"Swap(address,address,int256,int256,uint160,uint128,int24)": {
"notice": "Emitted by the pool for any swaps between token0 and token1"
}
},
"kind": "user",
"methods": {
"burn(int24,int24,uint128)": {
"notice": "Burn liquidity from the sender and account tokens owed for the liquidity to the position"
},
"collect(address,int24,int24,uint128,uint128)": {
"notice": "Collects tokens owed to a position"
},
"collectProtocol(address,uint128,uint128)": {
"notice": "Collect the protocol fee accrued to the pool"
},
"factory()": {
"notice": "The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface"
},
"fee()": {
"notice": "The pool's fee in hundredths of a bip, i.e. 1e-6"
},
"feeGrowthGlobal0X128()": {
"notice": "The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool"
},
"feeGrowthGlobal1X128()": {
"notice": "The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool"
},
"flash(address,uint256,uint256,bytes)": {
"notice": "Receive token0 and/or token1 and pay it back, plus a fee, in the callback"
},
"increaseObservationCardinalityNext(uint16)": {
"notice": "Increase the maximum number of price and liquidity observations that this pool will store"
},
"initialize(uint160)": {
"notice": "Sets the initial price for the pool"
},
"liquidity()": {
"notice": "The currently in range liquidity available to the pool"
},
"maxLiquidityPerTick()": {
"notice": "The maximum amount of position liquidity that can use any tick in the range"
},
"mint(address,int24,int24,uint128,bytes)": {
"notice": "Adds liquidity for the given recipient/tickLower/tickUpper position"
},
"observations(uint256)": {
"notice": "Returns data about a specific observation index"
},
"observe(uint32[])": {
"notice": "Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp"
},
"positions(bytes32)": {
"notice": "Returns the information about a position by the position's key"
},
"protocolFees()": {
"notice": "The amounts of token0 and token1 that are owed to the protocol"
},
"setFeeProtocol(uint8,uint8)": {
"notice": "Set the denominator of the protocol's % share of the fees"
},
"slot0()": {
"notice": "The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally."
},
"snapshotCumulativesInside(int24,int24)": {
"notice": "Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range"
},
"swap(address,bool,int256,uint160,bytes)": {
"notice": "Swap token0 for token1, or token1 for token0"
},
"tickBitmap(int16)": {
"notice": "Returns 256 packed tick initialized boolean values. See TickBitmap for more information"
},
"tickSpacing()": {
"notice": "The pool tick spacing"
},
"ticks(int24)": {
"notice": "Look up information about a specific tick in the pool"
},
"token0()": {
"notice": "The first of the two tokens of the pool, sorted by address"
},
"token1()": {
"notice": "The second of the two tokens of the pool, sorted by address"
}
},
"notice": "A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform to the ERC20 specification",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol": {
"IUniswapV3SwapCallback": {
"abi": [
{
"inputs": [
{
"internalType": "int256",
"name": "amount0Delta",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1Delta",
"type": "int256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "uniswapV3SwapCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"uniswapV3SwapCallback(int256,int256,bytes)": {
"details": "In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.",
"params": {
"amount0Delta": "The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.",
"amount1Delta": "The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.",
"data": "Any data passed through by the caller via the IUniswapV3PoolActions#swap call"
}
}
},
"title": "Callback for IUniswapV3PoolActions#swap",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"uniswapV3SwapCallback(int256,int256,bytes)": "fa461e33"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"uniswapV3SwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"uniswapV3SwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IUniswapV3PoolActions#swap call\"}}},\"title\":\"Callback for IUniswapV3PoolActions#swap\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"uniswapV3SwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap.\"}},\"notice\":\"Any contract that calls IUniswapV3PoolActions#swap must implement this interface\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol\":\"IUniswapV3SwapCallback\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol\":{\"keccak256\":\"0x3f485fb1a44e8fbeadefb5da07d66edab3cfe809f0ac4074b1e54e3eb3c4cf69\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://095ce0626b41318c772b3ebf19d548282607f6a8f3d6c41c13edfbd5370c8652\",\"dweb:/ipfs/QmVDZfJJ89UUCE1hMyzqpkZAtQ8jUsBgZNE5AMRG7RzRFS\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"uniswapV3SwapCallback(int256,int256,bytes)": {
"notice": "Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap."
}
},
"notice": "Any contract that calls IUniswapV3PoolActions#swap must implement this interface",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": {
"IUniswapV3PoolActions": {
"abi": [
{
"inputs": [
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"internalType": "uint128",
"name": "amount",
"type": "uint128"
}
],
"name": "burn",
"outputs": [
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"internalType": "uint128",
"name": "amount0Requested",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amount1Requested",
"type": "uint128"
}
],
"name": "collect",
"outputs": [
{
"internalType": "uint128",
"name": "amount0",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amount1",
"type": "uint128"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "flash",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "observationCardinalityNext",
"type": "uint16"
}
],
"name": "increaseObservationCardinalityNext",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"internalType": "uint128",
"name": "amount",
"type": "uint128"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "mint",
"outputs": [
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "zeroForOne",
"type": "bool"
},
{
"internalType": "int256",
"name": "amountSpecified",
"type": "int256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "swap",
"outputs": [
{
"internalType": "int256",
"name": "amount0",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1",
"type": "int256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"burn(int24,int24,uint128)": {
"details": "Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect",
"params": {
"amount": "How much liquidity to burn",
"tickLower": "The lower tick of the position for which to burn liquidity",
"tickUpper": "The upper tick of the position for which to burn liquidity"
},
"returns": {
"amount0": "The amount of token0 sent to the recipient",
"amount1": "The amount of token1 sent to the recipient"
}
},
"collect(address,int24,int24,uint128,uint128)": {
"details": "Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.",
"params": {
"amount0Requested": "How much token0 should be withdrawn from the fees owed",
"amount1Requested": "How much token1 should be withdrawn from the fees owed",
"recipient": "The address which should receive the fees collected",
"tickLower": "The lower tick of the position for which to collect fees",
"tickUpper": "The upper tick of the position for which to collect fees"
},
"returns": {
"amount0": "The amount of fees collected in token0",
"amount1": "The amount of fees collected in token1"
}
},
"flash(address,uint256,uint256,bytes)": {
"details": "The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback",
"params": {
"amount0": "The amount of token0 to send",
"amount1": "The amount of token1 to send",
"data": "Any data to be passed through to the callback",
"recipient": "The address which will receive the token0 and token1 amounts"
}
},
"increaseObservationCardinalityNext(uint16)": {
"details": "This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.",
"params": {
"observationCardinalityNext": "The desired minimum number of observations for the pool to store"
}
},
"initialize(uint160)": {
"details": "Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value",
"params": {
"sqrtPriceX96": "the initial sqrt price of the pool as a Q64.96"
}
},
"mint(address,int24,int24,uint128,bytes)": {
"details": "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.",
"params": {
"amount": "The amount of liquidity to mint",
"data": "Any data that should be passed through to the callback",
"recipient": "The address for which the liquidity will be created",
"tickLower": "The lower tick of the position in which to add liquidity",
"tickUpper": "The upper tick of the position in which to add liquidity"
},
"returns": {
"amount0": "The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback",
"amount1": "The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback"
}
},
"swap(address,bool,int256,uint160,bytes)": {
"details": "The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback",
"params": {
"amountSpecified": "The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)",
"data": "Any data to be passed through to the callback",
"recipient": "The address to receive the output of the swap",
"sqrtPriceLimitX96": "The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap",
"zeroForOne": "The direction of the swap, true for token0 to token1, false for token1 to token0"
},
"returns": {
"amount0": "The delta of the balance of token0 of the pool, exact when negative, minimum when positive",
"amount1": "The delta of the balance of token1 of the pool, exact when negative, minimum when positive"
}
}
},
"title": "Permissionless pool actions",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"burn(int24,int24,uint128)": "a34123a7",
"collect(address,int24,int24,uint128,uint128)": "4f1eb3d8",
"flash(address,uint256,uint256,bytes)": "490e6cbc",
"increaseObservationCardinalityNext(uint16)": "32148f67",
"initialize(uint160)": "f637731d",
"mint(address,int24,int24,uint128,bytes)": "3c8a7d8d",
"swap(address,bool,int256,uint160,bytes)": "128acb08"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burn(int24,int24,uint128)\":{\"details\":\"Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect\",\"params\":{\"amount\":\"How much liquidity to burn\",\"tickLower\":\"The lower tick of the position for which to burn liquidity\",\"tickUpper\":\"The upper tick of the position for which to burn liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 sent to the recipient\",\"amount1\":\"The amount of token1 sent to the recipient\"}},\"collect(address,int24,int24,uint128,uint128)\":{\"details\":\"Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\",\"params\":{\"amount0Requested\":\"How much token0 should be withdrawn from the fees owed\",\"amount1Requested\":\"How much token1 should be withdrawn from the fees owed\",\"recipient\":\"The address which should receive the fees collected\",\"tickLower\":\"The lower tick of the position for which to collect fees\",\"tickUpper\":\"The upper tick of the position for which to collect fees\"},\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"flash(address,uint256,uint256,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback\",\"params\":{\"amount0\":\"The amount of token0 to send\",\"amount1\":\"The amount of token1 to send\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address which will receive the token0 and token1 amounts\"}},\"increaseObservationCardinalityNext(uint16)\":{\"details\":\"This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.\",\"params\":{\"observationCardinalityNext\":\"The desired minimum number of observations for the pool to store\"}},\"initialize(uint160)\":{\"details\":\"Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\",\"params\":{\"sqrtPriceX96\":\"the initial sqrt price of the pool as a Q64.96\"}},\"mint(address,int24,int24,uint128,bytes)\":{\"details\":\"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.\",\"params\":{\"amount\":\"The amount of liquidity to mint\",\"data\":\"Any data that should be passed through to the callback\",\"recipient\":\"The address for which the liquidity will be created\",\"tickLower\":\"The lower tick of the position in which to add liquidity\",\"tickUpper\":\"The upper tick of the position in which to add liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\",\"amount1\":\"The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\"}},\"swap(address,bool,int256,uint160,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\",\"params\":{\"amountSpecified\":\"The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address to receive the output of the swap\",\"sqrtPriceLimitX96\":\"The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\",\"zeroForOne\":\"The direction of the swap, true for token0 to token1, false for token1 to token0\"},\"returns\":{\"amount0\":\"The delta of the balance of token0 of the pool, exact when negative, minimum when positive\",\"amount1\":\"The delta of the balance of token1 of the pool, exact when negative, minimum when positive\"}}},\"title\":\"Permissionless pool actions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burn(int24,int24,uint128)\":{\"notice\":\"Burn liquidity from the sender and account tokens owed for the liquidity to the position\"},\"collect(address,int24,int24,uint128,uint128)\":{\"notice\":\"Collects tokens owed to a position\"},\"flash(address,uint256,uint256,bytes)\":{\"notice\":\"Receive token0 and/or token1 and pay it back, plus a fee, in the callback\"},\"increaseObservationCardinalityNext(uint16)\":{\"notice\":\"Increase the maximum number of price and liquidity observations that this pool will store\"},\"initialize(uint160)\":{\"notice\":\"Sets the initial price for the pool\"},\"mint(address,int24,int24,uint128,bytes)\":{\"notice\":\"Adds liquidity for the given recipient/tickLower/tickUpper position\"},\"swap(address,bool,int256,uint160,bytes)\":{\"notice\":\"Swap token0 for token1, or token1 for token0\"}},\"notice\":\"Contains pool methods that can be called by anyone\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":\"IUniswapV3PoolActions\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"burn(int24,int24,uint128)": {
"notice": "Burn liquidity from the sender and account tokens owed for the liquidity to the position"
},
"collect(address,int24,int24,uint128,uint128)": {
"notice": "Collects tokens owed to a position"
},
"flash(address,uint256,uint256,bytes)": {
"notice": "Receive token0 and/or token1 and pay it back, plus a fee, in the callback"
},
"increaseObservationCardinalityNext(uint16)": {
"notice": "Increase the maximum number of price and liquidity observations that this pool will store"
},
"initialize(uint160)": {
"notice": "Sets the initial price for the pool"
},
"mint(address,int24,int24,uint128,bytes)": {
"notice": "Adds liquidity for the given recipient/tickLower/tickUpper position"
},
"swap(address,bool,int256,uint160,bytes)": {
"notice": "Swap token0 for token1, or token1 for token0"
}
},
"notice": "Contains pool methods that can be called by anyone",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": {
"IUniswapV3PoolDerivedState": {
"abi": [
{
"inputs": [
{
"internalType": "uint32[]",
"name": "secondsAgos",
"type": "uint32[]"
}
],
"name": "observe",
"outputs": [
{
"internalType": "int56[]",
"name": "tickCumulatives",
"type": "int56[]"
},
{
"internalType": "uint160[]",
"name": "secondsPerLiquidityCumulativeX128s",
"type": "uint160[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
}
],
"name": "snapshotCumulativesInside",
"outputs": [
{
"internalType": "int56",
"name": "tickCumulativeInside",
"type": "int56"
},
{
"internalType": "uint160",
"name": "secondsPerLiquidityInsideX128",
"type": "uint160"
},
{
"internalType": "uint32",
"name": "secondsInside",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"observe(uint32[])": {
"details": "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].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.",
"params": {
"secondsAgos": "From how long ago each cumulative tick and liquidity value should be returned"
},
"returns": {
"secondsPerLiquidityCumulativeX128s": "Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp",
"tickCumulatives": "Cumulative tick values as of each `secondsAgos` from the current block timestamp"
}
},
"snapshotCumulativesInside(int24,int24)": {
"details": "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.",
"params": {
"tickLower": "The lower tick of the range",
"tickUpper": "The upper tick of the range"
},
"returns": {
"secondsInside": "The snapshot of seconds per liquidity for the range",
"secondsPerLiquidityInsideX128": "The snapshot of seconds per liquidity for the range",
"tickCumulativeInside": "The snapshot of the tick accumulator for the range"
}
}
},
"title": "Pool state that is not stored",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"observe(uint32[])": "883bdbfd",
"snapshotCumulativesInside(int24,int24)": "a38807f2"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"observe(uint32[])\":{\"details\":\"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].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.\",\"params\":{\"secondsAgos\":\"From how long ago each cumulative tick and liquidity value should be returned\"},\"returns\":{\"secondsPerLiquidityCumulativeX128s\":\"Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp\",\"tickCumulatives\":\"Cumulative tick values as of each `secondsAgos` from the current block timestamp\"}},\"snapshotCumulativesInside(int24,int24)\":{\"details\":\"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.\",\"params\":{\"tickLower\":\"The lower tick of the range\",\"tickUpper\":\"The upper tick of the range\"},\"returns\":{\"secondsInside\":\"The snapshot of seconds per liquidity for the range\",\"secondsPerLiquidityInsideX128\":\"The snapshot of seconds per liquidity for the range\",\"tickCumulativeInside\":\"The snapshot of the tick accumulator for the range\"}}},\"title\":\"Pool state that is not stored\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"observe(uint32[])\":{\"notice\":\"Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\"},\"snapshotCumulativesInside(int24,int24)\":{\"notice\":\"Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\"}},\"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.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":\"IUniswapV3PoolDerivedState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"observe(uint32[])": {
"notice": "Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp"
},
"snapshotCumulativesInside(int24,int24)": {
"notice": "Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range"
}
},
"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.",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": {
"IUniswapV3PoolEvents": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"name": "Burn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount0",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount1",
"type": "uint128"
}
],
"name": "Collect",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount0",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount1",
"type": "uint128"
}
],
"name": "CollectProtocol",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "paid0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "paid1",
"type": "uint256"
}
],
"name": "Flash",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint16",
"name": "observationCardinalityNextOld",
"type": "uint16"
},
{
"indexed": false,
"internalType": "uint16",
"name": "observationCardinalityNextNew",
"type": "uint16"
}
],
"name": "IncreaseObservationCardinalityNext",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
},
{
"indexed": false,
"internalType": "int24",
"name": "tick",
"type": "int24"
}
],
"name": "Initialize",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"indexed": true,
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"indexed": false,
"internalType": "uint128",
"name": "amount",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"name": "Mint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "feeProtocol0Old",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint8",
"name": "feeProtocol1Old",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint8",
"name": "feeProtocol0New",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint8",
"name": "feeProtocol1New",
"type": "uint8"
}
],
"name": "SetFeeProtocol",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "int256",
"name": "amount0",
"type": "int256"
},
{
"indexed": false,
"internalType": "int256",
"name": "amount1",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
},
{
"indexed": false,
"internalType": "uint128",
"name": "liquidity",
"type": "uint128"
},
{
"indexed": false,
"internalType": "int24",
"name": "tick",
"type": "int24"
}
],
"name": "Swap",
"type": "event"
}
],
"devdoc": {
"events": {
"Burn(address,int24,int24,uint128,uint256,uint256)": {
"details": "Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect",
"params": {
"amount": "The amount of liquidity to remove",
"amount0": "The amount of token0 withdrawn",
"amount1": "The amount of token1 withdrawn",
"owner": "The owner of the position for which liquidity is removed",
"tickLower": "The lower tick of the position",
"tickUpper": "The upper tick of the position"
}
},
"Collect(address,address,int24,int24,uint128,uint128)": {
"details": "Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees",
"params": {
"amount0": "The amount of token0 fees collected",
"amount1": "The amount of token1 fees collected",
"owner": "The owner of the position for which fees are collected",
"tickLower": "The lower tick of the position",
"tickUpper": "The upper tick of the position"
}
},
"CollectProtocol(address,address,uint128,uint128)": {
"params": {
"amount0": "The amount of token1 protocol fees that is withdrawn",
"recipient": "The address that receives the collected protocol fees",
"sender": "The address that collects the protocol fees"
}
},
"Flash(address,address,uint256,uint256,uint256,uint256)": {
"params": {
"amount0": "The amount of token0 that was flashed",
"amount1": "The amount of token1 that was flashed",
"paid0": "The amount of token0 paid for the flash, which can exceed the amount0 plus the fee",
"paid1": "The amount of token1 paid for the flash, which can exceed the amount1 plus the fee",
"recipient": "The address that received the tokens from flash",
"sender": "The address that initiated the swap call, and that received the callback"
}
},
"IncreaseObservationCardinalityNext(uint16,uint16)": {
"details": "observationCardinalityNext is not the observation cardinality until an observation is written at the index just before a mint/swap/burn.",
"params": {
"observationCardinalityNextNew": "The updated value of the next observation cardinality",
"observationCardinalityNextOld": "The previous value of the next observation cardinality"
}
},
"Initialize(uint160,int24)": {
"details": "Mint/Burn/Swap cannot be emitted by the pool before Initialize",
"params": {
"sqrtPriceX96": "The initial sqrt price of the pool, as a Q64.96",
"tick": "The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool"
}
},
"Mint(address,address,int24,int24,uint128,uint256,uint256)": {
"params": {
"amount": "The amount of liquidity minted to the position range",
"amount0": "How much token0 was required for the minted liquidity",
"amount1": "How much token1 was required for the minted liquidity",
"owner": "The owner of the position and recipient of any minted liquidity",
"sender": "The address that minted the liquidity",
"tickLower": "The lower tick of the position",
"tickUpper": "The upper tick of the position"
}
},
"SetFeeProtocol(uint8,uint8,uint8,uint8)": {
"params": {
"feeProtocol0New": "The updated value of the token0 protocol fee",
"feeProtocol0Old": "The previous value of the token0 protocol fee",
"feeProtocol1New": "The updated value of the token1 protocol fee",
"feeProtocol1Old": "The previous value of the token1 protocol fee"
}
},
"Swap(address,address,int256,int256,uint160,uint128,int24)": {
"params": {
"amount0": "The delta of the token0 balance of the pool",
"amount1": "The delta of the token1 balance of the pool",
"liquidity": "The liquidity of the pool after the swap",
"recipient": "The address that received the output of the swap",
"sender": "The address that initiated the swap call, and that received the callback",
"sqrtPriceX96": "The sqrt(price) of the pool after the swap, as a Q64.96",
"tick": "The log base 1.0001 of price of the pool after the swap"
}
}
},
"kind": "dev",
"methods": {},
"title": "Events emitted by a pool",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"details\":\"Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\",\"params\":{\"amount\":\"The amount of liquidity to remove\",\"amount0\":\"The amount of token0 withdrawn\",\"amount1\":\"The amount of token1 withdrawn\",\"owner\":\"The owner of the position for which liquidity is removed\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"details\":\"Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\",\"params\":{\"amount0\":\"The amount of token0 fees collected\",\"amount1\":\"The amount of token1 fees collected\",\"owner\":\"The owner of the position for which fees are collected\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"CollectProtocol(address,address,uint128,uint128)\":{\"params\":{\"amount0\":\"The amount of token1 protocol fees that is withdrawn\",\"recipient\":\"The address that receives the collected protocol fees\",\"sender\":\"The address that collects the protocol fees\"}},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amount0\":\"The amount of token0 that was flashed\",\"amount1\":\"The amount of token1 that was flashed\",\"paid0\":\"The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\",\"paid1\":\"The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\",\"recipient\":\"The address that received the tokens from flash\",\"sender\":\"The address that initiated the swap call, and that received the callback\"}},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"details\":\"observationCardinalityNext is not the observation cardinality until an observation is written at the index just before a mint/swap/burn.\",\"params\":{\"observationCardinalityNextNew\":\"The updated value of the next observation cardinality\",\"observationCardinalityNextOld\":\"The previous value of the next observation cardinality\"}},\"Initialize(uint160,int24)\":{\"details\":\"Mint/Burn/Swap cannot be emitted by the pool before Initialize\",\"params\":{\"sqrtPriceX96\":\"The initial sqrt price of the pool, as a Q64.96\",\"tick\":\"The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\"}},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of liquidity minted to the position range\",\"amount0\":\"How much token0 was required for the minted liquidity\",\"amount1\":\"How much token1 was required for the minted liquidity\",\"owner\":\"The owner of the position and recipient of any minted liquidity\",\"sender\":\"The address that minted the liquidity\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"params\":{\"feeProtocol0New\":\"The updated value of the token0 protocol fee\",\"feeProtocol0Old\":\"The previous value of the token0 protocol fee\",\"feeProtocol1New\":\"The updated value of the token1 protocol fee\",\"feeProtocol1Old\":\"The previous value of the token1 protocol fee\"}},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"params\":{\"amount0\":\"The delta of the token0 balance of the pool\",\"amount1\":\"The delta of the token1 balance of the pool\",\"liquidity\":\"The liquidity of the pool after the swap\",\"recipient\":\"The address that received the output of the swap\",\"sender\":\"The address that initiated the swap call, and that received the callback\",\"sqrtPriceX96\":\"The sqrt(price) of the pool after the swap, as a Q64.96\",\"tick\":\"The log base 1.0001 of price of the pool after the swap\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"Events emitted by a pool\",\"version\":1},\"userdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when a position's liquidity is removed\"},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"notice\":\"Emitted when fees are collected by the owner of a position\"},\"CollectProtocol(address,address,uint128,uint128)\":{\"notice\":\"Emitted when the collected protocol fees are withdrawn by the factory owner\"},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted by the pool for any flashes of token0/token1\"},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"notice\":\"Emitted by the pool for increases to the number of observations that can be stored\"},\"Initialize(uint160,int24)\":{\"notice\":\"Emitted exactly once by a pool when #initialize is first called on the pool\"},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is minted for a given position\"},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"notice\":\"Emitted when the protocol fee is changed by the pool\"},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"notice\":\"Emitted by the pool for any swaps between token0 and token1\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains all events emitted by the pool\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":\"IUniswapV3PoolEvents\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"events": {
"Burn(address,int24,int24,uint128,uint256,uint256)": {
"notice": "Emitted when a position's liquidity is removed"
},
"Collect(address,address,int24,int24,uint128,uint128)": {
"notice": "Emitted when fees are collected by the owner of a position"
},
"CollectProtocol(address,address,uint128,uint128)": {
"notice": "Emitted when the collected protocol fees are withdrawn by the factory owner"
},
"Flash(address,address,uint256,uint256,uint256,uint256)": {
"notice": "Emitted by the pool for any flashes of token0/token1"
},
"IncreaseObservationCardinalityNext(uint16,uint16)": {
"notice": "Emitted by the pool for increases to the number of observations that can be stored"
},
"Initialize(uint160,int24)": {
"notice": "Emitted exactly once by a pool when #initialize is first called on the pool"
},
"Mint(address,address,int24,int24,uint128,uint256,uint256)": {
"notice": "Emitted when liquidity is minted for a given position"
},
"SetFeeProtocol(uint8,uint8,uint8,uint8)": {
"notice": "Emitted when the protocol fee is changed by the pool"
},
"Swap(address,address,int256,int256,uint160,uint128,int24)": {
"notice": "Emitted by the pool for any swaps between token0 and token1"
}
},
"kind": "user",
"methods": {},
"notice": "Contains all events emitted by the pool",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": {
"IUniswapV3PoolImmutables": {
"abi": [
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "fee",
"outputs": [
{
"internalType": "uint24",
"name": "",
"type": "uint24"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxLiquidityPerTick",
"outputs": [
{
"internalType": "uint128",
"name": "",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tickSpacing",
"outputs": [
{
"internalType": "int24",
"name": "",
"type": "int24"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token0",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token1",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"factory()": {
"returns": {
"_0": "The contract address"
}
},
"fee()": {
"returns": {
"_0": "The fee"
}
},
"maxLiquidityPerTick()": {
"details": "This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool",
"returns": {
"_0": "The max amount of liquidity per tick"
}
},
"tickSpacing()": {
"details": "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.",
"returns": {
"_0": "The tick spacing"
}
},
"token0()": {
"returns": {
"_0": "The token contract address"
}
},
"token1()": {
"returns": {
"_0": "The token contract address"
}
}
},
"title": "Pool state that never changes",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"factory()": "c45a0155",
"fee()": "ddca3f43",
"maxLiquidityPerTick()": "70cf754a",
"tickSpacing()": "d0c93a7c",
"token0()": "0dfe1681",
"token1()": "d21220a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"factory()\":{\"returns\":{\"_0\":\"The contract address\"}},\"fee()\":{\"returns\":{\"_0\":\"The fee\"}},\"maxLiquidityPerTick()\":{\"details\":\"This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\",\"returns\":{\"_0\":\"The max amount of liquidity per tick\"}},\"tickSpacing()\":{\"details\":\"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.\",\"returns\":{\"_0\":\"The tick spacing\"}},\"token0()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"token1()\":{\"returns\":{\"_0\":\"The token contract address\"}}},\"title\":\"Pool state that never changes\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"factory()\":{\"notice\":\"The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\"},\"fee()\":{\"notice\":\"The pool's fee in hundredths of a bip, i.e. 1e-6\"},\"maxLiquidityPerTick()\":{\"notice\":\"The maximum amount of position liquidity that can use any tick in the range\"},\"tickSpacing()\":{\"notice\":\"The pool tick spacing\"},\"token0()\":{\"notice\":\"The first of the two tokens of the pool, sorted by address\"},\"token1()\":{\"notice\":\"The second of the two tokens of the pool, sorted by address\"}},\"notice\":\"These parameters are fixed for a pool forever, i.e., the methods will always return the same values\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":\"IUniswapV3PoolImmutables\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"factory()": {
"notice": "The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface"
},
"fee()": {
"notice": "The pool's fee in hundredths of a bip, i.e. 1e-6"
},
"maxLiquidityPerTick()": {
"notice": "The maximum amount of position liquidity that can use any tick in the range"
},
"tickSpacing()": {
"notice": "The pool tick spacing"
},
"token0()": {
"notice": "The first of the two tokens of the pool, sorted by address"
},
"token1()": {
"notice": "The second of the two tokens of the pool, sorted by address"
}
},
"notice": "These parameters are fixed for a pool forever, i.e., the methods will always return the same values",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": {
"IUniswapV3PoolOwnerActions": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint128",
"name": "amount0Requested",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amount1Requested",
"type": "uint128"
}
],
"name": "collectProtocol",
"outputs": [
{
"internalType": "uint128",
"name": "amount0",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "amount1",
"type": "uint128"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "feeProtocol0",
"type": "uint8"
},
{
"internalType": "uint8",
"name": "feeProtocol1",
"type": "uint8"
}
],
"name": "setFeeProtocol",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"collectProtocol(address,uint128,uint128)": {
"params": {
"amount0Requested": "The maximum amount of token0 to send, can be 0 to collect fees in only token1",
"amount1Requested": "The maximum amount of token1 to send, can be 0 to collect fees in only token0",
"recipient": "The address to which collected protocol fees should be sent"
},
"returns": {
"amount0": "The protocol fee collected in token0",
"amount1": "The protocol fee collected in token1"
}
},
"setFeeProtocol(uint8,uint8)": {
"params": {
"feeProtocol0": "new protocol fee for token0 of the pool",
"feeProtocol1": "new protocol fee for token1 of the pool"
}
}
},
"title": "Permissioned pool actions",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"collectProtocol(address,uint128,uint128)": "85b66729",
"setFeeProtocol(uint8,uint8)": "8206a4d1"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"collectProtocol(address,uint128,uint128)\":{\"params\":{\"amount0Requested\":\"The maximum amount of token0 to send, can be 0 to collect fees in only token1\",\"amount1Requested\":\"The maximum amount of token1 to send, can be 0 to collect fees in only token0\",\"recipient\":\"The address to which collected protocol fees should be sent\"},\"returns\":{\"amount0\":\"The protocol fee collected in token0\",\"amount1\":\"The protocol fee collected in token1\"}},\"setFeeProtocol(uint8,uint8)\":{\"params\":{\"feeProtocol0\":\"new protocol fee for token0 of the pool\",\"feeProtocol1\":\"new protocol fee for token1 of the pool\"}}},\"title\":\"Permissioned pool actions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"collectProtocol(address,uint128,uint128)\":{\"notice\":\"Collect the protocol fee accrued to the pool\"},\"setFeeProtocol(uint8,uint8)\":{\"notice\":\"Set the denominator of the protocol's % share of the fees\"}},\"notice\":\"Contains pool methods that may only be called by the factory owner\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":\"IUniswapV3PoolOwnerActions\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"collectProtocol(address,uint128,uint128)": {
"notice": "Collect the protocol fee accrued to the pool"
},
"setFeeProtocol(uint8,uint8)": {
"notice": "Set the denominator of the protocol's % share of the fees"
}
},
"notice": "Contains pool methods that may only be called by the factory owner",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": {
"IUniswapV3PoolState": {
"abi": [
{
"inputs": [],
"name": "feeGrowthGlobal0X128",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "feeGrowthGlobal1X128",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "liquidity",
"outputs": [
{
"internalType": "uint128",
"name": "",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "observations",
"outputs": [
{
"internalType": "uint32",
"name": "blockTimestamp",
"type": "uint32"
},
{
"internalType": "int56",
"name": "tickCumulative",
"type": "int56"
},
{
"internalType": "uint160",
"name": "secondsPerLiquidityCumulativeX128",
"type": "uint160"
},
{
"internalType": "bool",
"name": "initialized",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "key",
"type": "bytes32"
}
],
"name": "positions",
"outputs": [
{
"internalType": "uint128",
"name": "_liquidity",
"type": "uint128"
},
{
"internalType": "uint256",
"name": "feeGrowthInside0LastX128",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "feeGrowthInside1LastX128",
"type": "uint256"
},
{
"internalType": "uint128",
"name": "tokensOwed0",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "tokensOwed1",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "protocolFees",
"outputs": [
{
"internalType": "uint128",
"name": "token0",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "token1",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "slot0",
"outputs": [
{
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
},
{
"internalType": "int24",
"name": "tick",
"type": "int24"
},
{
"internalType": "uint16",
"name": "observationIndex",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "observationCardinality",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "observationCardinalityNext",
"type": "uint16"
},
{
"internalType": "uint8",
"name": "feeProtocol",
"type": "uint8"
},
{
"internalType": "bool",
"name": "unlocked",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int16",
"name": "wordPosition",
"type": "int16"
}
],
"name": "tickBitmap",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int24",
"name": "tick",
"type": "int24"
}
],
"name": "ticks",
"outputs": [
{
"internalType": "uint128",
"name": "liquidityGross",
"type": "uint128"
},
{
"internalType": "int128",
"name": "liquidityNet",
"type": "int128"
},
{
"internalType": "uint256",
"name": "feeGrowthOutside0X128",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "feeGrowthOutside1X128",
"type": "uint256"
},
{
"internalType": "int56",
"name": "tickCumulativeOutside",
"type": "int56"
},
{
"internalType": "uint160",
"name": "secondsPerLiquidityOutsideX128",
"type": "uint160"
},
{
"internalType": "uint32",
"name": "secondsOutside",
"type": "uint32"
},
{
"internalType": "bool",
"name": "initialized",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"feeGrowthGlobal0X128()": {
"details": "This value can overflow the uint256"
},
"feeGrowthGlobal1X128()": {
"details": "This value can overflow the uint256"
},
"liquidity()": {
"details": "This value has no relationship to the total liquidity across all ticks"
},
"observations(uint256)": {
"details": "You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.",
"params": {
"index": "The element of the observations array to fetch"
},
"returns": {
"blockTimestamp": "The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use"
}
},
"positions(bytes32)": {
"params": {
"key": "The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper"
},
"returns": {
"_liquidity": "The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke"
}
},
"protocolFees()": {
"details": "Protocol fees will never exceed uint128 max in either token"
},
"slot0()": {
"returns": {
"sqrtPriceX96": "The current price of the pool as a sqrt(token1/token0) Q64.96 value 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. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. 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"
}
},
"ticks(int24)": {
"params": {
"tick": "The tick to look up"
},
"returns": {
"liquidityGross": "the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position."
}
}
},
"title": "Pool state that can change",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"feeGrowthGlobal0X128()": "f3058399",
"feeGrowthGlobal1X128()": "46141319",
"liquidity()": "1a686502",
"observations(uint256)": "252c09d7",
"positions(bytes32)": "514ea4bf",
"protocolFees()": "1ad8b03b",
"slot0()": "3850c7bd",
"tickBitmap(int16)": "5339c296",
"ticks(int24)": "f30dba93"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"_liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"wordPosition\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"feeGrowthGlobal0X128()\":{\"details\":\"This value can overflow the uint256\"},\"feeGrowthGlobal1X128()\":{\"details\":\"This value can overflow the uint256\"},\"liquidity()\":{\"details\":\"This value has no relationship to the total liquidity across all ticks\"},\"observations(uint256)\":{\"details\":\"You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.\",\"params\":{\"index\":\"The element of the observations array to fetch\"},\"returns\":{\"blockTimestamp\":\"The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use\"}},\"positions(bytes32)\":{\"params\":{\"key\":\"The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\"},\"returns\":{\"_liquidity\":\"The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\"}},\"protocolFees()\":{\"details\":\"Protocol fees will never exceed uint128 max in either token\"},\"slot0()\":{\"returns\":{\"sqrtPriceX96\":\"The current price of the pool as a sqrt(token1/token0) Q64.96 value 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. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. 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\"}},\"ticks(int24)\":{\"params\":{\"tick\":\"The tick to look up\"},\"returns\":{\"liquidityGross\":\"the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position.\"}}},\"title\":\"Pool state that can change\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"feeGrowthGlobal0X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\"},\"feeGrowthGlobal1X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\"},\"liquidity()\":{\"notice\":\"The currently in range liquidity available to the pool\"},\"observations(uint256)\":{\"notice\":\"Returns data about a specific observation index\"},\"positions(bytes32)\":{\"notice\":\"Returns the information about a position by the position's key\"},\"protocolFees()\":{\"notice\":\"The amounts of token0 and token1 that are owed to the protocol\"},\"slot0()\":{\"notice\":\"The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally.\"},\"tickBitmap(int16)\":{\"notice\":\"Returns 256 packed tick initialized boolean values. See TickBitmap for more information\"},\"ticks(int24)\":{\"notice\":\"Look up information about a specific tick in the pool\"}},\"notice\":\"These methods compose the pool's state, and can change with any frequency including multiple times per transaction\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":\"IUniswapV3PoolState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f\",\"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"feeGrowthGlobal0X128()": {
"notice": "The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool"
},
"feeGrowthGlobal1X128()": {
"notice": "The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool"
},
"liquidity()": {
"notice": "The currently in range liquidity available to the pool"
},
"observations(uint256)": {
"notice": "Returns data about a specific observation index"
},
"positions(bytes32)": {
"notice": "Returns the information about a position by the position's key"
},
"protocolFees()": {
"notice": "The amounts of token0 and token1 that are owed to the protocol"
},
"slot0()": {
"notice": "The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally."
},
"tickBitmap(int16)": {
"notice": "Returns 256 packed tick initialized boolean values. See TickBitmap for more information"
},
"ticks(int24)": {
"notice": "Look up information about a specific tick in the pool"
}
},
"notice": "These methods compose the pool's state, and can change with any frequency including multiple times per transaction",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/libraries/SafeCast.sol": {
"SafeCast": {
"abi": [],
"devdoc": {
"kind": "dev",
"methods": {},
"title": "Safe casting methods",
"version": 1
},
"evm": {
"assembly": " /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":165:1047 library SafeCast {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n invalid\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":165:1047 library SafeCast {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220f88a0b8d6051fe994f54a1c175d887cbbd36cf57317cc3eaf27538391f9b579964736f6c63430007060033\n}\n",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f88a0b8d6051fe994f54a1c175d887cbbd36cf57317cc3eaf27538391f9b579964736f6c63430007060033",
"opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF8 DUP11 SIGNEXTEND DUP14 PUSH1 0x51 INVALID SWAP10 0x4F SLOAD LOG1 0xC1 PUSH22 0xD887CBBD36CF57317CC3EAF27538391F9B579964736F PUSH13 0x63430007060033000000000000 ",
"sourceMap": "165:882:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f88a0b8d6051fe994f54a1c175d887cbbd36cf57317cc3eaf27538391f9b579964736f6c63430007060033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF8 DUP11 SIGNEXTEND DUP14 PUSH1 0x51 INVALID SWAP10 0x4F SLOAD LOG1 0xC1 PUSH22 0xD887CBBD36CF57317CC3EAF27538391F9B579964736F PUSH13 0x63430007060033000000000000 ",
"sourceMap": "165:882:8:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"toInt128(int256)": "infinite",
"toInt256(uint256)": "infinite",
"toUint160(uint256)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 165,
"end": 1047,
"name": "PUSH #[$]",
"source": 8,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 165,
"end": 1047,
"name": "PUSH [$]",
"source": 8,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 165,
"end": 1047,
"name": "PUSH",
"source": 8,
"value": "B"
},
{
"begin": 165,
"end": 1047,
"name": "DUP3",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "DUP3",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "DUP3",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "CODECOPY",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "DUP1",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "MLOAD",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 165,
"end": 1047,
"name": "BYTE",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "PUSH",
"source": 8,
"value": "73"
},
{
"begin": 165,
"end": 1047,
"name": "EQ",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "PUSH [tag]",
"source": 8,
"value": "1"
},
{
"begin": 165,
"end": 1047,
"name": "JUMPI",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "INVALID",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "tag",
"source": 8,
"value": "1"
},
{
"begin": 165,
"end": 1047,
"name": "JUMPDEST",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "ADDRESS",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 165,
"end": 1047,
"name": "MSTORE",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "PUSH",
"source": 8,
"value": "73"
},
{
"begin": 165,
"end": 1047,
"name": "DUP2",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "MSTORE8",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "DUP3",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "DUP2",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "RETURN",
"source": 8
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220f88a0b8d6051fe994f54a1c175d887cbbd36cf57317cc3eaf27538391f9b579964736f6c63430007060033",
".code": [
{
"begin": 165,
"end": 1047,
"name": "PUSHDEPLOYADDRESS",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "ADDRESS",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "EQ",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "PUSH",
"source": 8,
"value": "80"
},
{
"begin": 165,
"end": 1047,
"name": "PUSH",
"source": 8,
"value": "40"
},
{
"begin": 165,
"end": 1047,
"name": "MSTORE",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 165,
"end": 1047,
"name": "DUP1",
"source": 8
},
{
"begin": 165,
"end": 1047,
"name": "REVERT",
"source": 8
}
]
}
}
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Safe casting methods\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains methods for safely casting between types\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0x4c12bf820c0b011f5490a209960ca34dd8af34660ef9e01de0438393d15e3fd8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://fed11489e218e55d087d42b4f350a30e10cd2aedec8f432bd3cc712f648d5869\",\"dweb:/ipfs/QmWfRnRxyXwHUDcTQPazxYYk5jxErGeQqdvnYtyg5nBPbU\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"notice": "Contains methods for safely casting between types",
"version": 1
}
}
},
"@uniswap/v3-core/contracts/libraries/TickMath.sol": {
"TickMath": {
"abi": [],
"devdoc": {
"kind": "dev",
"methods": {},
"stateVariables": {
"MAX_SQRT_RATIO": {
"details": "The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)"
},
"MAX_TICK": {
"details": "The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128"
},
"MIN_SQRT_RATIO": {
"details": "The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)"
},
"MIN_TICK": {
"details": "The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128"
}
},
"title": "Math library for computing sqrt prices from ticks and vice versa",
"version": 1
},
"evm": {
"assembly": " /* \"@uniswap/v3-core/contracts/libraries/TickMath.sol\":313:8644 library TickMath {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n invalid\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@uniswap/v3-core/contracts/libraries/TickMath.sol\":313:8644 library TickMath {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212208eef7fdfa810cc70cbba2f428d8cc0dd728c1a810bce4c3519e81ecf8ce250da64736f6c63430007060033\n}\n",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208eef7fdfa810cc70cbba2f428d8cc0dd728c1a810bce4c3519e81ecf8ce250da64736f6c63430007060033",
"opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 0xEF PUSH32 0xDFA810CC70CBBA2F428D8CC0DD728C1A810BCE4C3519E81ECF8CE250DA64736F PUSH13 0x63430007060033000000000000 ",
"sourceMap": "313:8331:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208eef7fdfa810cc70cbba2f428d8cc0dd728c1a810bce4c3519e81ecf8ce250da64736f6c63430007060033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 0xEF PUSH32 0xDFA810CC70CBBA2F428D8CC0DD728C1A810BCE4C3519E81ECF8CE250DA64736F PUSH13 0x63430007060033000000000000 ",
"sourceMap": "313:8331:9:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"getSqrtRatioAtTick(int24)": "infinite",
"getTickAtSqrtRatio(uint160)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 313,
"end": 8644,
"name": "PUSH #[$]",
"source": 9,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 313,
"end": 8644,
"name": "PUSH [$]",
"source": 9,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 313,
"end": 8644,
"name": "PUSH",
"source": 9,
"value": "B"
},
{
"begin": 313,
"end": 8644,
"name": "DUP3",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "DUP3",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "DUP3",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "CODECOPY",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "DUP1",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "MLOAD",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "PUSH",
"source": 9,
"value": "0"
},
{
"begin": 313,
"end": 8644,
"name": "BYTE",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "PUSH",
"source": 9,
"value": "73"
},
{
"begin": 313,
"end": 8644,
"name": "EQ",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "PUSH [tag]",
"source": 9,
"value": "1"
},
{
"begin": 313,
"end": 8644,
"name": "JUMPI",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "INVALID",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "tag",
"source": 9,
"value": "1"
},
{
"begin": 313,
"end": 8644,
"name": "JUMPDEST",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "ADDRESS",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "PUSH",
"source": 9,
"value": "0"
},
{
"begin": 313,
"end": 8644,
"name": "MSTORE",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "PUSH",
"source": 9,
"value": "73"
},
{
"begin": 313,
"end": 8644,
"name": "DUP2",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "MSTORE8",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "DUP3",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "DUP2",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "RETURN",
"source": 9
}
],
".data": {
"0": {
".auxdata": "a26469706673582212208eef7fdfa810cc70cbba2f428d8cc0dd728c1a810bce4c3519e81ecf8ce250da64736f6c63430007060033",
".code": [
{
"begin": 313,
"end": 8644,
"name": "PUSHDEPLOYADDRESS",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "ADDRESS",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "EQ",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "PUSH",
"source": 9,
"value": "80"
},
{
"begin": 313,
"end": 8644,
"name": "PUSH",
"source": 9,
"value": "40"
},
{
"begin": 313,
"end": 8644,
"name": "MSTORE",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "PUSH",
"source": 9,
"value": "0"
},
{
"begin": 313,
"end": 8644,
"name": "DUP1",
"source": 9
},
{
"begin": 313,
"end": 8644,
"name": "REVERT",
"source": 9
}
]
}
}
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"MAX_SQRT_RATIO\":{\"details\":\"The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\"},\"MAX_TICK\":{\"details\":\"The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\"},\"MIN_SQRT_RATIO\":{\"details\":\"The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\"},\"MIN_TICK\":{\"details\":\"The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\"}},\"title\":\"Math library for computing sqrt prices from ticks and vice versa\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports prices between 2**-128 and 2**128\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/libraries/TickMath.sol\":\"TickMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xda8c2c0b12d2976acfd364453ba5f5bf0117ba3c91175ee9e1067d3fb26944d9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3f3d2d7c2723c91830c74d96292f28fc1cfe28d388cdb9c1a5ebadb4c2b96f81\",\"dweb:/ipfs/QmYU4wk8MEm33wVWR38LoncvR7b8PP1mLuGBKX3dUpYJVE\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"notice": "Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports prices between 2**-128 and 2**128",
"version": 1
}
}
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol": {
"PeripheryImmutableState": {
"abi": [
{
"inputs": [],
"name": "WETH9",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"stateVariables": {
"WETH9": {
"return": "Returns the address of WETH9"
},
"factory": {
"return": "Returns the address of the Uniswap V3 factory"
}
},
"title": "Immutable state",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"WETH9()": "4aa4a4fc",
"factory()": "c45a0155"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"WETH9\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"WETH9\":{\"return\":\"Returns the address of WETH9\"},\"factory\":{\"return\":\"Returns the address of the Uniswap V3 factory\"}},\"title\":\"Immutable state\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Immutable state used by periphery contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol\":\"PeripheryImmutableState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0xd43c2355a7d5659b1fa1fb322647f760722d73a6a5e62ede53d426f3b406b795\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://657920576878ca936157383782a97b74166c303a3932c0d72eac3a2d057c3a96\",\"dweb:/ipfs/Qma71Ska1ZbPBnYpeE5S2EAeEtwGfHEMHo3SnDwY1fVmm5\"]},\"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x7affcfeb5127c0925a71d6a65345e117c33537523aeca7bc98085ead8452519d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e16b291294210e71cb0f20cd0afe62ae2dc6878d627f5ccc19c4dc9cd80aec3f\",\"dweb:/ipfs/QmQGitSyBr26nour81BZmpmDMyJpvZRqHQZvnCD1Acb127\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"notice": "Immutable state used by periphery contracts",
"version": 1
}
}
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IPeripheryImmutableState.sol": {
"IPeripheryImmutableState": {
"abi": [
{
"inputs": [],
"name": "WETH9",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"WETH9()": {
"returns": {
"_0": "Returns the address of WETH9"
}
},
"factory()": {
"returns": {
"_0": "Returns the address of the Uniswap V3 factory"
}
}
},
"title": "Immutable state",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"WETH9()": "4aa4a4fc",
"factory()": "c45a0155"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"WETH9\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"WETH9()\":{\"returns\":{\"_0\":\"Returns the address of WETH9\"}},\"factory()\":{\"returns\":{\"_0\":\"Returns the address of the Uniswap V3 factory\"}}},\"title\":\"Immutable state\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Functions that return immutable state of the router\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IPeripheryImmutableState.sol\":\"IPeripheryImmutableState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x7affcfeb5127c0925a71d6a65345e117c33537523aeca7bc98085ead8452519d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e16b291294210e71cb0f20cd0afe62ae2dc6878d627f5ccc19c4dc9cd80aec3f\",\"dweb:/ipfs/QmQGitSyBr26nour81BZmpmDMyJpvZRqHQZvnCD1Acb127\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"notice": "Functions that return immutable state of the router",
"version": 1
}
}
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IQuoter.sol": {
"IQuoter": {
"abi": [
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"name": "quoteExactInput",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint24",
"name": "fee",
"type": "uint24"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
}
],
"name": "quoteExactInputSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"name": "quoteExactOutput",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint24",
"name": "fee",
"type": "uint24"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
}
],
"name": "quoteExactOutputSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "These functions are not marked view because they rely on calling non-view functions and reverting to compute the result. They are also not gas efficient and should not be called on-chain.",
"kind": "dev",
"methods": {
"quoteExactInput(bytes,uint256)": {
"params": {
"amountIn": "The amount of the first token to swap",
"path": "The path of the swap, i.e. each token pair and the pool fee"
},
"returns": {
"amountOut": "The amount of the last token that would be received"
}
},
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": {
"params": {
"amountIn": "The desired input amount",
"fee": "The fee of the token pool to consider for the pair",
"sqrtPriceLimitX96": "The price limit of the pool that cannot be exceeded by the swap",
"tokenIn": "The token being swapped in",
"tokenOut": "The token being swapped out"
},
"returns": {
"amountOut": "The amount of `tokenOut` that would be received"
}
},
"quoteExactOutput(bytes,uint256)": {
"params": {
"amountOut": "The amount of the last token to receive",
"path": "The path of the swap, i.e. each token pair and the pool fee"
},
"returns": {
"amountIn": "The amount of first token required to be paid"
}
},
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": {
"params": {
"amountOut": "The desired output amount",
"fee": "The fee of the token pool to consider for the pair",
"sqrtPriceLimitX96": "The price limit of the pool that cannot be exceeded by the swap",
"tokenIn": "The token being swapped in",
"tokenOut": "The token being swapped out"
},
"returns": {
"amountIn": "The amount required as the input for the swap in order to receive `amountOut`"
}
}
},
"title": "Quoter Interface",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"quoteExactInput(bytes,uint256)": "cdca1753",
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": "f7729d43",
"quoteExactOutput(bytes,uint256)": "2f80bb1d",
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": "30d07f21"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"quoteExactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"quoteExactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"quoteExactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"quoteExactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These functions are not marked view because they rely on calling non-view functions and reverting to compute the result. They are also not gas efficient and should not be called on-chain.\",\"kind\":\"dev\",\"methods\":{\"quoteExactInput(bytes,uint256)\":{\"params\":{\"amountIn\":\"The amount of the first token to swap\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee\"},\"returns\":{\"amountOut\":\"The amount of the last token that would be received\"}},\"quoteExactInputSingle(address,address,uint24,uint256,uint160)\":{\"params\":{\"amountIn\":\"The desired input amount\",\"fee\":\"The fee of the token pool to consider for the pair\",\"sqrtPriceLimitX96\":\"The price limit of the pool that cannot be exceeded by the swap\",\"tokenIn\":\"The token being swapped in\",\"tokenOut\":\"The token being swapped out\"},\"returns\":{\"amountOut\":\"The amount of `tokenOut` that would be received\"}},\"quoteExactOutput(bytes,uint256)\":{\"params\":{\"amountOut\":\"The amount of the last token to receive\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee\"},\"returns\":{\"amountIn\":\"The amount of first token required to be paid\"}},\"quoteExactOutputSingle(address,address,uint24,uint256,uint160)\":{\"params\":{\"amountOut\":\"The desired output amount\",\"fee\":\"The fee of the token pool to consider for the pair\",\"sqrtPriceLimitX96\":\"The price limit of the pool that cannot be exceeded by the swap\",\"tokenIn\":\"The token being swapped in\",\"tokenOut\":\"The token being swapped out\"},\"returns\":{\"amountIn\":\"The amount required as the input for the swap in order to receive `amountOut`\"}}},\"title\":\"Quoter Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"quoteExactInput(bytes,uint256)\":{\"notice\":\"Returns the amount out received for a given exact input swap without executing the swap\"},\"quoteExactInputSingle(address,address,uint24,uint256,uint160)\":{\"notice\":\"Returns the amount out received for a given exact input but for a swap of a single pool\"},\"quoteExactOutput(bytes,uint256)\":{\"notice\":\"Returns the amount in required for a given exact output swap without executing the swap\"},\"quoteExactOutputSingle(address,address,uint24,uint256,uint160)\":{\"notice\":\"Returns the amount in required to receive the given exact output amount but for a swap of a single pool\"}},\"notice\":\"Supports quoting the calculated amounts from exact input or exact output swaps\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IQuoter.sol\":\"IQuoter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/interfaces/IQuoter.sol\":{\"keccak256\":\"0xabe1e7831b0e4c3fe78ab89b5dd46d75d05e74d21ebd19b898f3605f455b39d8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bace6abd0dd8fe9038ea95336107b7f40adefed93f347a1d726eefe46a27c85\",\"dweb:/ipfs/QmYsCNTJPU87a8todV5NCvZyMzzx8EaJCrEKKeywSnPBDd\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"quoteExactInput(bytes,uint256)": {
"notice": "Returns the amount out received for a given exact input swap without executing the swap"
},
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": {
"notice": "Returns the amount out received for a given exact input but for a swap of a single pool"
},
"quoteExactOutput(bytes,uint256)": {
"notice": "Returns the amount in required for a given exact output swap without executing the swap"
},
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": {
"notice": "Returns the amount in required to receive the given exact output amount but for a swap of a single pool"
}
},
"notice": "Supports quoting the calculated amounts from exact input or exact output swaps",
"version": 1
}
}
},
"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol": {
"Quoter": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_factory",
"type": "address"
},
{
"internalType": "address",
"name": "_WETH9",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "WETH9",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"name": "quoteExactInput",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint24",
"name": "fee",
"type": "uint24"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
}
],
"name": "quoteExactInputSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"name": "quoteExactOutput",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint24",
"name": "fee",
"type": "uint24"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "sqrtPriceLimitX96",
"type": "uint160"
}
],
"name": "quoteExactOutputSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "amount0Delta",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1Delta",
"type": "int256"
},
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
}
],
"name": "uniswapV3SwapCallback",
"outputs": [],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute the swap and check the amounts in the callback.",
"kind": "dev",
"methods": {
"quoteExactInput(bytes,uint256)": {
"params": {
"amountIn": "The amount of the first token to swap",
"path": "The path of the swap, i.e. each token pair and the pool fee"
},
"returns": {
"amountOut": "The amount of the last token that would be received"
}
},
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": {
"params": {
"amountIn": "The desired input amount",
"fee": "The fee of the token pool to consider for the pair",
"sqrtPriceLimitX96": "The price limit of the pool that cannot be exceeded by the swap",
"tokenIn": "The token being swapped in",
"tokenOut": "The token being swapped out"
},
"returns": {
"amountOut": "The amount of `tokenOut` that would be received"
}
},
"quoteExactOutput(bytes,uint256)": {
"params": {
"amountOut": "The amount of the last token to receive",
"path": "The path of the swap, i.e. each token pair and the pool fee"
},
"returns": {
"amountIn": "The amount of first token required to be paid"
}
},
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": {
"params": {
"amountOut": "The desired output amount",
"fee": "The fee of the token pool to consider for the pair",
"sqrtPriceLimitX96": "The price limit of the pool that cannot be exceeded by the swap",
"tokenIn": "The token being swapped in",
"tokenOut": "The token being swapped out"
},
"returns": {
"amountIn": "The amount required as the input for the swap in order to receive `amountOut`"
}
},
"uniswapV3SwapCallback(int256,int256,bytes)": {
"details": "In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.",
"params": {
"amount0Delta": "The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.",
"amount1Delta": "The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.",
"data": "Any data passed through by the caller via the IUniswapV3PoolActions#swap call"
}
}
},
"stateVariables": {
"amountOutCached": {
"details": "Transient storage variable used to check a safety condition in exact output swaps."
}
},
"title": "Provides quotes for swaps",
"version": 1
},
"evm": {
"assembly": " /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":875:6596 contract Quoter is IQuoter, IUniswapV3SwapCallback, PeripheryImmutableState {... */\n mstore(0x40, 0xc0)\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1150:1240 constructor(address _factory, address _WETH9) PeripheryImmutableState(_factory, _WETH9) {} */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n add\n 0x40\n dup2\n swap1\n mstore\n tag_2\n swap2\n tag_3\n jump\t// in\ntag_2:\n not(sub(shl(0x60, 0x01), 0x01))\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol\":522:540 factory = _factory */\n 0x60\n swap3\n dup4\n shl\n dup2\n and\n 0x80\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol\":550:564 WETH9 = _WETH9 */\n swap2\n shl\n and\n 0xa0\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":875:6596 contract Quoter is IQuoter, IUniswapV3SwapCallback, PeripheryImmutableState {... */\n jump(tag_9)\n /* \"#utility.yul\":14:193 */\ntag_10:\n /* \"#utility.yul\":95:108 */\n dup1\n mload\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":137:168 */\n dup2\n and\n /* \"#utility.yul\":127:169 */\n dup2\n eq\n /* \"#utility.yul\":117:119 */\n tag_12\n jumpi\n /* \"#utility.yul\":183:184 */\n 0x00\n /* \"#utility.yul\":180:181 */\n dup1\n /* \"#utility.yul\":173:185 */\n revert\n /* \"#utility.yul\":117:119 */\ntag_12:\n /* \"#utility.yul\":76:193 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":198:505 */\ntag_3:\n 0x00\n dup1\n /* \"#utility.yul\":338:340 */\n 0x40\n /* \"#utility.yul\":326:335 */\n dup4\n /* \"#utility.yul\":317:324 */\n dup6\n /* \"#utility.yul\":313:336 */\n sub\n /* \"#utility.yul\":309:341 */\n slt\n /* \"#utility.yul\":306:308 */\n iszero\n tag_14\n jumpi\n /* \"#utility.yul\":359:365 */\n dup2\n /* \"#utility.yul\":351:357 */\n dup3\n /* \"#utility.yul\":344:366 */\n revert\n /* \"#utility.yul\":306:308 */\ntag_14:\n /* \"#utility.yul\":387:429 */\n tag_15\n /* \"#utility.yul\":419:428 */\n dup4\n /* \"#utility.yul\":387:429 */\n tag_10\n jump\t// in\ntag_15:\n /* \"#utility.yul\":377:429 */\n swap2\n pop\n /* \"#utility.yul\":448:499 */\n tag_16\n /* \"#utility.yul\":495:497 */\n 0x20\n /* \"#utility.yul\":484:493 */\n dup5\n /* \"#utility.yul\":480:498 */\n add\n /* \"#utility.yul\":448:499 */\n tag_10\n jump\t// in\ntag_16:\n /* \"#utility.yul\":438:499 */\n swap1\n pop\n /* \"#utility.yul\":296:505 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\ntag_9:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":875:6596 contract Quoter is IQuoter, IUniswapV3SwapCallback, PeripheryImmutableState {... */\n shr(0x60, mload(0x80))\n shr(0x60, mload(0xa0))\n codecopy(0x00, dataOffset(sub_0), dataSize(sub_0))\n assignImmutable(\"0xb37328d1c6f33416cc50b9168b9894b89e743919cc7edc16d1bdc20660330b9f\")\n assignImmutable(\"0x912cdad641b4408bd64eb5a331e5fe393f33f2296e0c7fad54e613ac760cfb47\")\n return(0x00, dataSize(sub_0))\nstop\n\nsub_0: assembly {\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":875:6596 contract Quoter is IQuoter, IUniswapV3SwapCallback, PeripheryImmutableState {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc45a0155\n gt\n tag_10\n jumpi\n dup1\n 0xc45a0155\n eq\n tag_6\n jumpi\n dup1\n 0xcdca1753\n eq\n tag_7\n jumpi\n dup1\n 0xf7729d43\n eq\n tag_8\n jumpi\n dup1\n 0xfa461e33\n eq\n tag_9\n jumpi\n jump(tag_2)\n tag_10:\n dup1\n 0x2f80bb1d\n eq\n tag_3\n jumpi\n dup1\n 0x30d07f21\n eq\n tag_4\n jumpi\n dup1\n 0x4aa4a4fc\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5929:6594 function quoteExactOutput(bytes memory path, uint256 amountOut) external override returns (uint256 amountIn) {... */\n tag_3:\n tag_11\n tag_12\n calldatasize\n 0x04\n tag_13\n jump\t// in\n tag_12:\n tag_14\n jump\t// in\n tag_11:\n mload(0x40)\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4821:5895 function quoteExactOutputSingle(... */\n tag_4:\n tag_11\n tag_18\n calldatasize\n 0x04\n tag_19\n jump\t// in\n tag_18:\n tag_20\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol\":420:459 address public immutable override WETH9 */\n tag_5:\n tag_22\n tag_23\n jump\t// in\n tag_22:\n mload(0x40)\n tag_15\n swap2\n swap1\n tag_25\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol\":328:369 address public immutable override factory */\n tag_6:\n tag_22\n tag_27\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4127:4787 function quoteExactInput(bytes memory path, uint256 amountIn) external override returns (uint256 amountOut) {... */\n tag_7:\n tag_11\n tag_30\n calldatasize\n 0x04\n tag_13\n jump\t// in\n tag_30:\n tag_31\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3275:4093 function quoteExactInputSingle(... */\n tag_8:\n tag_11\n tag_34\n calldatasize\n 0x04\n tag_19\n jump\t// in\n tag_34:\n tag_35\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1544:2789 function uniswapV3SwapCallback(... */\n tag_9:\n tag_37\n tag_38\n calldatasize\n 0x04\n tag_39\n jump\t// in\n tag_38:\n tag_40\n jump\t// in\n tag_37:\n stop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5929:6594 function quoteExactOutput(bytes memory path, uint256 amountOut) external override returns (uint256 amountIn) {... */\n tag_14:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6020:6036 uint256 amountIn */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6048:6588 while (true) {... */\n tag_42:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6075:6096 bool hasMultiplePools */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6099:6122 path.hasMultiplePools() */\n tag_44\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6099:6103 path */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6099:6120 path.hasMultiplePools */\n tag_45\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6099:6122 path.hasMultiplePools() */\n jump\t// in\n tag_44:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6075:6122 bool hasMultiplePools = path.hasMultiplePools() */\n swap1\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6138:6154 address tokenOut */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6156:6171 address tokenIn */\n dup1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6173:6183 uint24 fee */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6187:6209 path.decodeFirstPool() */\n tag_46\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6187:6191 path */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6187:6207 path.decodeFirstPool */\n tag_47\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6187:6209 path.decodeFirstPool() */\n jump\t// in\n tag_46:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6137:6209 (address tokenOut, address tokenIn, uint24 fee) = path.decodeFirstPool() */\n swap3\n pop\n swap3\n pop\n swap3\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6315:6375 quoteExactOutputSingle(tokenIn, tokenOut, fee, amountOut, 0) */\n tag_48\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6338:6345 tokenIn */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6347:6355 tokenOut */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6357:6360 fee */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6362:6371 amountOut */\n dup10\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6373:6374 0 */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6315:6337 quoteExactOutputSingle */\n tag_20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6315:6375 quoteExactOutputSingle(tokenIn, tokenOut, fee, amountOut, 0) */\n jump\t// in\n tag_48:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6303:6375 amountOut = quoteExactOutputSingle(tokenIn, tokenOut, fee, amountOut, 0) */\n swap6\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6449:6465 hasMultiplePools */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6445:6578 if (hasMultiplePools) {... */\n iszero\n tag_49\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6492:6508 path.skipToken() */\n tag_50\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6492:6496 path */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6492:6506 path.skipToken */\n tag_51\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6492:6508 path.skipToken() */\n jump\t// in\n tag_50:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6485:6508 path = path.skipToken() */\n swap7\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6445:6578 if (hasMultiplePools) {... */\n jump(tag_52)\n tag_49:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6554:6563 amountOut */\n dup6\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6547:6563 return amountOut */\n swap5\n pop\n pop\n pop\n pop\n pop\n jump(tag_43)\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6445:6578 if (hasMultiplePools) {... */\n tag_52:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":6048:6588 while (true) {... */\n pop\n pop\n pop\n pop\n jump(tag_42)\n tag_43:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5929:6594 function quoteExactOutput(bytes memory path, uint256 amountOut) external override returns (uint256 amountIn) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4821:5895 function quoteExactOutputSingle(... */\n tag_20:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5017:5033 uint256 amountIn */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5063:5081 tokenIn < tokenOut */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup7\n and\n dup8\n dup3\n and\n lt\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5205:5227 sqrtPriceLimitX96 == 0 */\n dup4\n and\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5201:5256 if (sqrtPriceLimitX96 == 0) amountOutCached = amountOut */\n tag_54\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5229:5244 amountOutCached */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5229:5256 amountOutCached = amountOut */\n dup5\n swap1\n sstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5201:5256 if (sqrtPriceLimitX96 == 0) amountOutCached = amountOut */\n tag_54:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5282:5313 getPool(tokenIn, tokenOut, fee) */\n tag_55\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5290:5297 tokenIn */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5299:5307 tokenOut */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5309:5312 fee */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5282:5289 getPool */\n tag_56\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5282:5313 getPool(tokenIn, tokenOut, fee) */\n jump\t// in\n tag_55:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5282:5318 getPool(tokenIn, tokenOut, fee).swap */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x128acb08\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5344:5348 this */\n address\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5417:5427 zeroForOne */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5446:5466 amountOut.toInt256() */\n tag_57\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5446:5455 amountOut */\n dup9\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5446:5464 amountOut.toInt256 */\n tag_58\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5446:5466 amountOut.toInt256() */\n jump\t// in\n tag_57:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5445:5466 -amountOut.toInt256() */\n 0x00\n sub\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5484:5506 sqrtPriceLimitX96 == 0 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup9\n and\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5484:5641 sqrtPriceLimitX96 == 0... */\n tag_59\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5624:5641 sqrtPriceLimitX96 */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5484:5641 sqrtPriceLimitX96 == 0... */\n jump(tag_62)\n tag_59:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5530:5540 zeroForOne */\n dup6\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5530:5600 zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1 */\n tag_61\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5573:5600 TickMath.MAX_SQRT_RATIO - 1 */\n 0xfffd8963efd1fc6a506488495d951d5263988d25\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5530:5600 zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1 */\n jump(tag_62)\n tag_61:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5543:5570 TickMath.MIN_SQRT_RATIO + 1 */\n 0x01000276a4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5530:5600 zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1 */\n tag_62:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5676:5684 tokenOut */\n dup12\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5686:5689 fee */\n dup12\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5691:5698 tokenIn */\n dup15\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5659:5699 abi.encodePacked(tokenOut, fee, tokenIn) */\n add(0x20, mload(0x40))\n tag_63\n swap4\n swap3\n swap2\n swap1\n tag_64\n jump\t// in\n tag_63:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5282:5713 getPool(tokenIn, tokenOut, fee).swap(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_65\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_66\n jump\t// in\n tag_65:\n 0x40\n dup1\n mload\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_67\n jumpi\n 0x00\n dup1\n revert\n tag_67:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_68\n jumpi\n pop\n 0x40\n dup1\n mload\n 0x1f\n returndatasize\n swap1\n dup2\n add\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n and\n dup3\n add\n swap1\n swap3\n mstore\n tag_69\n swap2\n dup2\n add\n swap1\n tag_70\n jump\t// in\n tag_69:\n 0x01\n tag_68:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5266:5889 try... */\n tag_71\n jumpi\n returndatasize\n dup1\n dup1\n iszero\n tag_75\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_74)\n tag_75:\n 0x60\n swap2\n pop\n tag_74:\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5771:5793 sqrtPriceLimitX96 == 0 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup5\n and\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5767:5817 if (sqrtPriceLimitX96 == 0) delete amountOutCached */\n tag_76\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5802:5817 amountOutCached */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5795:5817 delete amountOutCached */\n dup1\n sstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5767:5817 if (sqrtPriceLimitX96 == 0) delete amountOutCached */\n tag_76:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5853:5878 parseRevertReason(reason) */\n tag_77\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5871:5877 reason */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5853:5870 parseRevertReason */\n tag_78\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5853:5878 parseRevertReason(reason) */\n jump\t// in\n tag_77:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5846:5878 return parseRevertReason(reason) */\n swap3\n pop\n pop\n pop\n jump(tag_53)\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":5266:5889 try... */\n tag_71:\n pop\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4821:5895 function quoteExactOutputSingle(... */\n pop\n tag_53:\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol\":420:459 address public immutable override WETH9 */\n tag_23:\n immutable(\"0xb37328d1c6f33416cc50b9168b9894b89e743919cc7edc16d1bdc20660330b9f\")\n dup2\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/base/PeripheryImmutableState.sol\":328:369 address public immutable override factory */\n tag_27:\n immutable(\"0x912cdad641b4408bd64eb5a331e5fe393f33f2296e0c7fad54e613ac760cfb47\")\n dup2\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4127:4787 function quoteExactInput(bytes memory path, uint256 amountIn) external override returns (uint256 amountOut) {... */\n tag_31:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4216:4233 uint256 amountOut */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4245:4781 while (true) {... */\n tag_81:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4272:4293 bool hasMultiplePools */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4296:4319 path.hasMultiplePools() */\n tag_83\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4296:4300 path */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4296:4317 path.hasMultiplePools */\n tag_45\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4296:4319 path.hasMultiplePools() */\n jump\t// in\n tag_83:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4272:4319 bool hasMultiplePools = path.hasMultiplePools() */\n swap1\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4335:4350 address tokenIn */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4352:4368 address tokenOut */\n dup1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4370:4380 uint24 fee */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4384:4406 path.decodeFirstPool() */\n tag_84\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4384:4388 path */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4384:4404 path.decodeFirstPool */\n tag_47\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4384:4406 path.decodeFirstPool() */\n jump\t// in\n tag_84:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4334:4406 (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool() */\n swap3\n pop\n swap3\n pop\n swap3\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4511:4569 quoteExactInputSingle(tokenIn, tokenOut, fee, amountIn, 0) */\n tag_85\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4533:4540 tokenIn */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4542:4550 tokenOut */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4552:4555 fee */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4557:4565 amountIn */\n dup10\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4567:4568 0 */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4511:4532 quoteExactInputSingle */\n tag_35\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4511:4569 quoteExactInputSingle(tokenIn, tokenOut, fee, amountIn, 0) */\n jump\t// in\n tag_85:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4500:4569 amountIn = quoteExactInputSingle(tokenIn, tokenOut, fee, amountIn, 0) */\n swap6\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4643:4659 hasMultiplePools */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4639:4771 if (hasMultiplePools) {... */\n iszero\n tag_49\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4686:4702 path.skipToken() */\n tag_87\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4686:4690 path */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4686:4700 path.skipToken */\n tag_51\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4686:4702 path.skipToken() */\n jump\t// in\n tag_87:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4679:4702 path = path.skipToken() */\n swap7\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4245:4781 while (true) {... */\n pop\n pop\n pop\n pop\n jump(tag_81)\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3275:4093 function quoteExactInputSingle(... */\n tag_35:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3469:3486 uint256 amountOut */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3516:3534 tokenIn < tokenOut */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup1\n dup7\n and\n swap1\n dup8\n and\n lt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3561:3592 getPool(tokenIn, tokenOut, fee) */\n tag_90\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3516:3523 tokenIn */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3526:3534 tokenOut */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3588:3591 fee */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3561:3568 getPool */\n tag_56\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3561:3592 getPool(tokenIn, tokenOut, fee) */\n jump\t// in\n tag_90:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3561:3597 getPool(tokenIn, tokenOut, fee).swap */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x128acb08\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3623:3627 this */\n address\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3696:3706 zeroForOne */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3724:3743 amountIn.toInt256() */\n tag_91\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3724:3732 amountIn */\n dup9\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3724:3741 amountIn.toInt256 */\n tag_58\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3724:3743 amountIn.toInt256() */\n jump\t// in\n tag_91:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3761:3783 sqrtPriceLimitX96 == 0 */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup9\n and\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3761:3918 sqrtPriceLimitX96 == 0... */\n tag_92\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3901:3918 sqrtPriceLimitX96 */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3761:3918 sqrtPriceLimitX96 == 0... */\n jump(tag_95)\n tag_92:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3807:3817 zeroForOne */\n dup6\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3807:3877 zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1 */\n tag_94\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3850:3877 TickMath.MAX_SQRT_RATIO - 1 */\n 0xfffd8963efd1fc6a506488495d951d5263988d25\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3807:3877 zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1 */\n jump(tag_95)\n tag_94:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3820:3847 TickMath.MIN_SQRT_RATIO + 1 */\n 0x01000276a4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3807:3877 zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1 */\n tag_95:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3953:3960 tokenIn */\n dup13\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3962:3965 fee */\n dup12\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3967:3975 tokenOut */\n dup14\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3936:3976 abi.encodePacked(tokenIn, fee, tokenOut) */\n add(0x20, mload(0x40))\n tag_96\n swap4\n swap3\n swap2\n swap1\n tag_64\n jump\t// in\n tag_96:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3561:3990 getPool(tokenIn, tokenOut, fee).swap(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_97\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_66\n jump\t// in\n tag_97:\n 0x40\n dup1\n mload\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_98\n jumpi\n 0x00\n dup1\n revert\n tag_98:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_99\n jumpi\n pop\n 0x40\n dup1\n mload\n 0x1f\n returndatasize\n swap1\n dup2\n add\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n and\n dup3\n add\n swap1\n swap3\n mstore\n tag_100\n swap2\n dup2\n add\n swap1\n tag_70\n jump\t// in\n tag_100:\n 0x01\n tag_99:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3545:4087 try... */\n tag_71\n jumpi\n returndatasize\n dup1\n dup1\n iszero\n tag_105\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_104)\n tag_105:\n 0x60\n swap2\n pop\n tag_104:\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4051:4076 parseRevertReason(reason) */\n tag_77\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4069:4075 reason */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4051:4068 parseRevertReason */\n tag_78\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":4051:4076 parseRevertReason(reason) */\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1544:2789 function uniswapV3SwapCallback(... */\n tag_40:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1722:1723 0 */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1707:1719 amount0Delta */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1707:1723 amount0Delta > 0 */\n sgt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1707:1743 amount0Delta > 0 || amount1Delta > 0 */\n dup1\n tag_109\n jumpi\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1742:1743 0 */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1727:1739 amount1Delta */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1727:1743 amount1Delta > 0 */\n sgt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1707:1743 amount0Delta > 0 || amount1Delta > 0 */\n tag_109:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1699:1744 require(amount0Delta > 0 || amount1Delta > 0) */\n tag_110\n jumpi\n 0x00\n dup1\n revert\n tag_110:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1818:1833 address tokenIn */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1835:1851 address tokenOut */\n dup1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1853:1863 uint24 fee */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1867:1889 path.decodeFirstPool() */\n tag_111\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1867:1871 path */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1867:1887 path.decodeFirstPool */\n tag_47\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1867:1889 path.decodeFirstPool() */\n jump\t// in\n tag_111:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1817:1889 (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool() */\n swap3\n pop\n swap3\n pop\n swap3\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1899:1965 CallbackValidation.verifyCallback(factory, tokenIn, tokenOut, fee) */\n tag_112\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1933:1940 factory */\n immutable(\"0x912cdad641b4408bd64eb5a331e5fe393f33f2296e0c7fad54e613ac760cfb47\")\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1942:1949 tokenIn */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1951:1959 tokenOut */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1961:1964 fee */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1899:1932 CallbackValidation.verifyCallback */\n tag_113\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1899:1965 CallbackValidation.verifyCallback(factory, tokenIn, tokenOut, fee) */\n jump\t// in\n tag_112:\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1977:1994 bool isExactInput */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1996:2015 uint256 amountToPay */\n dup1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2017:2039 uint256 amountReceived */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2070:2071 0 */\n dup1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2055:2067 amount0Delta */\n dup10\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2055:2071 amount0Delta > 0 */\n sgt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2055:2243 amount0Delta > 0... */\n tag_114\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2188:2195 tokenIn */\n dup6\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2177:2195 tokenOut < tokenIn */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2177:2185 tokenOut */\n dup6\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2177:2195 tokenOut < tokenIn */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n lt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2205:2217 amount1Delta */\n dup9\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2229:2241 amount0Delta */\n dup11\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2228:2241 -amount0Delta */\n 0x00\n sub\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2055:2243 amount0Delta > 0... */\n jump(tag_115)\n tag_114:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2101:2109 tokenOut */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2091:2109 tokenIn < tokenOut */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2091:2098 tokenIn */\n dup7\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2091:2109 tokenIn < tokenOut */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n lt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2119:2131 amount0Delta */\n dup10\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2143:2155 amount1Delta */\n dup10\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2142:2155 -amount1Delta */\n 0x00\n sub\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2055:2243 amount0Delta > 0... */\n tag_115:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1976:2243 (bool isExactInput, uint256 amountToPay, uint256 amountReceived) =... */\n swap3\n pop\n swap3\n pop\n swap3\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2257:2269 isExactInput */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2253:2783 if (isExactInput) {... */\n iszero\n tag_116\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2329:2333 0x40 */\n 0x40\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2323:2334 mload(0x40) */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2363:2377 amountReceived */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2358:2361 ptr */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2351:2378 mstore(ptr, amountReceived) */\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2407:2409 32 */\n 0x20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2402:2405 ptr */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2395:2410 revert(ptr, 32) */\n revert\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2294:2424 {... */\n tag_116:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2559:2574 amountOutCached */\n sload(0x00)\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2559:2579 amountOutCached != 0 */\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2555:2623 if (amountOutCached != 0) require(amountReceived == amountOutCached) */\n tag_119\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2607:2622 amountOutCached */\n sload(0x00)\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2589:2603 amountReceived */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2589:2622 amountReceived == amountOutCached */\n eq\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2581:2623 require(amountReceived == amountOutCached) */\n tag_119\n jumpi\n 0x00\n dup1\n revert\n tag_119:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2681:2685 0x40 */\n 0x40\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2675:2686 mload(0x40) */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2715:2726 amountToPay */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2710:2713 ptr */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2703:2727 mstore(ptr, amountToPay) */\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2756:2758 32 */\n 0x20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2751:2754 ptr */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2744:2759 revert(ptr, 32) */\n revert\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":992:1130 function hasMultiplePools(bytes memory path) internal pure returns (bool) {... */\n tag_45:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1083:1094 path.length */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":777:801 POP_OFFSET + NEXT_OFFSET */\n 0x42\n gt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1083:1123 path.length >= MULTIPLE_POOLS_MIN_LENGTH */\n iszero\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":992:1130 function hasMultiplePools(bytes memory path) internal pure returns (bool) {... */\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1392:1706 function decodeFirstPool(bytes memory path)... */\n tag_47:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1496:1510 address tokenA */\n 0x00\n dup1\n dup1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1596:1613 path.toAddress(0) */\n tag_122\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1596:1600 path */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1496:1510 address tokenA */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1596:1610 path.toAddress */\n tag_123\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1596:1613 path.toAddress(0) */\n jump\t// in\n tag_122:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1587:1613 tokenA = path.toAddress(0) */\n swap3\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1629:1653 path.toUint24(ADDR_SIZE) */\n tag_124\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1629:1633 path */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":304:306 20 */\n 0x14\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1629:1642 path.toUint24 */\n tag_125\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1629:1653 path.toUint24(ADDR_SIZE) */\n jump\t// in\n tag_124:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1623:1653 fee = path.toUint24(ADDR_SIZE) */\n swap1\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1672:1699 path.toAddress(NEXT_OFFSET) */\n tag_126\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1672:1676 path */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":507:527 ADDR_SIZE + FEE_SIZE */\n 0x17\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1672:1686 path.toAddress */\n tag_123\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1672:1699 path.toAddress(NEXT_OFFSET) */\n jump\t// in\n tag_126:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1663:1699 tokenB = path.toAddress(NEXT_OFFSET) */\n swap2\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":1392:1706 function decodeFirstPool(bytes memory path)... */\n swap2\n swap4\n swap1\n swap3\n pop\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":2248:2397 function skipToken(bytes memory path) internal pure returns (bytes memory) {... */\n tag_51:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":2364:2375 path.length */\n dup1\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":2309:2321 bytes memory */\n 0x60\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":2340:2390 path.slice(NEXT_OFFSET, path.length - NEXT_OFFSET) */\n tag_43\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":2364:2368 path */\n dup4\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":507:527 ADDR_SIZE + FEE_SIZE */\n 0x17\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":2364:2389 path.length - NEXT_OFFSET */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":2340:2350 path.slice */\n tag_129\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/Path.sol\":2340:2390 path.slice(NEXT_OFFSET, path.length - NEXT_OFFSET) */\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1246:1495 function getPool(... */\n tag_56:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1359:1373 IUniswapV3Pool */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1407:1487 PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)) */\n tag_131\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1434:1441 factory */\n immutable(\"0x912cdad641b4408bd64eb5a331e5fe393f33f2296e0c7fad54e613ac760cfb47\")\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1443:1486 PoolAddress.getPoolKey(tokenA, tokenB, fee) */\n tag_132\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1466:1472 tokenA */\n dup7\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1474:1480 tokenB */\n dup7\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1482:1485 fee */\n dup7\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1443:1465 PoolAddress.getPoolKey */\n tag_133\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1443:1486 PoolAddress.getPoolKey(tokenA, tokenB, fee) */\n jump\t// in\n tag_132:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1407:1433 PoolAddress.computeAddress */\n tag_134\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1407:1487 PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)) */\n jump\t// in\n tag_131:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1385:1488 return IUniswapV3Pool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee))) */\n swap5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":1246:1495 function getPool(... */\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":924:1045 function toInt256(uint256 y) internal pure returns (int256 z) {... */\n tag_58:\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":976:984 int256 z */\n 0x00\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":1008:1014 2**255 */\n 0x8000000000000000000000000000000000000000000000000000000000000000\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":1004:1005 y */\n dup3\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":1004:1014 y < 2**255 */\n lt\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":996:1015 require(y < 2**255) */\n tag_136\n jumpi\n 0x00\n dup1\n revert\n tag_136:\n pop\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":1036:1037 y */\n swap1\n /* \"@uniswap/v3-core/contracts/libraries/SafeCast.sol\":924:1045 function toInt256(uint256 y) internal pure returns (int256 z) {... */\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2869:3241 function parseRevertReason(bytes memory reason) private pure returns (uint256) {... */\n tag_78:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2939:2946 uint256 */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2962:2968 reason */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2962:2975 reason.length */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2979:2981 32 */\n 0x20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2962:2981 reason.length != 32 */\n eq\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2958:3189 if (reason.length != 32) {... */\n tag_138\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3017:3019 68 */\n 0x44\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3001:3007 reason */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3001:3014 reason.length */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3001:3019 reason.length < 68 */\n lt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2997:3047 if (reason.length < 68) revert('Unexpected error') */\n iszero\n tag_139\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3021:3047 revert('Unexpected error') */\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_140\n swap1\n tag_141\n jump\t// in\n tag_140:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2997:3047 if (reason.length < 68) revert('Unexpected error') */\n tag_139:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3110:3114 0x04 */\n 0x04\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3102:3108 reason */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3098:3115 add(reason, 0x04) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3088:3115 reason := add(reason, 0x04) */\n swap2\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3160:3166 reason */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3149:3177 abi.decode(reason, (string)) */\n dup1\n 0x20\n add\n swap1\n mload\n dup2\n add\n swap1\n tag_142\n swap2\n swap1\n tag_143\n jump\t// in\n tag_142:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3142:3178 revert(abi.decode(reason, (string))) */\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_140\n swap2\n swap1\n tag_145\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":2958:3189 if (reason.length != 32) {... */\n tag_138:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3216:3222 reason */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/lens/Quoter.sol\":3205:3234 abi.decode(reason, (uint256)) */\n dup1\n 0x20\n add\n swap1\n mload\n dup2\n add\n swap1\n tag_43\n swap2\n swap1\n tag_147\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":683:942 function verifyCallback(... */\n tag_113:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":829:848 IUniswapV3Pool pool */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":867:935 verifyCallback(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)) */\n tag_53\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":882:889 factory */\n dup6\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":891:934 PoolAddress.getPoolKey(tokenA, tokenB, fee) */\n tag_150\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":914:920 tokenA */\n dup7\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":922:928 tokenB */\n dup7\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":930:933 fee */\n dup7\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":891:913 PoolAddress.getPoolKey */\n tag_133\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":891:934 PoolAddress.getPoolKey(tokenA, tokenB, fee) */\n jump\t// in\n tag_150:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":867:881 verifyCallback */\n tag_151\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":867:935 verifyCallback(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)) */\n jump\t// in\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3412:3828 function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) {... */\n tag_123:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3491:3498 address */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3533:3539 _start */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3518:3524 _start */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3527:3529 20 */\n 0x14\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3518:3529 _start + 20 */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3518:3539 _start + 20 >= _start */\n lt\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3510:3562 require(_start + 20 >= _start, 'toAddress_overflow') */\n tag_153\n jumpi\n 0x40\n dup1\n mload\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x12\n 0x24\n dup3\n add\n mstore\n 0x746f416464726573735f6f766572666c6f770000000000000000000000000000\n 0x44\n dup3\n add\n mstore\n swap1\n mload\n swap1\n dup2\n swap1\n sub\n 0x64\n add\n swap1\n revert\n tag_153:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3597:3603 _start */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3606:3608 20 */\n 0x14\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3597:3608 _start + 20 */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3580:3586 _bytes */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3580:3593 _bytes.length */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3580:3608 _bytes.length >= _start + 20 */\n lt\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3572:3634 require(_bytes.length >= _start + 20, 'toAddress_outOfBounds') */\n tag_154\n jumpi\n 0x40\n dup1\n mload\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x15\n 0x24\n dup3\n add\n mstore\n 0x746f416464726573735f6f75744f66426f756e64730000000000000000000000\n 0x44\n dup3\n add\n mstore\n swap1\n mload\n swap1\n dup2\n swap1\n sub\n 0x64\n add\n swap1\n revert\n tag_154:\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3722:3752 add(add(_bytes, 0x20), _start) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3738:3742 0x20 */\n 0x20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3722:3752 add(add(_bytes, 0x20), _start) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3716:3753 mload(add(add(_bytes, 0x20), _start)) */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3755:3782 0x1000000000000000000000000 */\n 0x01000000000000000000000000\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3712:3783 div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000) */\n swap1\n div\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3412:3828 function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) {... */\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3834:4199 function toUint24(bytes memory _bytes, uint256 _start) internal pure returns (uint24) {... */\n tag_125:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3912:3918 uint24 */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3952:3958 _start */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3938:3944 _start */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3947:3948 3 */\n 0x03\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3938:3948 _start + 3 */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3938:3958 _start + 3 >= _start */\n lt\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3930:3980 require(_start + 3 >= _start, 'toUint24_overflow') */\n tag_156\n jumpi\n 0x40\n dup1\n mload\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x11\n 0x24\n dup3\n add\n mstore\n 0x746f55696e7432345f6f766572666c6f77000000000000000000000000000000\n 0x44\n dup3\n add\n mstore\n swap1\n mload\n swap1\n dup2\n swap1\n sub\n 0x64\n add\n swap1\n revert\n tag_156:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":4015:4021 _start */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":4024:4025 3 */\n 0x03\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":4015:4025 _start + 3 */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3998:4004 _bytes */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3998:4011 _bytes.length */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3998:4025 _bytes.length >= _start + 3 */\n lt\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3990:4050 require(_bytes.length >= _start + 3, 'toUint24_outOfBounds') */\n tag_157\n jumpi\n 0x40\n dup1\n mload\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x14\n 0x24\n dup3\n add\n mstore\n 0x746f55696e7432345f6f75744f66426f756e6473000000000000000000000000\n 0x44\n dup3\n add\n mstore\n swap1\n mload\n swap1\n dup2\n swap1\n sub\n 0x64\n add\n swap1\n revert\n tag_157:\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":4127:4156 add(add(_bytes, 0x3), _start) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":4143:4146 0x3 */\n 0x03\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":4127:4156 add(add(_bytes, 0x3), _start) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":4121:4157 mload(add(add(_bytes, 0x3), _start)) */\n mload\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3834:4199 function toUint24(bytes memory _bytes, uint256 _start) internal pure returns (uint24) {... */\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":399:3406 function slice(... */\n tag_129:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":521:533 bytes memory */\n 0x60\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":569:576 _length */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":553:560 _length */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":563:565 31 */\n 0x1f\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":553:565 _length + 31 */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":553:576 _length + 31 >= _length */\n lt\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":545:595 require(_length + 31 >= _length, 'slice_overflow') */\n tag_159\n jumpi\n 0x40\n dup1\n mload\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x0e\n 0x24\n dup3\n add\n mstore\n 0x736c6963655f6f766572666c6f77000000000000000000000000000000000000\n 0x44\n dup3\n add\n mstore\n swap1\n mload\n swap1\n dup2\n swap1\n sub\n 0x64\n add\n swap1\n revert\n tag_159:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":633:639 _start */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":622:629 _length */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":613:619 _start */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":613:629 _start + _length */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":613:639 _start + _length >= _start */\n lt\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":605:658 require(_start + _length >= _start, 'slice_overflow') */\n tag_160\n jumpi\n 0x40\n dup1\n mload\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x0e\n 0x24\n dup3\n add\n mstore\n 0x736c6963655f6f766572666c6f77000000000000000000000000000000000000\n 0x44\n dup3\n add\n mstore\n swap1\n mload\n swap1\n dup2\n swap1\n sub\n 0x64\n add\n swap1\n revert\n tag_160:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":702:709 _length */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":693:699 _start */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":693:709 _start + _length */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":676:682 _bytes */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":676:689 _bytes.length */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":676:709 _bytes.length >= _start + _length */\n lt\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":668:731 require(_bytes.length >= _start + _length, 'slice_outOfBounds') */\n tag_161\n jumpi\n 0x40\n dup1\n mload\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x11\n 0x24\n dup3\n add\n mstore\n 0x736c6963655f6f75744f66426f756e6473000000000000000000000000000000\n 0x44\n dup3\n add\n mstore\n swap1\n mload\n swap1\n dup2\n swap1\n sub\n 0x64\n add\n swap1\n revert\n tag_161:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":742:764 bytes memory tempBytes */\n 0x60\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":805:820 iszero(_length) */\n dup3\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":837:2936 case 0 {... */\n dup1\n iszero\n tag_163\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3089:3093 0x40 */\n 0x40\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3083:3094 mload(0x40) */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3070:3094 tempBytes := mload(0x40) */\n swap2\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3287:3288 0 */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3276:3285 tempBytes */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3269:3289 mstore(tempBytes, 0) */\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3339:3343 0x20 */\n 0x20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3328:3337 tempBytes */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3324:3344 add(tempBytes, 0x20) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3318:3322 0x40 */\n 0x40\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3311:3345 mstore(0x40, add(tempBytes, 0x20)) */\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":798:3363 switch iszero(_length)... */\n jump(tag_162)\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":837:2936 case 0 {... */\n tag_163:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":1031:1035 0x40 */\n 0x40\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":1025:1036 mload(0x40) */\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":1012:1036 tempBytes := mload(0x40) */\n swap2\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":1726:1728 31 */\n 0x1f\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":1717:1724 _length */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":1713:1729 and(_length, 31) */\n and\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2128:2137 lengthmod */\n dup1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2121:2138 iszero(lengthmod) */\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2115:2119 0x20 */\n 0x20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2111:2139 mul(0x20, iszero(lengthmod)) */\n mul\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2099:2108 lengthmod */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2088:2097 tempBytes */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2084:2109 add(tempBytes, lengthmod) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2080:2140 add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod))) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2180:2187 _length */\n dup6\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2176:2178 mc */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2172:2188 add(mc, _length) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2448:2454 _start */\n dup8\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2434:2443 lengthmod */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2427:2444 iszero(lengthmod) */\n iszero\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2421:2425 0x20 */\n 0x20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2417:2445 mul(0x20, iszero(lengthmod)) */\n mul\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2405:2414 lengthmod */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2397:2403 _bytes */\n dup12\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2393:2415 add(_bytes, lengthmod) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2389:2446 add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2385:2455 add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2210:2671 for {... */\n tag_164:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2485:2488 end */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2481:2483 mc */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2478:2489 lt(mc, end) */\n lt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2210:2671 for {... */\n iszero\n tag_166\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2639:2648 mload(cc) */\n dup1\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2628:2649 mstore(mc, mload(cc)) */\n dup4\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2530:2534 0x20 */\n 0x20\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2522:2535 add(mc, 0x20) */\n swap3\n dup4\n add\n swap3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2566:2579 add(cc, 0x20) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2210:2671 for {... */\n jump(tag_164)\n tag_166:\n pop\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2693:2719 mstore(tempBytes, _length) */\n dup6\n dup5\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2913:2915 31 */\n 0x1f\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2896:2907 add(mc, 31) */\n add\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2909:2916 not(31) */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2892:2917 and(add(mc, 31), not(31)) */\n and\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2886:2890 0x40 */\n 0x40\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":2879:2918 mstore(0x40, and(add(mc, 31), not(31))) */\n mstore\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":798:3363 switch iszero(_length)... */\n tag_162:\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":3390:3399 tempBytes */\n swap5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/BytesLib.sol\":399:3406 function slice(... */\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":784:1058 function getPoolKey(... */\n tag_133:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":901:915 PoolKey memory */\n tag_167\n tag_168\n jump\t// in\n tag_167:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":940:946 tokenB */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":931:946 tokenA > tokenB */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":931:937 tokenA */\n dup5\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":931:946 tokenA > tokenB */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n gt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":927:983 if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA) */\n iszero\n tag_170\n jumpi\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":968:974 tokenB */\n swap2\n swap3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":976:982 tokenA */\n swap2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":927:983 if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA) */\n tag_170:\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1000:1051 PoolKey({token0: tokenA, token1: tokenB, fee: fee}) */\n 0x40\n dup1\n mload\n 0x60\n dup2\n add\n dup3\n mstore\n 0xffffffffffffffffffffffffffffffffffffffff\n swap5\n dup6\n and\n dup2\n mstore\n swap3\n swap1\n swap4\n and\n 0x20\n dup4\n add\n mstore\n 0xffffff\n and\n swap2\n dup2\n add\n swap2\n swap1\n swap2\n mstore\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":784:1058 function getPoolKey(... */\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1305:1817 function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {... */\n tag_134:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1389:1401 address pool */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1434:1437 key */\n dup2\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1434:1444 key.token1 */\n 0x20\n add\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1421:1444 key.token0 < key.token1 */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1421:1424 key */\n dup3\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1421:1431 key.token0 */\n 0x00\n add\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1421:1444 key.token0 < key.token1 */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n lt\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1413:1445 require(key.token0 < key.token1) */\n tag_172\n jumpi\n 0x00\n dup1\n revert\n tag_172:\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1668:1678 key.token0 */\n dup1\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1680:1690 key.token1 */\n 0x20\n dup1\n dup4\n add\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1692:1699 key.fee */\n 0x40\n swap4\n dup5\n add\n mload\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1657:1700 abi.encode(key.token0, key.token1, key.fee) */\n dup5\n mload\n 0xffffffffffffffffffffffffffffffffffffffff\n swap5\n dup6\n and\n dup2\n dup6\n add\n mstore\n swap4\n swap1\n swap2\n and\n dup4\n dup6\n add\n mstore\n 0xffffff\n and\n 0x60\n dup1\n dup5\n add\n swap2\n swap1\n swap2\n mstore\n dup4\n mload\n dup1\n dup5\n sub\n dup3\n add\n dup2\n mstore\n 0x80\n dup5\n add\n dup6\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1647:1701 keccak256(abi.encode(key.token0, key.token1, key.fee)) */\n dup1\n mload\n swap1\n dup4\n add\n keccak256\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1539:1768 abi.encodePacked(... */\n 0xff00000000000000000000000000000000000000000000000000000000000000\n 0xa0\n dup6\n add\n mstore\n swap5\n swap1\n shl\n 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n and\n 0xa1\n dup4\n add\n mstore\n 0xb5\n dup3\n add\n swap4\n swap1\n swap4\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":241:307 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54 */\n 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1539:1768 abi.encodePacked(... */\n 0xd5\n dup1\n dup4\n add\n swap2\n swap1\n swap2\n mstore\n dup3\n mload\n dup1\n dup4\n sub\n swap1\n swap2\n add\n dup2\n mstore\n 0xf5\n swap1\n swap2\n add\n swap1\n swap2\n mstore\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1508:1786 keccak256(... */\n dup1\n mload\n swap2\n add\n keccak256\n swap1\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/PoolAddress.sol\":1305:1817 function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {... */\n jump\t// out\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1189:1468 function verifyCallback(address factory, PoolAddress.PoolKey memory poolKey)... */\n tag_151:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1313:1332 IUniswapV3Pool pool */\n 0x00\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1370:1414 PoolAddress.computeAddress(factory, poolKey) */\n tag_174\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1397:1404 factory */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1406:1413 poolKey */\n dup4\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1370:1396 PoolAddress.computeAddress */\n tag_134\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1370:1414 PoolAddress.computeAddress(factory, poolKey) */\n jump\t// in\n tag_174:\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1348:1415 pool = IUniswapV3Pool(PoolAddress.computeAddress(factory, poolKey)) */\n swap1\n pop\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1433:1443 msg.sender */\n caller\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1433:1460 msg.sender == address(pool) */\n 0xffffffffffffffffffffffffffffffffffffffff\n dup3\n and\n eq\n /* \"mainnet/0xb27308f9f90d607463bb33ea1bebb41c27ce5ab6/contracts/libraries/CallbackValidation.sol\":1425:1461 require(msg.sender == address(pool)) */\n tag_43\n jumpi\n 0x00\n dup1\n revert\n tag_168:\n 0x40\n dup1\n mload\n 0x60\n dup2\n add\n dup3\n mstore\n 0x00\n dup1\n dup3\n mstore\n 0x20\n dup3\n add\n dup2\n swap1\n mstore\n swap2\n dup2\n add\n swap2\n swap1\n swap2\n mstore\n swap1\n jump\t// out\n /* \"#utility.yul\":14:499 */\n tag_177:\n 0x00\n /* \"#utility.yul\":111:114 */\n dup3\n /* \"#utility.yul\":104:108 */\n 0x1f\n /* \"#utility.yul\":96:102 */\n dup4\n /* \"#utility.yul\":92:109 */\n add\n /* \"#utility.yul\":88:115 */\n slt\n /* \"#utility.yul\":78:80 */\n tag_179\n jumpi\n /* \"#utility.yul\":133:138 */\n dup1\n /* \"#utility.yul\":126:131 */\n dup2\n /* \"#utility.yul\":119:139 */\n revert\n /* \"#utility.yul\":78:80 */\n tag_179:\n /* \"#utility.yul\":173:179 */\n dup2\n /* \"#utility.yul\":160:180 */\n calldataload\n /* \"#utility.yul\":204:253 */\n tag_180\n /* \"#utility.yul\":219:252 */\n tag_181\n /* \"#utility.yul\":249:251 */\n dup3\n /* \"#utility.yul\":219:252 */\n tag_182\n jump\t// in\n tag_181:\n /* \"#utility.yul\":204:253 */\n tag_183\n jump\t// in\n tag_180:\n /* \"#utility.yul\":278:280 */\n dup2\n /* \"#utility.yul\":269:276 */\n dup2\n /* \"#utility.yul\":262:281 */\n mstore\n /* \"#utility.yul\":324:327 */\n dup5\n /* \"#utility.yul\":317:321 */\n 0x20\n /* \"#utility.yul\":312:314 */\n dup4\n /* \"#utility.yul\":304:310 */\n dup7\n /* \"#utility.yul\":300:315 */\n add\n /* \"#utility.yul\":296:322 */\n add\n /* \"#utility.yul\":293:328 */\n gt\n /* \"#utility.yul\":290:292 */\n iszero\n tag_184\n jumpi\n /* \"#utility.yul\":345:350 */\n dup3\n /* \"#utility.yul\":338:343 */\n dup4\n /* \"#utility.yul\":331:351 */\n revert\n /* \"#utility.yul\":290:292 */\n tag_184:\n /* \"#utility.yul\":414:416 */\n dup2\n /* \"#utility.yul\":407:411 */\n 0x20\n /* \"#utility.yul\":399:405 */\n dup6\n /* \"#utility.yul\":395:412 */\n add\n /* \"#utility.yul\":388:392 */\n 0x20\n /* \"#utility.yul\":379:386 */\n dup4\n /* \"#utility.yul\":375:393 */\n add\n /* \"#utility.yul\":362:417 */\n calldatacopy\n /* \"#utility.yul\":437:453 */\n swap1\n dup2\n add\n /* \"#utility.yul\":455:459 */\n 0x20\n /* \"#utility.yul\":433:460 */\n add\n /* \"#utility.yul\":426:468 */\n swap2\n swap1\n swap2\n mstore\n /* \"#utility.yul\":441:448 */\n swap3\n /* \"#utility.yul\":68:499 */\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":504:1299 */\n tag_19:\n 0x00\n dup1\n 0x00\n dup1\n 0x00\n /* \"#utility.yul\":683:686 */\n 0xa0\n /* \"#utility.yul\":671:680 */\n dup7\n /* \"#utility.yul\":662:669 */\n dup9\n /* \"#utility.yul\":658:681 */\n sub\n /* \"#utility.yul\":654:687 */\n slt\n /* \"#utility.yul\":651:653 */\n iszero\n tag_186\n jumpi\n /* \"#utility.yul\":705:711 */\n dup1\n /* \"#utility.yul\":697:703 */\n dup2\n /* \"#utility.yul\":690:712 */\n revert\n /* \"#utility.yul\":651:653 */\n tag_186:\n /* \"#utility.yul\":749:758 */\n dup6\n /* \"#utility.yul\":736:759 */\n calldataload\n /* \"#utility.yul\":768:801 */\n tag_187\n /* \"#utility.yul\":795:800 */\n dup2\n /* \"#utility.yul\":768:801 */\n tag_188\n jump\t// in\n tag_187:\n /* \"#utility.yul\":820:825 */\n swap5\n pop\n /* \"#utility.yul\":877:879 */\n 0x20\n /* \"#utility.yul\":862:880 */\n dup7\n add\n /* \"#utility.yul\":849:881 */\n calldataload\n /* \"#utility.yul\":890:925 */\n tag_189\n /* \"#utility.yul\":849:881 */\n dup2\n /* \"#utility.yul\":890:925 */\n tag_188\n jump\t// in\n tag_189:\n /* \"#utility.yul\":944:951 */\n swap4\n pop\n /* \"#utility.yul\":1003:1005 */\n 0x40\n /* \"#utility.yul\":988:1006 */\n dup7\n add\n /* \"#utility.yul\":975:1007 */\n calldataload\n /* \"#utility.yul\":1051:1059 */\n 0xffffff\n /* \"#utility.yul\":1038:1060 */\n dup2\n and\n /* \"#utility.yul\":1026:1061 */\n dup2\n eq\n /* \"#utility.yul\":1016:1018 */\n tag_190\n jumpi\n /* \"#utility.yul\":1080:1086 */\n dup2\n /* \"#utility.yul\":1072:1078 */\n dup3\n /* \"#utility.yul\":1065:1087 */\n revert\n /* \"#utility.yul\":1016:1018 */\n tag_190:\n /* \"#utility.yul\":1108:1115 */\n swap3\n pop\n /* \"#utility.yul\":1162:1164 */\n 0x60\n /* \"#utility.yul\":1147:1165 */\n dup7\n add\n /* \"#utility.yul\":1134:1166 */\n calldataload\n swap2\n pop\n /* \"#utility.yul\":1218:1221 */\n 0x80\n /* \"#utility.yul\":1203:1222 */\n dup7\n add\n /* \"#utility.yul\":1190:1223 */\n calldataload\n /* \"#utility.yul\":1232:1267 */\n tag_191\n /* \"#utility.yul\":1190:1223 */\n dup2\n /* \"#utility.yul\":1232:1267 */\n tag_188\n jump\t// in\n tag_191:\n /* \"#utility.yul\":1286:1293 */\n dup1\n /* \"#utility.yul\":1276:1293 */\n swap2\n pop\n pop\n /* \"#utility.yul\":641:1299 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":1304:1714 */\n tag_13:\n 0x00\n dup1\n /* \"#utility.yul\":1442:1444 */\n 0x40\n /* \"#utility.yul\":1430:1439 */\n dup4\n /* \"#utility.yul\":1421:1428 */\n dup6\n /* \"#utility.yul\":1417:1440 */\n sub\n /* \"#utility.yul\":1413:1445 */\n slt\n /* \"#utility.yul\":1410:1412 */\n iszero\n tag_193\n jumpi\n /* \"#utility.yul\":1463:1469 */\n dup2\n /* \"#utility.yul\":1455:1461 */\n dup3\n /* \"#utility.yul\":1448:1470 */\n revert\n /* \"#utility.yul\":1410:1412 */\n tag_193:\n /* \"#utility.yul\":1508:1517 */\n dup3\n /* \"#utility.yul\":1495:1518 */\n calldataload\n /* \"#utility.yul\":1541:1559 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1533:1539 */\n dup2\n /* \"#utility.yul\":1530:1560 */\n gt\n /* \"#utility.yul\":1527:1529 */\n iszero\n tag_194\n jumpi\n /* \"#utility.yul\":1578:1584 */\n dup3\n /* \"#utility.yul\":1570:1576 */\n dup4\n /* \"#utility.yul\":1563:1585 */\n revert\n /* \"#utility.yul\":1527:1529 */\n tag_194:\n /* \"#utility.yul\":1606:1657 */\n tag_195\n /* \"#utility.yul\":1649:1656 */\n dup6\n /* \"#utility.yul\":1640:1646 */\n dup3\n /* \"#utility.yul\":1629:1638 */\n dup7\n /* \"#utility.yul\":1625:1647 */\n add\n /* \"#utility.yul\":1606:1657 */\n tag_177\n jump\t// in\n tag_195:\n /* \"#utility.yul\":1596:1657 */\n swap6\n /* \"#utility.yul\":1704:1706 */\n 0x20\n /* \"#utility.yul\":1689:1707 */\n swap5\n swap1\n swap5\n add\n /* \"#utility.yul\":1676:1708 */\n calldataload\n swap5\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":1400:1714 */\n jump\t// out\n /* \"#utility.yul\":1719:1972 */\n tag_70:\n 0x00\n dup1\n /* \"#utility.yul\":1857:1859 */\n 0x40\n /* \"#utility.yul\":1845:1854 */\n dup4\n /* \"#utility.yul\":1836:1843 */\n dup6\n /* \"#utility.yul\":1832:1855 */\n sub\n /* \"#utility.yul\":1828:1860 */\n slt\n /* \"#utility.yul\":1825:1827 */\n iszero\n tag_197\n jumpi\n /* \"#utility.yul\":1878:1884 */\n dup2\n /* \"#utility.yul\":1870:1876 */\n dup3\n /* \"#utility.yul\":1863:1885 */\n revert\n /* \"#utility.yul\":1825:1827 */\n tag_197:\n pop\n pop\n /* \"#utility.yul\":1906:1922 */\n dup1\n mload\n /* \"#utility.yul\":1962:1964 */\n 0x20\n /* \"#utility.yul\":1947:1965 */\n swap1\n swap2\n add\n /* \"#utility.yul\":1941:1966 */\n mload\n /* \"#utility.yul\":1906:1922 */\n swap1\n swap3\n /* \"#utility.yul\":1941:1966 */\n swap1\n swap2\n pop\n /* \"#utility.yul\":1815:1972 */\n jump\t// out\n /* \"#utility.yul\":1977:2453 */\n tag_39:\n 0x00\n dup1\n 0x00\n /* \"#utility.yul\":2130:2132 */\n 0x60\n /* \"#utility.yul\":2118:2127 */\n dup5\n /* \"#utility.yul\":2109:2116 */\n dup7\n /* \"#utility.yul\":2105:2128 */\n sub\n /* \"#utility.yul\":2101:2133 */\n slt\n /* \"#utility.yul\":2098:2100 */\n iszero\n tag_199\n jumpi\n /* \"#utility.yul\":2151:2157 */\n dup3\n /* \"#utility.yul\":2143:2149 */\n dup4\n /* \"#utility.yul\":2136:2158 */\n revert\n /* \"#utility.yul\":2098:2100 */\n tag_199:\n /* \"#utility.yul\":2192:2201 */\n dup4\n /* \"#utility.yul\":2179:2202 */\n calldataload\n /* \"#utility.yul\":2169:2202 */\n swap3\n pop\n /* \"#utility.yul\":2249:2251 */\n 0x20\n /* \"#utility.yul\":2238:2247 */\n dup5\n /* \"#utility.yul\":2234:2252 */\n add\n /* \"#utility.yul\":2221:2253 */\n calldataload\n /* \"#utility.yul\":2211:2253 */\n swap2\n pop\n /* \"#utility.yul\":2304:2306 */\n 0x40\n /* \"#utility.yul\":2293:2302 */\n dup5\n /* \"#utility.yul\":2289:2307 */\n add\n /* \"#utility.yul\":2276:2308 */\n calldataload\n /* \"#utility.yul\":2331:2349 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2323:2329 */\n dup2\n /* \"#utility.yul\":2320:2350 */\n gt\n /* \"#utility.yul\":2317:2319 */\n iszero\n tag_200\n jumpi\n /* \"#utility.yul\":2368:2374 */\n dup2\n /* \"#utility.yul\":2360:2366 */\n dup3\n /* \"#utility.yul\":2353:2375 */\n revert\n /* \"#utility.yul\":2317:2319 */\n tag_200:\n /* \"#utility.yul\":2396:2447 */\n tag_201\n /* \"#utility.yul\":2439:2446 */\n dup7\n /* \"#utility.yul\":2430:2436 */\n dup3\n /* \"#utility.yul\":2419:2428 */\n dup8\n /* \"#utility.yul\":2415:2437 */\n add\n /* \"#utility.yul\":2396:2447 */\n tag_177\n jump\t// in\n tag_201:\n /* \"#utility.yul\":2386:2447 */\n swap2\n pop\n pop\n /* \"#utility.yul\":2088:2453 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":2458:3134 */\n tag_143:\n 0x00\n /* \"#utility.yul\":2591:2593 */\n 0x20\n /* \"#utility.yul\":2579:2588 */\n dup3\n /* \"#utility.yul\":2570:2577 */\n dup5\n /* \"#utility.yul\":2566:2589 */\n sub\n /* \"#utility.yul\":2562:2594 */\n slt\n /* \"#utility.yul\":2559:2561 */\n iszero\n tag_203\n jumpi\n /* \"#utility.yul\":2612:2618 */\n dup1\n /* \"#utility.yul\":2604:2610 */\n dup2\n /* \"#utility.yul\":2597:2619 */\n revert\n /* \"#utility.yul\":2559:2561 */\n tag_203:\n /* \"#utility.yul\":2650:2659 */\n dup2\n /* \"#utility.yul\":2644:2660 */\n mload\n /* \"#utility.yul\":2683:2701 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2675:2681 */\n dup2\n /* \"#utility.yul\":2672:2702 */\n gt\n /* \"#utility.yul\":2669:2671 */\n iszero\n tag_204\n jumpi\n /* \"#utility.yul\":2720:2726 */\n dup2\n /* \"#utility.yul\":2712:2718 */\n dup3\n /* \"#utility.yul\":2705:2727 */\n revert\n /* \"#utility.yul\":2669:2671 */\n tag_204:\n /* \"#utility.yul\":2748:2770 */\n dup3\n add\n /* \"#utility.yul\":2801:2805 */\n 0x1f\n /* \"#utility.yul\":2793:2806 */\n dup2\n add\n /* \"#utility.yul\":2789:2816 */\n dup5\n sgt\n /* \"#utility.yul\":2779:2781 */\n tag_205\n jumpi\n /* \"#utility.yul\":2835:2841 */\n dup2\n /* \"#utility.yul\":2827:2833 */\n dup3\n /* \"#utility.yul\":2820:2842 */\n revert\n /* \"#utility.yul\":2779:2781 */\n tag_205:\n /* \"#utility.yul\":2869:2871 */\n dup1\n /* \"#utility.yul\":2863:2872 */\n mload\n /* \"#utility.yul\":2894:2943 */\n tag_206\n /* \"#utility.yul\":2909:2942 */\n tag_181\n /* \"#utility.yul\":2939:2941 */\n dup3\n /* \"#utility.yul\":2909:2942 */\n tag_182\n jump\t// in\n /* \"#utility.yul\":2894:2943 */\n tag_206:\n /* \"#utility.yul\":2966:2968 */\n dup2\n /* \"#utility.yul\":2959:2964 */\n dup2\n /* \"#utility.yul\":2952:2969 */\n mstore\n /* \"#utility.yul\":3006:3013 */\n dup6\n /* \"#utility.yul\":3001:3003 */\n 0x20\n /* \"#utility.yul\":2996:2998 */\n dup4\n /* \"#utility.yul\":2992:2994 */\n dup6\n /* \"#utility.yul\":2988:2999 */\n add\n /* \"#utility.yul\":2984:3004 */\n add\n /* \"#utility.yul\":2981:3014 */\n gt\n /* \"#utility.yul\":2978:2980 */\n iszero\n tag_208\n jumpi\n /* \"#utility.yul\":3032:3038 */\n dup4\n /* \"#utility.yul\":3024:3030 */\n dup5\n /* \"#utility.yul\":3017:3039 */\n revert\n /* \"#utility.yul\":2978:2980 */\n tag_208:\n /* \"#utility.yul\":3050:3104 */\n tag_53\n /* \"#utility.yul\":3101:3103 */\n dup3\n /* \"#utility.yul\":3096:3098 */\n 0x20\n /* \"#utility.yul\":3089:3094 */\n dup4\n /* \"#utility.yul\":3085:3099 */\n add\n /* \"#utility.yul\":3080:3082 */\n 0x20\n /* \"#utility.yul\":3076:3078 */\n dup7\n /* \"#utility.yul\":3072:3083 */\n add\n /* \"#utility.yul\":3050:3104 */\n tag_210\n jump\t// in\n /* \"#utility.yul\":3139:3333 */\n tag_147:\n 0x00\n /* \"#utility.yul\":3262:3264 */\n 0x20\n /* \"#utility.yul\":3250:3259 */\n dup3\n /* \"#utility.yul\":3241:3248 */\n dup5\n /* \"#utility.yul\":3237:3260 */\n sub\n /* \"#utility.yul\":3233:3265 */\n slt\n /* \"#utility.yul\":3230:3232 */\n iszero\n tag_212\n jumpi\n /* \"#utility.yul\":3283:3289 */\n dup1\n /* \"#utility.yul\":3275:3281 */\n dup2\n /* \"#utility.yul\":3268:3290 */\n revert\n /* \"#utility.yul\":3230:3232 */\n tag_212:\n pop\n /* \"#utility.yul\":3311:3327 */\n mload\n swap2\n /* \"#utility.yul\":3220:3333 */\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3338:3656 */\n tag_213:\n 0x00\n /* \"#utility.yul\":3419:3424 */\n dup2\n /* \"#utility.yul\":3413:3425 */\n mload\n /* \"#utility.yul\":3446:3452 */\n dup1\n /* \"#utility.yul\":3441:3444 */\n dup5\n /* \"#utility.yul\":3434:3453 */\n mstore\n /* \"#utility.yul\":3462:3525 */\n tag_215\n /* \"#utility.yul\":3518:3524 */\n dup2\n /* \"#utility.yul\":3511:3515 */\n 0x20\n /* \"#utility.yul\":3506:3509 */\n dup7\n /* \"#utility.yul\":3502:3516 */\n add\n /* \"#utility.yul\":3495:3499 */\n 0x20\n /* \"#utility.yul\":3488:3493 */\n dup7\n /* \"#utility.yul\":3484:3500 */\n add\n /* \"#utility.yul\":3462:3525 */\n tag_210\n jump\t// in\n tag_215:\n /* \"#utility.yul\":3570:3572 */\n 0x1f\n /* \"#utility.yul\":3558:3573 */\n add\n /* \"#utility.yul\":3575:3641 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n /* \"#utility.yul\":3554:3642 */\n and\n /* \"#utility.yul\":3545:3643 */\n swap3\n swap1\n swap3\n add\n /* \"#utility.yul\":3645:3649 */\n 0x20\n /* \"#utility.yul\":3541:3650 */\n add\n swap3\n /* \"#utility.yul\":3389:3656 */\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3661:4175 */\n tag_64:\n /* \"#utility.yul\":3949:3951 */\n 0x60\n /* \"#utility.yul\":3945:3960 */\n swap4\n dup5\n shl\n /* \"#utility.yul\":3854:3920 */\n 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n /* \"#utility.yul\":3941:3965 */\n swap1\n dup2\n and\n /* \"#utility.yul\":3929:3966 */\n dup3\n mstore\n /* \"#utility.yul\":4004:4007 */\n 0xe8\n /* \"#utility.yul\":4000:4016 */\n swap4\n swap1\n swap4\n shl\n /* \"#utility.yul\":4018:4084 */\n 0xffffff0000000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":3996:4085 */\n and\n /* \"#utility.yul\":3991:3993 */\n 0x14\n /* \"#utility.yul\":3982:3994 */\n dup3\n add\n /* \"#utility.yul\":3975:4086 */\n mstore\n /* \"#utility.yul\":4120:4135 */\n swap3\n shl\n /* \"#utility.yul\":4116:4140 */\n and\n /* \"#utility.yul\":4111:4113 */\n 0x17\n /* \"#utility.yul\":4102:4114 */\n dup3\n add\n /* \"#utility.yul\":4095:4141 */\n mstore\n /* \"#utility.yul\":4166:4168 */\n 0x2b\n /* \"#utility.yul\":4157:4169 */\n add\n swap1\n /* \"#utility.yul\":3834:4175 */\n jump\t// out\n /* \"#utility.yul\":4180:4406 */\n tag_25:\n /* \"#utility.yul\":4356:4398 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":4344:4399 */\n swap2\n swap1\n swap2\n and\n /* \"#utility.yul\":4326:4400 */\n dup2\n mstore\n /* \"#utility.yul\":4314:4316 */\n 0x20\n /* \"#utility.yul\":4299:4317 */\n add\n swap1\n /* \"#utility.yul\":4281:4406 */\n jump\t// out\n /* \"#utility.yul\":4411:5004 */\n tag_66:\n 0x00\n /* \"#utility.yul\":4654:4696 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":4735:4737 */\n dup1\n /* \"#utility.yul\":4727:4733 */\n dup9\n /* \"#utility.yul\":4723:4738 */\n and\n /* \"#utility.yul\":4712:4721 */\n dup4\n /* \"#utility.yul\":4705:4739 */\n mstore\n /* \"#utility.yul\":4789:4795 */\n dup7\n /* \"#utility.yul\":4782:4796 */\n iszero\n /* \"#utility.yul\":4775:4797 */\n iszero\n /* \"#utility.yul\":4770:4772 */\n 0x20\n /* \"#utility.yul\":4759:4768 */\n dup5\n /* \"#utility.yul\":4755:4773 */\n add\n /* \"#utility.yul\":4748:4798 */\n mstore\n /* \"#utility.yul\":4834:4840 */\n dup6\n /* \"#utility.yul\":4829:4831 */\n 0x40\n /* \"#utility.yul\":4818:4827 */\n dup5\n /* \"#utility.yul\":4814:4832 */\n add\n /* \"#utility.yul\":4807:4841 */\n mstore\n /* \"#utility.yul\":4889:4891 */\n dup1\n /* \"#utility.yul\":4881:4887 */\n dup6\n /* \"#utility.yul\":4877:4892 */\n and\n /* \"#utility.yul\":4872:4874 */\n 0x60\n /* \"#utility.yul\":4861:4870 */\n dup5\n /* \"#utility.yul\":4857:4875 */\n add\n /* \"#utility.yul\":4850:4893 */\n mstore\n pop\n /* \"#utility.yul\":4930:4933 */\n 0xa0\n /* \"#utility.yul\":4924:4927 */\n 0x80\n /* \"#utility.yul\":4913:4922 */\n dup4\n /* \"#utility.yul\":4909:4928 */\n add\n /* \"#utility.yul\":4902:4934 */\n mstore\n /* \"#utility.yul\":4951:4998 */\n tag_219\n /* \"#utility.yul\":4993:4996 */\n 0xa0\n /* \"#utility.yul\":4982:4991 */\n dup4\n /* \"#utility.yul\":4978:4997 */\n add\n /* \"#utility.yul\":4970:4976 */\n dup5\n /* \"#utility.yul\":4951:4998 */\n tag_213\n jump\t// in\n tag_219:\n /* \"#utility.yul\":4943:4998 */\n swap8\n /* \"#utility.yul\":4634:5004 */\n swap7\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5009:5230 */\n tag_145:\n 0x00\n /* \"#utility.yul\":5158:5160 */\n 0x20\n /* \"#utility.yul\":5147:5156 */\n dup3\n /* \"#utility.yul\":5140:5161 */\n mstore\n /* \"#utility.yul\":5178:5224 */\n tag_221\n /* \"#utility.yul\":5220:5222 */\n 0x20\n /* \"#utility.yul\":5209:5218 */\n dup4\n /* \"#utility.yul\":5205:5223 */\n add\n /* \"#utility.yul\":5197:5203 */\n dup5\n /* \"#utility.yul\":5178:5224 */\n tag_213\n jump\t// in\n tag_221:\n /* \"#utility.yul\":5170:5224 */\n swap4\n /* \"#utility.yul\":5130:5230 */\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5235:5575 */\n tag_141:\n /* \"#utility.yul\":5437:5439 */\n 0x20\n /* \"#utility.yul\":5419:5440 */\n dup1\n dup3\n mstore\n /* \"#utility.yul\":5476:5478 */\n 0x10\n /* \"#utility.yul\":5456:5474 */\n swap1\n dup3\n add\n /* \"#utility.yul\":5449:5479 */\n mstore\n /* \"#utility.yul\":5515:5533 */\n 0x556e6578706563746564206572726f7200000000000000000000000000000000\n /* \"#utility.yul\":5510:5512 */\n 0x40\n /* \"#utility.yul\":5495:5513 */\n dup3\n add\n /* \"#utility.yul\":5488:5534 */\n mstore\n /* \"#utility.yul\":5566:5568 */\n 0x60\n /* \"#utility.yul\":5551:5569 */\n add\n swap1\n /* \"#utility.yul\":5409:5575 */\n jump\t// out\n /* \"#utility.yul\":5580:5757 */\n tag_16:\n /* \"#utility.yul\":5726:5751 */\n swap1\n dup2\n mstore\n /* \"#utility.yul\":5714:5716 */\n 0x20\n /* \"#utility.yul\":5699:5717 */\n add\n swap1\n /* \"#utility.yul\":5681:5757 */\n jump\t// out\n /* \"#utility.yul\":5762:6004 */\n tag_183:\n /* \"#utility.yul\":5832:5834 */\n 0x40\n /* \"#utility.yul\":5826:5835 */\n mload\n /* \"#utility.yul\":5862:5879 */\n dup2\n dup2\n add\n /* \"#utility.yul\":5909:5927 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5894:5928 */\n dup2\n gt\n /* \"#utility.yul\":5930:5952 */\n dup3\n dup3\n lt\n /* \"#utility.yul\":5891:5953 */\n or\n /* \"#utility.yul\":5888:5890 */\n iszero\n tag_225\n jumpi\n /* \"#utility.yul\":5956:5965 */\n invalid\n /* \"#utility.yul\":5888:5890 */\n tag_225:\n /* \"#utility.yul\":5983:5985 */\n 0x40\n /* \"#utility.yul\":5976:5998 */\n mstore\n /* \"#utility.yul\":5806:6004 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6009:6249 */\n tag_182:\n 0x00\n /* \"#utility.yul\":6092:6110 */\n 0xffffffffffffffff\n /* \"#utility.yul\":6084:6090 */\n dup3\n /* \"#utility.yul\":6081:6111 */\n gt\n /* \"#utility.yul\":6078:6080 */\n iszero\n tag_227\n jumpi\n /* \"#utility.yul\":6114:6123 */\n invalid\n /* \"#utility.yul\":6078:6080 */\n tag_227:\n pop\n /* \"#utility.yul\":6162:6166 */\n 0x1f\n /* \"#utility.yul\":6150:6167 */\n add\n /* \"#utility.yul\":6169:6235 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n /* \"#utility.yul\":6146:6236 */\n and\n /* \"#utility.yul\":6238:6242 */\n 0x20\n /* \"#utility.yul\":6142:6243 */\n add\n swap1\n /* \"#utility.yul\":6068:6249 */\n jump\t// out\n /* \"#utility.yul\":6254:6512 */\n tag_210:\n /* \"#utility.yul\":6326:6327 */\n 0x00\n /* \"#utility.yul\":6336:6449 */\n tag_229:\n /* \"#utility.yul\":6350:6356 */\n dup4\n /* \"#utility.yul\":6347:6348 */\n dup2\n /* \"#utility.yul\":6344:6357 */\n lt\n /* \"#utility.yul\":6336:6449 */\n iszero\n tag_231\n jumpi\n /* \"#utility.yul\":6426:6437 */\n dup2\n dup2\n add\n /* \"#utility.yul\":6420:6438 */\n mload\n /* \"#utility.yul\":6407:6418 */\n dup4\n dup3\n add\n /* \"#utility.yul\":6400:6439 */\n mstore\n /* \"#utility.yul\":6372:6374 */\n 0x20\n /* \"#utility.yul\":6365:6375 */\n add\n /* \"#utility.yul\":6336:6449 */\n jump(tag_229)\n tag_231:\n /* \"#utility.yul\":6467:6473 */\n dup4\n /* \"#utility.yul\":6464:6465 */\n dup2\n /* \"#utility.yul\":6461:6474 */\n gt\n /* \"#utility.yul\":6458:6460 */\n iszero\n tag_232\n jumpi\n /* \"#utility.yul\":6502:6503 */\n 0x00\n /* \"#utility.yul\":6493:6499 */\n dup5\n /* \"#utility.yul\":6488:6491 */\n dup5\n /* \"#utility.yul\":6484:6500 */\n add\n /* \"#utility.yul\":6477:6504 */\n mstore\n /* \"#utility.yul\":6458:6460 */\n tag_232:\n pop\n /* \"#utility.yul\":6307:6512 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6517:6673 */\n tag_188:\n /* \"#utility.yul\":6605:6647 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":6598:6603 */\n dup2\n /* \"#utility.yul\":6594:6648 */\n and\n /* \"#utility.yul\":6587:6592 */\n dup2\n /* \"#utility.yul\":6584:6649 */\n eq\n /* \"#utility.yul\":6574:6576 */\n tag_234\n jumpi\n /* \"#utility.yul\":6663:6664 */\n 0x00\n /* \"#utility.yul\":6660:6661 */\n dup1\n /* \"#utility.yul\":6653:6665 */\n revert\n /* \"#utility.yul\":6574:6576 */\n tag_234:\n /* \"#utility.yul\":6564:6673 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212204ba294eca0a366d4d8601eaa80323cb403aa01c4f4d2454757678b73f2acd97c64736f6c63430007060033\n}\n",
"bytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:507:18",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:18",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "76:117:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "86:22:18",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "101:6:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "95:5:18"
},
"nodeType": "YulFunctionCall",
"src": "95:13:18"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "86:5:18"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "171:16:18",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "180:1:18",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "183:1:18",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "173:6:18"
},
"nodeType": "YulFunctionCall",
"src": "173:12:18"
},
"nodeType": "YulExpressionStatement",
"src": "173:12:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "130:5:18"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "141:5:18"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "156:3:18",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "161:1:18",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "152:3:18"
},
"nodeType": "YulFunctionCall",
"src": "152:11:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "165:1:18",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "148:3:18"
},
"nodeType": "YulFunctionCall",
"src": "148:19:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "137:3:18"
},
"nodeType": "YulFunctionCall",
"src": "137:31:18"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "127:2:18"
},
"nodeType": "YulFunctionCall",
"src": "127:42:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "120:6:18"
},
"nodeType": "YulFunctionCall",
"src": "120:50:18"
},
"nodeType": "YulIf",
"src": "117:2:18"
}
]
},
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "55:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "66:5:18",
"type": ""
}
],
"src": "14:179:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "296:209:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "342:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "351:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "359:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "344:6:18"
},
"nodeType": "YulFunctionCall",
"src": "344:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "344:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "317:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "326:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "313:3:18"
},
"nodeType": "YulFunctionCall",
"src": "313:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "338:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "309:3:18"
},
"nodeType": "YulFunctionCall",
"src": "309:32:18"
},
"nodeType": "YulIf",
"src": "306:2:18"
},
{
"nodeType": "YulAssignment",
"src": "377:52:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "419:9:18"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "387:31:18"
},
"nodeType": "YulFunctionCall",
"src": "387:42:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "377:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "438:61:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "484:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "495:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "480:3:18"
},
"nodeType": "YulFunctionCall",
"src": "480:18:18"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "448:31:18"
},
"nodeType": "YulFunctionCall",
"src": "448:51:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "438:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "254:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "265:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "277:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "285:6:18",
"type": ""
}
],
"src": "198:307:18"
}
]
},
"contents": "{\n { }\n function abi_decode_t_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := abi_decode_t_address_fromMemory(headStart)\n value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n }\n}",
"id": 18,
"language": "Yul",
"name": "#utility.yul"
}
],
"linkReferences": {},
"object": "60c060405234801561001057600080fd5b5060405161130e38038061130e83398101604081905261002f91610069565b6001600160601b0319606092831b8116608052911b1660a05261009b565b80516001600160a01b038116811461006457600080fd5b919050565b6000806040838503121561007b578182fd5b6100848361004d565b91506100926020840161004d565b90509250929050565b60805160601c60a05160601c6112406100ce60003980610342525080610366528061058652806106d552506112406000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100d3578063cdca1753146100db578063f7729d43146100ee578063fa461e33146101015761007d565b80632f80bb1d1461008257806330d07f21146100ab5780634aa4a4fc146100be575b600080fd5b610095610090366004610e9e565b610116565b6040516100a29190611148565b60405180910390f35b6100956100b9366004610e30565b61017b565b6100c6610340565b6040516100a29190611084565b6100c6610364565b6100956100e9366004610e9e565b610388565b6100956100fc366004610e30565b6103d6565b61011461010f366004610f04565b610555565b005b60005b600061012484610660565b9050600080600061013487610668565b92509250925061014882848389600061017b565b955083156101605761015987610699565b965061016c565b85945050505050610175565b50505050610119565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff808616878216109083166101a65760008490555b6101b18787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836101d78861070c565b60000373ffffffffffffffffffffffffffffffffffffffff8816156101fc5787610222565b8561021b5773fffd8963efd1fc6a506488495d951d5263988d25610222565b6401000276a45b8b8b8e6040516020016102379392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016102669594939291906110a5565b6040805180830381600087803b15801561027f57600080fd5b505af19250505080156102cd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526102ca91810190610ee1565b60015b610333573d8080156102fb576040519150601f19603f3d011682016040523d82523d6000602084013e610300565b606091505b5073ffffffffffffffffffffffffffffffffffffffff841661032157600080555b61032a8161073e565b92505050610337565b5050505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b600061039684610660565b905060008060006103a687610668565b9250925092506103ba8383838960006103d6565b95508315610160576103cb87610699565b96505050505061038b565b600073ffffffffffffffffffffffffffffffffffffffff808616908716106103ff8787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836104258861070c565b73ffffffffffffffffffffffffffffffffffffffff881615610447578761046d565b856104665773fffd8963efd1fc6a506488495d951d5263988d2561046d565b6401000276a45b8c8b8d6040516020016104829392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016104b19594939291906110a5565b6040805180830381600087803b1580156104ca57600080fd5b505af1925050508015610518575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261051591810190610ee1565b60015b610333573d808015610546576040519150601f19603f3d011682016040523d82523d6000602084013e61054b565b606091505b5061032a8161073e565b60008313806105645750600082135b61056d57600080fd5b600080600061057b84610668565b9250925092506105ad7f00000000000000000000000000000000000000000000000000000000000000008484846107ef565b5060008060008089136105f3578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a600003610628565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250821561063f57604051818152602081fd5b6000541561065557600054811461065557600080fd5b604051828152602081fd5b516042111590565b600080806106768482610805565b9250610683846014610905565b9050610690846017610805565b91509193909250565b80516060906101759083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016109f5565b60006107047f00000000000000000000000000000000000000000000000000000000000000006106ff868686610bdc565b610c59565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061073a57600080fd5b5090565b600081516020146107db5760448251101561078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590611111565b60405180910390fd5b600482019150818060200190518101906107a89190610f52565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078591906110f7565b818060200190518101906101759190610fbc565b600061033785610800868686610bdc565b610d8f565b60008182601401101561087957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b81601401835110156108ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561097957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600301835110156109ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610a6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610ada57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015610b4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015610b6b5760405191506000825260208201604052610bd3565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610ba4578051835260209283019201610b8c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610be4610dbf565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610c1c579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c9b57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6000610d9b8383610c59565b90503373ffffffffffffffffffffffffffffffffffffffff82161461017557600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610def578081fd5b8135610e02610dfd82611175565b611151565b818152846020838601011115610e16578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a08688031215610e47578081fd5b8535610e52816111e5565b94506020860135610e62816111e5565b9350604086013562ffffff81168114610e79578182fd5b9250606086013591506080860135610e90816111e5565b809150509295509295909350565b60008060408385031215610eb0578182fd5b823567ffffffffffffffff811115610ec6578283fd5b610ed285828601610ddf565b95602094909401359450505050565b60008060408385031215610ef3578182fd5b505080516020909101519092909150565b600080600060608486031215610f18578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610f3c578182fd5b610f4886828701610ddf565b9150509250925092565b600060208284031215610f63578081fd5b815167ffffffffffffffff811115610f79578182fd5b8201601f81018413610f89578182fd5b8051610f97610dfd82611175565b818152856020838501011115610fab578384fd5b6103378260208301602086016111b5565b600060208284031215610fcd578081fd5b5051919050565b60008151808452610fec8160208601602086016111b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526110ec60a0830184610fd4565b979650505050505050565b60006020825261110a6020830184610fd4565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156111d05781810151838201526020016111b8565b838111156111df576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461120757600080fd5b5056fea26469706673582212204ba294eca0a366d4d8601eaa80323cb403aa01c4f4d2454757678b73f2acd97c64736f6c63430007060033",
"opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x130E CODESIZE SUB DUP1 PUSH2 0x130E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH2 0x9B JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x84 DUP4 PUSH2 0x4D JUMP JUMPDEST SWAP2 POP PUSH2 0x92 PUSH1 0x20 DUP5 ADD PUSH2 0x4D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x1240 PUSH2 0xCE PUSH1 0x0 CODECOPY DUP1 PUSH2 0x342 MSTORE POP DUP1 PUSH2 0x366 MSTORE DUP1 PUSH2 0x586 MSTORE DUP1 PUSH2 0x6D5 MSTORE POP PUSH2 0x1240 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC45A0155 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0xF7729D43 EQ PUSH2 0xEE JUMPI DUP1 PUSH4 0xFA461E33 EQ PUSH2 0x101 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x2F80BB1D EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x30D07F21 EQ PUSH2 0xAB JUMPI DUP1 PUSH4 0x4AA4A4FC EQ PUSH2 0xBE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA2 SWAP2 SWAP1 PUSH2 0x1148 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0xB9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x17B JUMP JUMPDEST PUSH2 0xC6 PUSH2 0x340 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA2 SWAP2 SWAP1 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0xC6 PUSH2 0x364 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xE9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x388 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xFC CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x3D6 JUMP JUMPDEST PUSH2 0x114 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0xF04 JUMP JUMPDEST PUSH2 0x555 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x124 DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x134 DUP8 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x148 DUP3 DUP5 DUP4 DUP10 PUSH1 0x0 PUSH2 0x17B JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x160 JUMPI PUSH2 0x159 DUP8 PUSH2 0x699 JUMP JUMPDEST SWAP7 POP PUSH2 0x16C JUMP JUMPDEST DUP6 SWAP5 POP POP POP POP POP PUSH2 0x175 JUMP JUMPDEST POP POP POP POP PUSH2 0x119 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP8 DUP3 AND LT SWAP1 DUP4 AND PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP5 SWAP1 SSTORE JUMPDEST PUSH2 0x1B1 DUP8 DUP8 DUP8 PUSH2 0x6CE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x1D7 DUP9 PUSH2 0x70C JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x1FC JUMPI DUP8 PUSH2 0x222 JUMP JUMPDEST DUP6 PUSH2 0x21B JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x222 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP12 DUP12 DUP15 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x237 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x266 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2CD JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2CA SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x333 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x2FB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x300 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 SSTORE JUMPDEST PUSH2 0x32A DUP2 PUSH2 0x73E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x337 JUMP JUMPDEST POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x396 DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3A6 DUP8 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x3BA DUP4 DUP4 DUP4 DUP10 PUSH1 0x0 PUSH2 0x3D6 JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x160 JUMPI PUSH2 0x3CB DUP8 PUSH2 0x699 JUMP JUMPDEST SWAP7 POP POP POP POP POP PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND SWAP1 DUP8 AND LT PUSH2 0x3FF DUP8 DUP8 DUP8 PUSH2 0x6CE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x425 DUP9 PUSH2 0x70C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x447 JUMPI DUP8 PUSH2 0x46D JUMP JUMPDEST DUP6 PUSH2 0x466 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x46D JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP13 DUP12 DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x482 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4B1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x518 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x515 SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x333 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x546 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x54B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH2 0x32A DUP2 PUSH2 0x73E JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x564 JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x57B DUP5 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x5AD PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x7EF JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP10 SGT PUSH2 0x5F3 JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 DUP11 PUSH1 0x0 SUB PUSH2 0x628 JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 DUP10 PUSH1 0x0 SUB JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP3 ISZERO PUSH2 0x63F JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST PUSH1 0x0 SLOAD ISZERO PUSH2 0x655 JUMPI PUSH1 0x0 SLOAD DUP2 EQ PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x676 DUP5 DUP3 PUSH2 0x805 JUMP JUMPDEST SWAP3 POP PUSH2 0x683 DUP5 PUSH1 0x14 PUSH2 0x905 JUMP JUMPDEST SWAP1 POP PUSH2 0x690 DUP5 PUSH1 0x17 PUSH2 0x805 JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x175 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x9F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x704 PUSH32 0x0 PUSH2 0x6FF DUP7 DUP7 DUP7 PUSH2 0xBDC JUMP JUMPDEST PUSH2 0xC59 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x73A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x7DB JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x785 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x7A8 SWAP2 SWAP1 PUSH2 0xF52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x785 SWAP2 SWAP1 PUSH2 0x10F7 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x175 SWAP2 SWAP1 PUSH2 0xFBC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x337 DUP6 PUSH2 0x800 DUP7 DUP7 DUP7 PUSH2 0xBDC JUMP JUMPDEST PUSH2 0xD8F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x879 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x979 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x9EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0xA69 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0xADA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0xB4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0xB6B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0xBA4 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xB8C JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xBE4 PUSH2 0xDBF JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xC1C JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xC9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0xE34F199B19B2B4F47F68442619D555527D244F78A3297EA89325F843F87B8B54 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD9B DUP4 DUP4 PUSH2 0xC59 JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xDEF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE02 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST PUSH2 0x1151 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xE16 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xE47 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xE52 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xE62 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE79 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0xE90 DUP2 PUSH2 0x11E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEB0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEC6 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xED2 DUP6 DUP3 DUP7 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEF3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF18 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF3C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xF48 DUP7 DUP3 DUP8 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF63 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF79 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0xF89 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xF97 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0xFAB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x337 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFCD JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xFEC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x10EC PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x110A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x116D JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1189 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11DF JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B LOG2 SWAP5 0xEC LOG0 LOG3 PUSH7 0xD4D8601EAA8032 EXTCODECOPY 0xB4 SUB 0xAA ADD 0xC4 DELEGATECALL 0xD2 GASLIMIT SELFBALANCE JUMPI PUSH8 0x8B73F2ACD97C6473 PUSH16 0x6C634300070600330000000000000000 ",
"sourceMap": "875:5721:13:-:0;;;1150:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;522:18:10;;;;;;;;550:14;;;;;875:5721:13;;14:179:18;95:13;;-1:-1:-1;;;;;137:31:18;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:307::-;;;338:2;326:9;317:7;313:23;309:32;306:2;;;359:6;351;344:22;306:2;387:42;419:9;387:42;:::i;:::-;377:52;;448:51;495:2;484:9;480:18;448:51;:::i;:::-;438:61;;296:209;;;;;:::o;:::-;875:5721:13;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:6675:18",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:18",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "68:431:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "117:24:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "126:5:18"
},
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "133:5:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "119:6:18"
},
"nodeType": "YulFunctionCall",
"src": "119:20:18"
},
"nodeType": "YulExpressionStatement",
"src": "119:20:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "96:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "104:4:18",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "92:3:18"
},
"nodeType": "YulFunctionCall",
"src": "92:17:18"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "111:3:18"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "88:3:18"
},
"nodeType": "YulFunctionCall",
"src": "88:27:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "81:6:18"
},
"nodeType": "YulFunctionCall",
"src": "81:35:18"
},
"nodeType": "YulIf",
"src": "78:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "150:30:18",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "173:6:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "160:12:18"
},
"nodeType": "YulFunctionCall",
"src": "160:20:18"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "154:2:18",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "189:64:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "249:2:18"
}
],
"functionName": {
"name": "array_allocation_size_t_bytes",
"nodeType": "YulIdentifier",
"src": "219:29:18"
},
"nodeType": "YulFunctionCall",
"src": "219:33:18"
}
],
"functionName": {
"name": "allocateMemory",
"nodeType": "YulIdentifier",
"src": "204:14:18"
},
"nodeType": "YulFunctionCall",
"src": "204:49:18"
},
"variables": [
{
"name": "array_1",
"nodeType": "YulTypedName",
"src": "193:7:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "array_1",
"nodeType": "YulIdentifier",
"src": "269:7:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "278:2:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "262:6:18"
},
"nodeType": "YulFunctionCall",
"src": "262:19:18"
},
"nodeType": "YulExpressionStatement",
"src": "262:19:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "329:24:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "338:5:18"
},
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "345:5:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "331:6:18"
},
"nodeType": "YulFunctionCall",
"src": "331:20:18"
},
"nodeType": "YulExpressionStatement",
"src": "331:20:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "304:6:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "312:2:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "300:3:18"
},
"nodeType": "YulFunctionCall",
"src": "300:15:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "296:3:18"
},
"nodeType": "YulFunctionCall",
"src": "296:26:18"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "324:3:18"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "293:2:18"
},
"nodeType": "YulFunctionCall",
"src": "293:35:18"
},
"nodeType": "YulIf",
"src": "290:2:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "array_1",
"nodeType": "YulIdentifier",
"src": "379:7:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "388:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "375:3:18"
},
"nodeType": "YulFunctionCall",
"src": "375:18:18"
},
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "399:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "407:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "395:3:18"
},
"nodeType": "YulFunctionCall",
"src": "395:17:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "414:2:18"
}
],
"functionName": {
"name": "calldatacopy",
"nodeType": "YulIdentifier",
"src": "362:12:18"
},
"nodeType": "YulFunctionCall",
"src": "362:55:18"
},
"nodeType": "YulExpressionStatement",
"src": "362:55:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "array_1",
"nodeType": "YulIdentifier",
"src": "441:7:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "450:2:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "437:3:18"
},
"nodeType": "YulFunctionCall",
"src": "437:16:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "455:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "433:3:18"
},
"nodeType": "YulFunctionCall",
"src": "433:27:18"
},
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "462:5:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "426:6:18"
},
"nodeType": "YulFunctionCall",
"src": "426:42:18"
},
"nodeType": "YulExpressionStatement",
"src": "426:42:18"
},
{
"nodeType": "YulAssignment",
"src": "477:16:18",
"value": {
"name": "array_1",
"nodeType": "YulIdentifier",
"src": "486:7:18"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "477:5:18"
}
]
}
]
},
"name": "abi_decode_t_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "42:6:18",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "50:3:18",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "58:5:18",
"type": ""
}
],
"src": "14:485:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "641:658:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "688:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "697:6:18"
},
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "705:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "690:6:18"
},
"nodeType": "YulFunctionCall",
"src": "690:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "690:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "662:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "671:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "658:3:18"
},
"nodeType": "YulFunctionCall",
"src": "658:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "683:3:18",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "654:3:18"
},
"nodeType": "YulFunctionCall",
"src": "654:33:18"
},
"nodeType": "YulIf",
"src": "651:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "723:36:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "749:9:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "736:12:18"
},
"nodeType": "YulFunctionCall",
"src": "736:23:18"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "727:5:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "795:5:18"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "768:26:18"
},
"nodeType": "YulFunctionCall",
"src": "768:33:18"
},
"nodeType": "YulExpressionStatement",
"src": "768:33:18"
},
{
"nodeType": "YulAssignment",
"src": "810:15:18",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "820:5:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "810:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "834:47:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "866:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "877:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "862:3:18"
},
"nodeType": "YulFunctionCall",
"src": "862:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "849:12:18"
},
"nodeType": "YulFunctionCall",
"src": "849:32:18"
},
"variables": [
{
"name": "value_1",
"nodeType": "YulTypedName",
"src": "838:7:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "917:7:18"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "890:26:18"
},
"nodeType": "YulFunctionCall",
"src": "890:35:18"
},
"nodeType": "YulExpressionStatement",
"src": "890:35:18"
},
{
"nodeType": "YulAssignment",
"src": "934:17:18",
"value": {
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "944:7:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "934:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "960:47:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "992:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1003:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "988:3:18"
},
"nodeType": "YulFunctionCall",
"src": "988:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "975:12:18"
},
"nodeType": "YulFunctionCall",
"src": "975:32:18"
},
"variables": [
{
"name": "value_2",
"nodeType": "YulTypedName",
"src": "964:7:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1063:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "1072:6:18"
},
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "1080:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1065:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1065:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "1065:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value_2",
"nodeType": "YulIdentifier",
"src": "1029:7:18"
},
{
"arguments": [
{
"name": "value_2",
"nodeType": "YulIdentifier",
"src": "1042:7:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1051:8:18",
"type": "",
"value": "0xffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "1038:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1038:22:18"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "1026:2:18"
},
"nodeType": "YulFunctionCall",
"src": "1026:35:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1019:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1019:43:18"
},
"nodeType": "YulIf",
"src": "1016:2:18"
},
{
"nodeType": "YulAssignment",
"src": "1098:17:18",
"value": {
"name": "value_2",
"nodeType": "YulIdentifier",
"src": "1108:7:18"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1098:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1124:42:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1151:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1162:2:18",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1147:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1147:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1134:12:18"
},
"nodeType": "YulFunctionCall",
"src": "1134:32:18"
},
"variableNames": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "1124:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "1175:48:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1207:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1218:3:18",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1203:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1203:19:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1190:12:18"
},
"nodeType": "YulFunctionCall",
"src": "1190:33:18"
},
"variables": [
{
"name": "value_3",
"nodeType": "YulTypedName",
"src": "1179:7:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value_3",
"nodeType": "YulIdentifier",
"src": "1259:7:18"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "1232:26:18"
},
"nodeType": "YulFunctionCall",
"src": "1232:35:18"
},
"nodeType": "YulExpressionStatement",
"src": "1232:35:18"
},
{
"nodeType": "YulAssignment",
"src": "1276:17:18",
"value": {
"name": "value_3",
"nodeType": "YulIdentifier",
"src": "1286:7:18"
},
"variableNames": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "1276:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint24t_uint256t_uint160",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "575:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "586:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "598:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "606:6:18",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "614:6:18",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "622:6:18",
"type": ""
},
{
"name": "value4",
"nodeType": "YulTypedName",
"src": "630:6:18",
"type": ""
}
],
"src": "504:795:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1400:314:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1446:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1455:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1463:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1448:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1448:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "1448:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1421:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1430:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1417:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1417:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1442:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1413:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1413:32:18"
},
"nodeType": "YulIf",
"src": "1410:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "1481:37:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1508:9:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1495:12:18"
},
"nodeType": "YulFunctionCall",
"src": "1495:23:18"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1485:6:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1561:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1570:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1578:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1563:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1563:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "1563:22:18"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1533:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1541:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "1530:2:18"
},
"nodeType": "YulFunctionCall",
"src": "1530:30:18"
},
"nodeType": "YulIf",
"src": "1527:2:18"
},
{
"nodeType": "YulAssignment",
"src": "1596:61:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1629:9:18"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1640:6:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1625:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1625:22:18"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1649:7:18"
}
],
"functionName": {
"name": "abi_decode_t_bytes",
"nodeType": "YulIdentifier",
"src": "1606:18:18"
},
"nodeType": "YulFunctionCall",
"src": "1606:51:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1596:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1666:42:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1693:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1704:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1689:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1689:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1676:12:18"
},
"nodeType": "YulFunctionCall",
"src": "1676:32:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1666:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes_memory_ptrt_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1358:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1369:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1381:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1389:6:18",
"type": ""
}
],
"src": "1304:410:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1815:157:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1861:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1870:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1878:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1863:6:18"
},
"nodeType": "YulFunctionCall",
"src": "1863:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "1863:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1836:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1845:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1832:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1832:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1857:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1828:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1828:32:18"
},
"nodeType": "YulIf",
"src": "1825:2:18"
},
{
"nodeType": "YulAssignment",
"src": "1896:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1912:9:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "1906:5:18"
},
"nodeType": "YulFunctionCall",
"src": "1906:16:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1896:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1931:35:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1951:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1962:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1947:3:18"
},
"nodeType": "YulFunctionCall",
"src": "1947:18:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "1941:5:18"
},
"nodeType": "YulFunctionCall",
"src": "1941:25:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1931:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_int256t_int256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1773:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1784:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1796:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1804:6:18",
"type": ""
}
],
"src": "1719:253:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2088:365:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2134:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2143:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2151:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2136:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2136:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2136:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2109:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2118:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2105:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2105:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2130:2:18",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2101:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2101:32:18"
},
"nodeType": "YulIf",
"src": "2098:2:18"
},
{
"nodeType": "YulAssignment",
"src": "2169:33:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2192:9:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2179:12:18"
},
"nodeType": "YulFunctionCall",
"src": "2179:23:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2169:6:18"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2211:42:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2238:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2249:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2234:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2234:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2221:12:18"
},
"nodeType": "YulFunctionCall",
"src": "2221:32:18"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2211:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "2262:46:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2293:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2304:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2289:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2289:18:18"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2276:12:18"
},
"nodeType": "YulFunctionCall",
"src": "2276:32:18"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2266:6:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2351:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "2360:6:18"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "2368:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2353:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2353:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2353:22:18"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2323:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2331:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2320:2:18"
},
"nodeType": "YulFunctionCall",
"src": "2320:30:18"
},
"nodeType": "YulIf",
"src": "2317:2:18"
},
{
"nodeType": "YulAssignment",
"src": "2386:61:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2419:9:18"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2430:6:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2415:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2415:22:18"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2439:7:18"
}
],
"functionName": {
"name": "abi_decode_t_bytes",
"nodeType": "YulIdentifier",
"src": "2396:18:18"
},
"nodeType": "YulFunctionCall",
"src": "2396:51:18"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "2386:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2038:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2049:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2061:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "2069:6:18",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "2077:6:18",
"type": ""
}
],
"src": "1977:476:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2549:585:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2595:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2604:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2612:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2597:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2597:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2597:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2570:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2579:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2566:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2566:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2591:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2562:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2562:32:18"
},
"nodeType": "YulIf",
"src": "2559:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "2630:30:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2650:9:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2644:5:18"
},
"nodeType": "YulFunctionCall",
"src": "2644:16:18"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2634:6:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2703:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2712:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2720:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2705:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2705:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2705:22:18"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2675:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2683:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2672:2:18"
},
"nodeType": "YulFunctionCall",
"src": "2672:30:18"
},
"nodeType": "YulIf",
"src": "2669:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "2738:32:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2752:9:18"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2763:6:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2748:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2748:22:18"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "2742:2:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2818:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2827:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2835:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2820:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2820:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "2820:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "2797:2:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2801:4:18",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2793:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2793:13:18"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2808:7:18"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2789:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2789:27:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2782:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2782:35:18"
},
"nodeType": "YulIf",
"src": "2779:2:18"
},
{
"nodeType": "YulVariableDeclaration",
"src": "2853:19:18",
"value": {
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "2869:2:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2863:5:18"
},
"nodeType": "YulFunctionCall",
"src": "2863:9:18"
},
"variables": [
{
"name": "_2",
"nodeType": "YulTypedName",
"src": "2857:2:18",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "2881:62:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "2939:2:18"
}
],
"functionName": {
"name": "array_allocation_size_t_bytes",
"nodeType": "YulIdentifier",
"src": "2909:29:18"
},
"nodeType": "YulFunctionCall",
"src": "2909:33:18"
}
],
"functionName": {
"name": "allocateMemory",
"nodeType": "YulIdentifier",
"src": "2894:14:18"
},
"nodeType": "YulFunctionCall",
"src": "2894:49:18"
},
"variables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "2885:5:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "2959:5:18"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "2966:2:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2952:6:18"
},
"nodeType": "YulFunctionCall",
"src": "2952:17:18"
},
"nodeType": "YulExpressionStatement",
"src": "2952:17:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3015:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3024:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3032:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3017:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3017:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "3017:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "2992:2:18"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "2996:2:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2988:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2988:11:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3001:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2984:3:18"
},
"nodeType": "YulFunctionCall",
"src": "2984:20:18"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3006:7:18"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2981:2:18"
},
"nodeType": "YulFunctionCall",
"src": "2981:33:18"
},
"nodeType": "YulIf",
"src": "2978:2:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "3076:2:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3080:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3072:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3072:11:18"
},
{
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "3089:5:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3096:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3085:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3085:14:18"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "3101:2:18"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "3050:21:18"
},
"nodeType": "YulFunctionCall",
"src": "3050:54:18"
},
"nodeType": "YulExpressionStatement",
"src": "3050:54:18"
},
{
"nodeType": "YulAssignment",
"src": "3113:15:18",
"value": {
"name": "array",
"nodeType": "YulIdentifier",
"src": "3123:5:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3113:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2515:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2526:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2538:6:18",
"type": ""
}
],
"src": "2458:676:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3220:113:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "3266:26:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3275:6:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3283:6:18"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3268:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3268:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "3268:22:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3241:7:18"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3250:9:18"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "3237:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3237:23:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3262:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "3233:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3233:32:18"
},
"nodeType": "YulIf",
"src": "3230:2:18"
},
{
"nodeType": "YulAssignment",
"src": "3301:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3317:9:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3311:5:18"
},
"nodeType": "YulFunctionCall",
"src": "3311:16:18"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3301:6:18"
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "3186:9:18",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "3197:7:18",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3209:6:18",
"type": ""
}
],
"src": "3139:194:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3389:267:18",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3399:26:18",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3419:5:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3413:5:18"
},
"nodeType": "YulFunctionCall",
"src": "3413:12:18"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3403:6:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3441:3:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3446:6:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3434:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3434:19:18"
},
"nodeType": "YulExpressionStatement",
"src": "3434:19:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3488:5:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3495:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3484:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3484:16:18"
},
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3506:3:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3511:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3502:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3502:14:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3518:6:18"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "3462:21:18"
},
"nodeType": "YulFunctionCall",
"src": "3462:63:18"
},
"nodeType": "YulExpressionStatement",
"src": "3462:63:18"
},
{
"nodeType": "YulAssignment",
"src": "3534:116:18",
"value": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3549:3:18"
},
{
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3562:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3570:2:18",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3558:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3558:15:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3575:66:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3554:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3554:88:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3545:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3545:98:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3645:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3541:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3541:109:18"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "3534:3:18"
}
]
}
]
},
"name": "abi_encode_t_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3366:5:18",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3373:3:18",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "3381:3:18",
"type": ""
}
],
"src": "3338:318:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3834:341:18",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3844:76:18",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "3854:66:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "3848:2:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3936:3:18"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3949:2:18",
"type": "",
"value": "96"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3953:6:18"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "3945:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3945:15:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "3962:2:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3941:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3941:24:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3929:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3929:37:18"
},
"nodeType": "YulExpressionStatement",
"src": "3929:37:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3986:3:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3991:2:18",
"type": "",
"value": "20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3982:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3982:12:18"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4004:3:18",
"type": "",
"value": "232"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "4009:6:18"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "4000:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4000:16:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4018:66:18",
"type": "",
"value": "0xffffff0000000000000000000000000000000000000000000000000000000000"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3996:3:18"
},
"nodeType": "YulFunctionCall",
"src": "3996:89:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3975:6:18"
},
"nodeType": "YulFunctionCall",
"src": "3975:111:18"
},
"nodeType": "YulExpressionStatement",
"src": "3975:111:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4106:3:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4111:2:18",
"type": "",
"value": "23"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4102:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4102:12:18"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4124:2:18",
"type": "",
"value": "96"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4128:6:18"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "4120:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4120:15:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4137:2:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4116:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4116:24:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4095:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4095:46:18"
},
"nodeType": "YulExpressionStatement",
"src": "4095:46:18"
},
{
"nodeType": "YulAssignment",
"src": "4150:19:18",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4161:3:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4166:2:18",
"type": "",
"value": "43"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4157:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4157:12:18"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "4150:3:18"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3794:3:18",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "3799:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "3807:6:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3815:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "3826:3:18",
"type": ""
}
],
"src": "3661:514:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4281:125:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4291:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4303:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4314:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4299:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4299:18:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4291:4:18"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4333:9:18"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4348:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4356:42:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4344:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4344:55:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4326:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4326:74:18"
},
"nodeType": "YulExpressionStatement",
"src": "4326:74:18"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4250:9:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4261:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4272:4:18",
"type": ""
}
],
"src": "4180:226:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4634:370:18",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4644:52:18",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "4654:42:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "4648:2:18",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4712:9:18"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4727:6:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4735:2:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4723:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4723:15:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4705:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4705:34:18"
},
"nodeType": "YulExpressionStatement",
"src": "4705:34:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4759:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4770:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4755:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4755:18:18"
},
{
"arguments": [
{
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "4789:6:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "4782:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4782:14:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "4775:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4775:22:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4748:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4748:50:18"
},
"nodeType": "YulExpressionStatement",
"src": "4748:50:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4818:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4829:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4814:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4814:18:18"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4834:6:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4807:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4807:34:18"
},
"nodeType": "YulExpressionStatement",
"src": "4807:34:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4861:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4872:2:18",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4857:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4857:18:18"
},
{
"arguments": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "4881:6:18"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4889:2:18"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4877:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4877:15:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4850:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4850:43:18"
},
"nodeType": "YulExpressionStatement",
"src": "4850:43:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4913:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4924:3:18",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4909:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4909:19:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4930:3:18",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4902:6:18"
},
"nodeType": "YulFunctionCall",
"src": "4902:32:18"
},
"nodeType": "YulExpressionStatement",
"src": "4902:32:18"
},
{
"nodeType": "YulAssignment",
"src": "4943:55:18",
"value": {
"arguments": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "4970:6:18"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4982:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4993:3:18",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4978:3:18"
},
"nodeType": "YulFunctionCall",
"src": "4978:19:18"
}
],
"functionName": {
"name": "abi_encode_t_bytes",
"nodeType": "YulIdentifier",
"src": "4951:18:18"
},
"nodeType": "YulFunctionCall",
"src": "4951:47:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4943:4:18"
}
]
}
]
},
"name": "abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4571:9:18",
"type": ""
},
{
"name": "value4",
"nodeType": "YulTypedName",
"src": "4582:6:18",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "4590:6:18",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "4598:6:18",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "4606:6:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4614:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4625:4:18",
"type": ""
}
],
"src": "4411:593:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5130:100:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5147:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5158:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5140:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5140:21:18"
},
"nodeType": "YulExpressionStatement",
"src": "5140:21:18"
},
{
"nodeType": "YulAssignment",
"src": "5170:54:18",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5197:6:18"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5209:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5220:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5205:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5205:18:18"
}
],
"functionName": {
"name": "abi_encode_t_bytes",
"nodeType": "YulIdentifier",
"src": "5178:18:18"
},
"nodeType": "YulFunctionCall",
"src": "5178:46:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5170:4:18"
}
]
}
]
},
"name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5099:9:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "5110:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5121:4:18",
"type": ""
}
],
"src": "5009:221:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5409:166:18",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5426:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5437:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5419:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5419:21:18"
},
"nodeType": "YulExpressionStatement",
"src": "5419:21:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5460:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5471:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5456:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5456:18:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5476:2:18",
"type": "",
"value": "16"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5449:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5449:30:18"
},
"nodeType": "YulExpressionStatement",
"src": "5449:30:18"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5499:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5510:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5495:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5495:18:18"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "5515:18:18",
"type": "",
"value": "Unexpected error"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5488:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5488:46:18"
},
"nodeType": "YulExpressionStatement",
"src": "5488:46:18"
},
{
"nodeType": "YulAssignment",
"src": "5543:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5555:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5566:2:18",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5551:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5551:18:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5543:4:18"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5386:9:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5400:4:18",
"type": ""
}
],
"src": "5235:340:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5681:76:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5691:26:18",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5703:9:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5714:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5699:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5699:18:18"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5691:4:18"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5733:9:18"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5744:6:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5726:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5726:25:18"
},
"nodeType": "YulExpressionStatement",
"src": "5726:25:18"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5650:9:18",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "5661:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5672:4:18",
"type": ""
}
],
"src": "5580:177:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5806:198:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5816:19:18",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5832:2:18",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "5826:5:18"
},
"nodeType": "YulFunctionCall",
"src": "5826:9:18"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5816:6:18"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "5844:35:18",
"value": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5866:6:18"
},
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "5874:4:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5862:3:18"
},
"nodeType": "YulFunctionCall",
"src": "5862:17:18"
},
"variables": [
{
"name": "newFreePtr",
"nodeType": "YulTypedName",
"src": "5848:10:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "5954:13:18",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "invalid",
"nodeType": "YulIdentifier",
"src": "5956:7:18"
},
"nodeType": "YulFunctionCall",
"src": "5956:9:18"
},
"nodeType": "YulExpressionStatement",
"src": "5956:9:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5897:10:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5909:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "5894:2:18"
},
"nodeType": "YulFunctionCall",
"src": "5894:34:18"
},
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5933:10:18"
},
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5945:6:18"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "5930:2:18"
},
"nodeType": "YulFunctionCall",
"src": "5930:22:18"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "5891:2:18"
},
"nodeType": "YulFunctionCall",
"src": "5891:62:18"
},
"nodeType": "YulIf",
"src": "5888:2:18"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5983:2:18",
"type": "",
"value": "64"
},
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5987:10:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5976:6:18"
},
"nodeType": "YulFunctionCall",
"src": "5976:22:18"
},
"nodeType": "YulExpressionStatement",
"src": "5976:22:18"
}
]
},
"name": "allocateMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "5786:4:18",
"type": ""
}
],
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "5795:6:18",
"type": ""
}
],
"src": "5762:242:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6068:181:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "6112:13:18",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "invalid",
"nodeType": "YulIdentifier",
"src": "6114:7:18"
},
"nodeType": "YulFunctionCall",
"src": "6114:9:18"
},
"nodeType": "YulExpressionStatement",
"src": "6114:9:18"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6084:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6092:18:18",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6081:2:18"
},
"nodeType": "YulFunctionCall",
"src": "6081:30:18"
},
"nodeType": "YulIf",
"src": "6078:2:18"
},
{
"nodeType": "YulAssignment",
"src": "6134:109:18",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6154:6:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6162:4:18",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6150:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6150:17:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6169:66:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "6146:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6146:90:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6238:4:18",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6142:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6142:101:18"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "6134:4:18"
}
]
}
]
},
"name": "array_allocation_size_t_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "6048:6:18",
"type": ""
}
],
"returnVariables": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "6059:4:18",
"type": ""
}
],
"src": "6009:240:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6307:205:18",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6317:10:18",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "6326:1:18",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "6321:1:18",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "6386:63:18",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "6411:3:18"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6416:1:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6407:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6407:11:18"
},
{
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "6430:3:18"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6435:1:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6426:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6426:11:18"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "6420:5:18"
},
"nodeType": "YulFunctionCall",
"src": "6420:18:18"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6400:6:18"
},
"nodeType": "YulFunctionCall",
"src": "6400:39:18"
},
"nodeType": "YulExpressionStatement",
"src": "6400:39:18"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6347:1:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6350:6:18"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "6344:2:18"
},
"nodeType": "YulFunctionCall",
"src": "6344:13:18"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "6358:19:18",
"statements": [
{
"nodeType": "YulAssignment",
"src": "6360:15:18",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6369:1:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6372:2:18",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6365:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6365:10:18"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6360:1:18"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "6340:3:18",
"statements": []
},
"src": "6336:113:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6475:31:18",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "6488:3:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6493:6:18"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6484:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6484:16:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6502:1:18",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6477:6:18"
},
"nodeType": "YulFunctionCall",
"src": "6477:27:18"
},
"nodeType": "YulExpressionStatement",
"src": "6477:27:18"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "6464:1:18"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6467:6:18"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6461:2:18"
},
"nodeType": "YulFunctionCall",
"src": "6461:13:18"
},
"nodeType": "YulIf",
"src": "6458:2:18"
}
]
},
"name": "copy_memory_to_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "6285:3:18",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "6290:3:18",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "6295:6:18",
"type": ""
}
],
"src": "6254:258:18"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6564:109:18",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "6651:16:18",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6660:1:18",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6663:1:18",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "6653:6:18"
},
"nodeType": "YulFunctionCall",
"src": "6653:12:18"
},
"nodeType": "YulExpressionStatement",
"src": "6653:12:18"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6587:5:18"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6598:5:18"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6605:42:18",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "6594:3:18"
},
"nodeType": "YulFunctionCall",
"src": "6594:54:18"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "6584:2:18"
},
"nodeType": "YulFunctionCall",
"src": "6584:65:18"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "6577:6:18"
},
"nodeType": "YulFunctionCall",
"src": "6577:73:18"
},
"nodeType": "YulIf",
"src": "6574:2:18"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "6553:5:18",
"type": ""
}
],
"src": "6517:156:18"
}
]
},
"contents": "{\n { }\n function abi_decode_t_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), array)\n array := array_1\n }\n function abi_decode_tuple_t_addresst_addresst_uint24t_uint256t_uint160(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(value4, value4) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_t_address(value_1)\n value1 := value_1\n let value_2 := calldataload(add(headStart, 64))\n if iszero(eq(value_2, and(value_2, 0xffffff))) { revert(value4, value4) }\n value2 := value_2\n value3 := calldataload(add(headStart, 96))\n let value_3 := calldataload(add(headStart, 128))\n validator_revert_t_address(value_3)\n value4 := value_3\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_decode_tuple_t_int256t_int256_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := mload(headStart)\n value1 := mload(add(headStart, 32))\n }\n function abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n value2 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := mload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value0, value0) }\n let _2 := mload(_1)\n let array := allocateMemory(array_allocation_size_t_bytes(_2))\n mstore(array, _2)\n if gt(add(add(_1, _2), 32), dataEnd) { revert(value0, value0) }\n copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n value0 := array\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := mload(headStart)\n }\n function abi_encode_t_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n }\n function abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n mstore(pos, and(shl(96, value0), _1))\n mstore(add(pos, 20), and(shl(232, value1), 0xffffff0000000000000000000000000000000000000000000000000000000000))\n mstore(add(pos, 23), and(shl(96, value2), _1))\n end := add(pos, 43)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), iszero(iszero(value1)))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, _1))\n mstore(add(headStart, 128), 160)\n tail := abi_encode_t_bytes(value4, add(headStart, 160))\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_t_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 16)\n mstore(add(headStart, 64), \"Unexpected error\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function allocateMemory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, size)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_t_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { invalid() }\n size := add(and(add(length, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function validator_revert_t_address(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n}",
"id": 18,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {
"1070": [
{
"length": 32,
"start": 870
},
{
"length": 32,
"start": 1414
},
{
"length": 32,
"start": 1749
}
],
"1074": [
{
"length": 32,
"start": 834
}
]
},
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100d3578063cdca1753146100db578063f7729d43146100ee578063fa461e33146101015761007d565b80632f80bb1d1461008257806330d07f21146100ab5780634aa4a4fc146100be575b600080fd5b610095610090366004610e9e565b610116565b6040516100a29190611148565b60405180910390f35b6100956100b9366004610e30565b61017b565b6100c6610340565b6040516100a29190611084565b6100c6610364565b6100956100e9366004610e9e565b610388565b6100956100fc366004610e30565b6103d6565b61011461010f366004610f04565b610555565b005b60005b600061012484610660565b9050600080600061013487610668565b92509250925061014882848389600061017b565b955083156101605761015987610699565b965061016c565b85945050505050610175565b50505050610119565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff808616878216109083166101a65760008490555b6101b18787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836101d78861070c565b60000373ffffffffffffffffffffffffffffffffffffffff8816156101fc5787610222565b8561021b5773fffd8963efd1fc6a506488495d951d5263988d25610222565b6401000276a45b8b8b8e6040516020016102379392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016102669594939291906110a5565b6040805180830381600087803b15801561027f57600080fd5b505af19250505080156102cd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526102ca91810190610ee1565b60015b610333573d8080156102fb576040519150601f19603f3d011682016040523d82523d6000602084013e610300565b606091505b5073ffffffffffffffffffffffffffffffffffffffff841661032157600080555b61032a8161073e565b92505050610337565b5050505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b600061039684610660565b905060008060006103a687610668565b9250925092506103ba8383838960006103d6565b95508315610160576103cb87610699565b96505050505061038b565b600073ffffffffffffffffffffffffffffffffffffffff808616908716106103ff8787876106ce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836104258861070c565b73ffffffffffffffffffffffffffffffffffffffff881615610447578761046d565b856104665773fffd8963efd1fc6a506488495d951d5263988d2561046d565b6401000276a45b8c8b8d6040516020016104829392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016104b19594939291906110a5565b6040805180830381600087803b1580156104ca57600080fd5b505af1925050508015610518575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261051591810190610ee1565b60015b610333573d808015610546576040519150601f19603f3d011682016040523d82523d6000602084013e61054b565b606091505b5061032a8161073e565b60008313806105645750600082135b61056d57600080fd5b600080600061057b84610668565b9250925092506105ad7f00000000000000000000000000000000000000000000000000000000000000008484846107ef565b5060008060008089136105f3578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a600003610628565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250821561063f57604051818152602081fd5b6000541561065557600054811461065557600080fd5b604051828152602081fd5b516042111590565b600080806106768482610805565b9250610683846014610905565b9050610690846017610805565b91509193909250565b80516060906101759083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016109f5565b60006107047f00000000000000000000000000000000000000000000000000000000000000006106ff868686610bdc565b610c59565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061073a57600080fd5b5090565b600081516020146107db5760448251101561078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590611111565b60405180910390fd5b600482019150818060200190518101906107a89190610f52565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078591906110f7565b818060200190518101906101759190610fbc565b600061033785610800868686610bdc565b610d8f565b60008182601401101561087957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b81601401835110156108ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561097957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600301835110156109ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610a6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610ada57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015610b4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015610b6b5760405191506000825260208201604052610bd3565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610ba4578051835260209283019201610b8c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610be4610dbf565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610c1c579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c9b57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6000610d9b8383610c59565b90503373ffffffffffffffffffffffffffffffffffffffff82161461017557600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610def578081fd5b8135610e02610dfd82611175565b611151565b818152846020838601011115610e16578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a08688031215610e47578081fd5b8535610e52816111e5565b94506020860135610e62816111e5565b9350604086013562ffffff81168114610e79578182fd5b9250606086013591506080860135610e90816111e5565b809150509295509295909350565b60008060408385031215610eb0578182fd5b823567ffffffffffffffff811115610ec6578283fd5b610ed285828601610ddf565b95602094909401359450505050565b60008060408385031215610ef3578182fd5b505080516020909101519092909150565b600080600060608486031215610f18578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610f3c578182fd5b610f4886828701610ddf565b9150509250925092565b600060208284031215610f63578081fd5b815167ffffffffffffffff811115610f79578182fd5b8201601f81018413610f89578182fd5b8051610f97610dfd82611175565b818152856020838501011115610fab578384fd5b6103378260208301602086016111b5565b600060208284031215610fcd578081fd5b5051919050565b60008151808452610fec8160208601602086016111b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526110ec60a0830184610fd4565b979650505050505050565b60006020825261110a6020830184610fd4565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156111d05781810151838201526020016111b8565b838111156111df576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461120757600080fd5b5056fea26469706673582212204ba294eca0a366d4d8601eaa80323cb403aa01c4f4d2454757678b73f2acd97c64736f6c63430007060033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC45A0155 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0xF7729D43 EQ PUSH2 0xEE JUMPI DUP1 PUSH4 0xFA461E33 EQ PUSH2 0x101 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x2F80BB1D EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x30D07F21 EQ PUSH2 0xAB JUMPI DUP1 PUSH4 0x4AA4A4FC EQ PUSH2 0xBE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA2 SWAP2 SWAP1 PUSH2 0x1148 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0xB9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x17B JUMP JUMPDEST PUSH2 0xC6 PUSH2 0x340 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA2 SWAP2 SWAP1 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0xC6 PUSH2 0x364 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xE9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x388 JUMP JUMPDEST PUSH2 0x95 PUSH2 0xFC CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x3D6 JUMP JUMPDEST PUSH2 0x114 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0xF04 JUMP JUMPDEST PUSH2 0x555 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x124 DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x134 DUP8 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x148 DUP3 DUP5 DUP4 DUP10 PUSH1 0x0 PUSH2 0x17B JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x160 JUMPI PUSH2 0x159 DUP8 PUSH2 0x699 JUMP JUMPDEST SWAP7 POP PUSH2 0x16C JUMP JUMPDEST DUP6 SWAP5 POP POP POP POP POP PUSH2 0x175 JUMP JUMPDEST POP POP POP POP PUSH2 0x119 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP8 DUP3 AND LT SWAP1 DUP4 AND PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP5 SWAP1 SSTORE JUMPDEST PUSH2 0x1B1 DUP8 DUP8 DUP8 PUSH2 0x6CE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x1D7 DUP9 PUSH2 0x70C JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x1FC JUMPI DUP8 PUSH2 0x222 JUMP JUMPDEST DUP6 PUSH2 0x21B JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x222 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP12 DUP12 DUP15 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x237 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x266 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2CD JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2CA SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x333 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x2FB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x300 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 SSTORE JUMPDEST PUSH2 0x32A DUP2 PUSH2 0x73E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x337 JUMP JUMPDEST POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x396 DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3A6 DUP8 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x3BA DUP4 DUP4 DUP4 DUP10 PUSH1 0x0 PUSH2 0x3D6 JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x160 JUMPI PUSH2 0x3CB DUP8 PUSH2 0x699 JUMP JUMPDEST SWAP7 POP POP POP POP POP PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND SWAP1 DUP8 AND LT PUSH2 0x3FF DUP8 DUP8 DUP8 PUSH2 0x6CE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x425 DUP9 PUSH2 0x70C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x447 JUMPI DUP8 PUSH2 0x46D JUMP JUMPDEST DUP6 PUSH2 0x466 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x46D JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP13 DUP12 DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x482 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4B1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x518 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x515 SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x333 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x546 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x54B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH2 0x32A DUP2 PUSH2 0x73E JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x564 JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x57B DUP5 PUSH2 0x668 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x5AD PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x7EF JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP10 SGT PUSH2 0x5F3 JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 DUP11 PUSH1 0x0 SUB PUSH2 0x628 JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 DUP10 PUSH1 0x0 SUB JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP3 ISZERO PUSH2 0x63F JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST PUSH1 0x0 SLOAD ISZERO PUSH2 0x655 JUMPI PUSH1 0x0 SLOAD DUP2 EQ PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x676 DUP5 DUP3 PUSH2 0x805 JUMP JUMPDEST SWAP3 POP PUSH2 0x683 DUP5 PUSH1 0x14 PUSH2 0x905 JUMP JUMPDEST SWAP1 POP PUSH2 0x690 DUP5 PUSH1 0x17 PUSH2 0x805 JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x175 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x9F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x704 PUSH32 0x0 PUSH2 0x6FF DUP7 DUP7 DUP7 PUSH2 0xBDC JUMP JUMPDEST PUSH2 0xC59 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x73A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x7DB JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x785 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x7A8 SWAP2 SWAP1 PUSH2 0xF52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x785 SWAP2 SWAP1 PUSH2 0x10F7 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x175 SWAP2 SWAP1 PUSH2 0xFBC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x337 DUP6 PUSH2 0x800 DUP7 DUP7 DUP7 PUSH2 0xBDC JUMP JUMPDEST PUSH2 0xD8F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x879 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x979 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x9EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0xA69 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0xADA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0xB4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0xB6B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0xBA4 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xB8C JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xBE4 PUSH2 0xDBF JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xC1C JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xC9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0xE34F199B19B2B4F47F68442619D555527D244F78A3297EA89325F843F87B8B54 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD9B DUP4 DUP4 PUSH2 0xC59 JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xDEF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE02 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST PUSH2 0x1151 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xE16 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xE47 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xE52 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xE62 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE79 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0xE90 DUP2 PUSH2 0x11E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEB0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEC6 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xED2 DUP6 DUP3 DUP7 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEF3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF18 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF3C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xF48 DUP7 DUP3 DUP8 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF63 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF79 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0xF89 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xF97 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0xFAB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x337 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFCD JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xFEC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x10EC PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x110A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x116D JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1189 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11DF JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B LOG2 SWAP5 0xEC LOG0 LOG3 PUSH7 0xD4D8601EAA8032 EXTCODECOPY 0xB4 SUB 0xAA ADD 0xC4 DELEGATECALL 0xD2 GASLIMIT SELFBALANCE JUMPI PUSH8 0x8B73F2ACD97C6473 PUSH16 0x6C634300070600330000000000000000 ",
"sourceMap": "875:5721:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5929:665;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4821:1074;;;;;;:::i;:::-;;:::i;420:39:10:-;;;:::i;:::-;;;;;;;:::i;328:41::-;;;:::i;4127:660:13:-;;;;;;:::i;:::-;;:::i;3275:818::-;;;;;;:::i;:::-;;:::i;1544:1245::-;;;;;;:::i;:::-;;:::i;:::-;;5929:665;6020:16;6048:540;6075:21;6099:23;:4;:21;:23::i;:::-;6075:47;;6138:16;6156:15;6173:10;6187:22;:4;:20;:22::i;:::-;6137:72;;;;;;6315:60;6338:7;6347:8;6357:3;6362:9;6373:1;6315:22;:60::i;:::-;6303:72;;6449:16;6445:133;;;6492:16;:4;:14;:16::i;:::-;6485:23;;6445:133;;;6554:9;6547:16;;;;;;;;6445:133;6048:540;;;;;;;5929:665;;;;:::o;4821:1074::-;5017:16;5063:18;;;;;;;;;5205:22;;5201:55;;5229:15;:27;;;5201:55;5282:31;5290:7;5299:8;5309:3;5282:7;:31::i;:::-;:36;;;5344:4;5417:10;5446:20;:9;:18;:20::i;:::-;5445:21;;5484:22;;;;:157;;5624:17;5484:157;;;5530:10;:70;;5573:27;5530:70;;;5543:27;5530:70;5676:8;5686:3;5691:7;5659:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5282:431;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5282:431:13;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5266:623;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5771:22:13;;;5767:50;;5802:15;5795:22;;5767:50;5853:25;5871:6;5853:17;:25::i;:::-;5846:32;;;;;;5266:623;;;4821:1074;;;;;;;;;:::o;420:39:10:-;;;:::o;328:41::-;;;:::o;4127:660:13:-;4216:17;4245:536;4272:21;4296:23;:4;:21;:23::i;:::-;4272:47;;4335:15;4352:16;4370:10;4384:22;:4;:20;:22::i;:::-;4334:72;;;;;;4511:58;4533:7;4542:8;4552:3;4557:8;4567:1;4511:21;:58::i;:::-;4500:69;;4643:16;4639:132;;;4686:16;:4;:14;:16::i;:::-;4679:23;;4245:536;;;;;;3275:818;3469:17;3516:18;;;;;;;;3561:31;3516:7;3526:8;3588:3;3561:7;:31::i;:::-;:36;;;3623:4;3696:10;3724:19;:8;:17;:19::i;:::-;3761:22;;;;:157;;3901:17;3761:157;;;3807:10;:70;;3850:27;3807:70;;;3820:27;3807:70;3953:7;3962:3;3967:8;3936:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3561:429;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3561:429:13;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3545:542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4051:25;4069:6;4051:17;:25::i;1544:1245::-;1722:1;1707:12;:16;:36;;;;1742:1;1727:12;:16;1707:36;1699:45;;;;;;1818:15;1835:16;1853:10;1867:22;:4;:20;:22::i;:::-;1817:72;;;;;;1899:66;1933:7;1942;1951:8;1961:3;1899:33;:66::i;:::-;;1977:17;1996:19;2017:22;2070:1;2055:12;:16;:188;;2188:7;2177:18;;:8;:18;;;2205:12;2229;2228:13;;2055:188;;;2101:8;2091:18;;:7;:18;;;2119:12;2143;2142:13;;2055:188;1976:267;;;;;;2257:12;2253:530;;;2329:4;2323:11;2363:14;2358:3;2351:27;2407:2;2402:3;2395:15;2294:130;2559:15;;:20;2555:68;;2607:15;;2589:14;:33;2581:42;;;;;;2681:4;2675:11;2715;2710:3;2703:24;2756:2;2751:3;2744:15;992:138:16;1083:11;777:24;-1:-1:-1;1083:40:16;;992:138::o;1392:314::-;1496:14;;;1596:17;:4;1496:14;1596;:17::i;:::-;1587:26;-1:-1:-1;1629:24:16;:4;304:2;1629:13;:24::i;:::-;1623:30;-1:-1:-1;1672:27:16;:4;507:20;1672:14;:27::i;:::-;1663:36;;1392:314;;;;;:::o;2248:149::-;2364:11;;2309:12;;2340:50;;2364:4;;507:20;;2364:25;;2340:10;:50::i;1246:249:13:-;1359:14;1407:80;1434:7;1443:43;1466:6;1474;1482:3;1443:22;:43::i;:::-;1407:26;:80::i;:::-;1385:103;1246:249;-1:-1:-1;;;;1246:249:13:o;924:121:8:-;976:8;1008:6;1004:1;:10;996:19;;;;;;-1:-1:-1;1036:1:8;924:121::o;2869:372:13:-;2939:7;2962:6;:13;2979:2;2962:19;2958:231;;3017:2;3001:6;:13;:18;2997:50;;;3021:26;;;;;;;;;;:::i;:::-;;;;;;;;2997:50;3110:4;3102:6;3098:17;3088:27;;3160:6;3149:28;;;;;;;;;;;;:::i;:::-;3142:36;;;;;;;;;;;:::i;2958:231::-;3216:6;3205:29;;;;;;;;;;;;:::i;683:259:15:-;829:19;867:68;882:7;891:43;914:6;922;930:3;891:22;:43::i;:::-;867:14;:68::i;3412:416:14:-;3491:7;3533:6;3518;3527:2;3518:11;:21;;3510:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3597:6;3606:2;3597:11;3580:6;:13;:28;;3572:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3722:30:14;3738:4;3722:30;3716:37;3755:27;3712:71;;;3412:416::o;3834:365::-;3912:6;3952;3938;3947:1;3938:10;:20;;3930:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4015:6;4024:1;4015:10;3998:6;:13;:27;;3990:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4127:29:14;4143:3;4127:29;4121:36;;3834:365::o;399:3007::-;521:12;569:7;553;563:2;553:12;:23;;545:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;633:6;622:7;613:6;:16;:26;;605:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;702:7;693:6;:16;676:6;:13;:33;;668:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:22;805:15;;837:2099;;;;3089:4;3083:11;3070:24;;3287:1;3276:9;3269:20;3339:4;3328:9;3324:20;3318:4;3311:34;798:2565;;837:2099;1031:4;1025:11;1012:24;;1726:2;1717:7;1713:16;2128:9;2121:17;2115:4;2111:28;2099:9;2088;2084:25;2080:60;2180:7;2176:2;2172:16;2448:6;2434:9;2427:17;2421:4;2417:28;2405:9;2397:6;2393:22;2389:57;2385:70;2210:461;2485:3;2481:2;2478:11;2210:461;;;2639:9;;2628:21;;2530:4;2522:13;;;;2566;2210:461;;;-1:-1:-1;;2693:26:14;;;2913:2;2896:11;2909:7;2892:25;2886:4;2879:39;-1:-1:-1;798:2565:14;-1:-1:-1;3390:9:14;399:3007;-1:-1:-1;;;;399:3007:14:o;784:274:17:-;901:14;;:::i;:::-;940:6;931:15;;:6;:15;;;927:56;;;968:6;;976;927:56;-1:-1:-1;1000:51:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:274::o;1305:512::-;1389:12;1434:3;:10;;;1421:23;;:3;:10;;;:23;;;1413:32;;;;;;-1:-1:-1;1668:10:17;;1680;;;;;1692:7;;;;;1657:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:54;;;;;;1539:229;;;;;;;;;;;;;;;;;;;;;241:66;1539:229;;;;;;;;;;;;;;;;;;;;;;;;;1508:278;;;;;;1305:512::o;1189:279:15:-;1313:19;1370:44;1397:7;1406;1370:26;:44::i;:::-;1348:67;-1:-1:-1;1433:10:15;:27;;;;1425:36;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:485:18:-;;111:3;104:4;96:6;92:17;88:27;78:2;;133:5;126;119:20;78:2;173:6;160:20;204:49;219:33;249:2;219:33;:::i;:::-;204:49;:::i;:::-;278:2;269:7;262:19;324:3;317:4;312:2;304:6;300:15;296:26;293:35;290:2;;;345:5;338;331:20;290:2;414;407:4;399:6;395:17;388:4;379:7;375:18;362:55;437:16;;;455:4;433:27;426:42;;;;441:7;68:431;-1:-1:-1;;68:431:18:o;504:795::-;;;;;;683:3;671:9;662:7;658:23;654:33;651:2;;;705:6;697;690:22;651:2;749:9;736:23;768:33;795:5;768:33;:::i;:::-;820:5;-1:-1:-1;877:2:18;862:18;;849:32;890:35;849:32;890:35;:::i;:::-;944:7;-1:-1:-1;1003:2:18;988:18;;975:32;1051:8;1038:22;;1026:35;;1016:2;;1080:6;1072;1065:22;1016:2;1108:7;-1:-1:-1;1162:2:18;1147:18;;1134:32;;-1:-1:-1;1218:3:18;1203:19;;1190:33;1232:35;1190:33;1232:35;:::i;:::-;1286:7;1276:17;;;641:658;;;;;;;;:::o;1304:410::-;;;1442:2;1430:9;1421:7;1417:23;1413:32;1410:2;;;1463:6;1455;1448:22;1410:2;1508:9;1495:23;1541:18;1533:6;1530:30;1527:2;;;1578:6;1570;1563:22;1527:2;1606:51;1649:7;1640:6;1629:9;1625:22;1606:51;:::i;:::-;1596:61;1704:2;1689:18;;;;1676:32;;-1:-1:-1;;;;1400:314:18:o;1719:253::-;;;1857:2;1845:9;1836:7;1832:23;1828:32;1825:2;;;1878:6;1870;1863:22;1825:2;-1:-1:-1;;1906:16:18;;1962:2;1947:18;;;1941:25;1906:16;;1941:25;;-1:-1:-1;1815:157:18:o;1977:476::-;;;;2130:2;2118:9;2109:7;2105:23;2101:32;2098:2;;;2151:6;2143;2136:22;2098:2;2192:9;2179:23;2169:33;;2249:2;2238:9;2234:18;2221:32;2211:42;;2304:2;2293:9;2289:18;2276:32;2331:18;2323:6;2320:30;2317:2;;;2368:6;2360;2353:22;2317:2;2396:51;2439:7;2430:6;2419:9;2415:22;2396:51;:::i;:::-;2386:61;;;2088:365;;;;;:::o;2458:676::-;;2591:2;2579:9;2570:7;2566:23;2562:32;2559:2;;;2612:6;2604;2597:22;2559:2;2650:9;2644:16;2683:18;2675:6;2672:30;2669:2;;;2720:6;2712;2705:22;2669:2;2748:22;;2801:4;2793:13;;2789:27;-1:-1:-1;2779:2:18;;2835:6;2827;2820:22;2779:2;2869;2863:9;2894:49;2909:33;2939:2;2909:33;:::i;2894:49::-;2966:2;2959:5;2952:17;3006:7;3001:2;2996;2992;2988:11;2984:20;2981:33;2978:2;;;3032:6;3024;3017:22;2978:2;3050:54;3101:2;3096;3089:5;3085:14;3080:2;3076;3072:11;3050:54;:::i;3139:194::-;;3262:2;3250:9;3241:7;3237:23;3233:32;3230:2;;;3283:6;3275;3268:22;3230:2;-1:-1:-1;3311:16:18;;3220:113;-1:-1:-1;3220:113:18:o;3338:318::-;;3419:5;3413:12;3446:6;3441:3;3434:19;3462:63;3518:6;3511:4;3506:3;3502:14;3495:4;3488:5;3484:16;3462:63;:::i;:::-;3570:2;3558:15;3575:66;3554:88;3545:98;;;;3645:4;3541:109;;3389:267;-1:-1:-1;;3389:267:18:o;3661:514::-;3949:2;3945:15;;;3854:66;3941:24;;;3929:37;;4004:3;4000:16;;;;4018:66;3996:89;3991:2;3982:12;;3975:111;4120:15;;4116:24;4111:2;4102:12;;4095:46;4166:2;4157:12;;3834:341::o;4180:226::-;4356:42;4344:55;;;;4326:74;;4314:2;4299:18;;4281:125::o;4411:593::-;;4654:42;4735:2;4727:6;4723:15;4712:9;4705:34;4789:6;4782:14;4775:22;4770:2;4759:9;4755:18;4748:50;4834:6;4829:2;4818:9;4814:18;4807:34;4889:2;4881:6;4877:15;4872:2;4861:9;4857:18;4850:43;;4930:3;4924;4913:9;4909:19;4902:32;4951:47;4993:3;4982:9;4978:19;4970:6;4951:47;:::i;:::-;4943:55;4634:370;-1:-1:-1;;;;;;;4634:370:18:o;5009:221::-;;5158:2;5147:9;5140:21;5178:46;5220:2;5209:9;5205:18;5197:6;5178:46;:::i;:::-;5170:54;5130:100;-1:-1:-1;;;5130:100:18:o;5235:340::-;5437:2;5419:21;;;5476:2;5456:18;;;5449:30;5515:18;5510:2;5495:18;;5488:46;5566:2;5551:18;;5409:166::o;5580:177::-;5726:25;;;5714:2;5699:18;;5681:76::o;5762:242::-;5832:2;5826:9;5862:17;;;5909:18;5894:34;;5930:22;;;5891:62;5888:2;;;5956:9;5888:2;5983;5976:22;5806:198;;-1:-1:-1;5806:198:18:o;6009:240::-;;6092:18;6084:6;6081:30;6078:2;;;6114:9;6078:2;-1:-1:-1;6162:4:18;6150:17;6169:66;6146:90;6238:4;6142:101;;6068:181::o;6254:258::-;6326:1;6336:113;6350:6;6347:1;6344:13;6336:113;;;6426:11;;;6420:18;6407:11;;;6400:39;6372:2;6365:10;6336:113;;;6467:6;6464:1;6461:13;6458:2;;;6502:1;6493:6;6488:3;6484:16;6477:27;6458:2;;6307:205;;;:::o;6517:156::-;6605:42;6598:5;6594:54;6587:5;6584:65;6574:2;;6663:1;6660;6653:12;6574:2;6564:109;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "934400",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"WETH9()": "infinite",
"factory()": "infinite",
"quoteExactInput(bytes,uint256)": "infinite",
"quoteExactInputSingle(address,address,uint24,uint256,uint160)": "infinite",
"quoteExactOutput(bytes,uint256)": "infinite",
"quoteExactOutputSingle(address,address,uint24,uint256,uint160)": "infinite",
"uniswapV3SwapCallback(int256,int256,bytes)": "infinite"
},
"internal": {
"getPool(address,address,uint24)": "infinite",
"parseRevertReason(bytes memory)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 875,
"end": 6596,
"name": "PUSH",
"source": 13,
"value": "C0"
},
{
"begin": 875,
"end": 6596,
"name": "PUSH",
"source": 13,
"value": "40"
},
{
"begin": 875,
"end": 6596,
"name": "MSTORE",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "CALLVALUE",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "DUP1",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "ISZERO",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "PUSH [tag]",
"source": 13,
"value": "1"
},
{
"begin": 1150,
"end": 1240,
"name": "JUMPI",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "PUSH",
"source": 13,
"value": "0"
},
{
"begin": 1150,
"end": 1240,
"name": "DUP1",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "REVERT",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "tag",
"source": 13,
"value": "1"
},
{
"begin": 1150,
"end": 1240,
"name": "JUMPDEST",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "POP",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "PUSH",
"source": 13,
"value": "40"
},
{
"begin": 1150,
"end": 1240,
"name": "MLOAD",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "PUSHSIZE",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "CODESIZE",
"source": 13
},
{
"begin": 1150,
"end": 1240,
"name": "SUB",
"source": 13
},
{
"begin": 11
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment