Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save ConfidenceYobo/383465c62313f847ebd6b961a4e101f8 to your computer and use it in GitHub Desktop.

Select an option

Save ConfidenceYobo/383465c62313f847ebd6b961a4e101f8 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.7+commit.e28d00a7.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
library TestsAccounts {
function getAccount(uint index) pure public returns (address) {
address[15] memory accounts;
accounts[0] = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
accounts[1] = 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;
accounts[2] = 0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db;
accounts[3] = 0x78731D3Ca6b7E34aC0F824c42a7cC18A495cabaB;
accounts[4] = 0x617F2E2fD72FD9D5503197092aC168c91465E7f2;
accounts[5] = 0x17F6AD8Ef982297579C203069C1DbfFE4348c372;
accounts[6] = 0x5c6B0f7Bf3E7ce046039Bd8FABdfD3f9F5021678;
accounts[7] = 0x03C6FcED478cBbC9a4FAB34eF9f40767739D1Ff7;
accounts[8] = 0x1aE0EA34a72D944a8C7603FfB3eC30a6669E454C;
accounts[9] = 0x0A098Eda01Ce92ff4A4CCb7A4fFFb5A43EBC70DC;
accounts[10] = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;
accounts[11] = 0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C;
accounts[12] = 0x4B0897b0513fdC7C541B6d9D7E929C4e5364D2dB;
accounts[13] = 0x583031D1113aD414F02576BD6afaBfb302140225;
accounts[14] = 0xdD870fA1b7C4700F2BD7f44238821C26f7392148;
return accounts[index];
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
library Assert {
event AssertionEvent(
bool passed,
string message,
string methodName
);
event AssertionEventUint(
bool passed,
string message,
string methodName,
uint256 returned,
uint256 expected
);
event AssertionEventInt(
bool passed,
string message,
string methodName,
int256 returned,
int256 expected
);
event AssertionEventBool(
bool passed,
string message,
string methodName,
bool returned,
bool expected
);
event AssertionEventAddress(
bool passed,
string message,
string methodName,
address returned,
address expected
);
event AssertionEventBytes32(
bool passed,
string message,
string methodName,
bytes32 returned,
bytes32 expected
);
event AssertionEventString(
bool passed,
string message,
string methodName,
string returned,
string expected
);
event AssertionEventUintInt(
bool passed,
string message,
string methodName,
uint256 returned,
int256 expected
);
event AssertionEventIntUint(
bool passed,
string message,
string methodName,
int256 returned,
uint256 expected
);
function ok(bool a, string memory message) public returns (bool result) {
result = a;
emit AssertionEvent(result, message, "ok");
}
function equal(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventUint(result, message, "equal", a, b);
}
function equal(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventInt(result, message, "equal", a, b);
}
function equal(bool a, bool b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventBool(result, message, "equal", a, b);
}
// TODO: only for certain versions of solc
//function equal(fixed a, fixed b, string message) public returns (bool result) {
// result = (a == b);
// emit AssertionEvent(result, message);
//}
// TODO: only for certain versions of solc
//function equal(ufixed a, ufixed b, string message) public returns (bool result) {
// result = (a == b);
// emit AssertionEvent(result, message);
//}
function equal(address a, address b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventAddress(result, message, "equal", a, b);
}
function equal(bytes32 a, bytes32 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventBytes32(result, message, "equal", a, b);
}
function equal(string memory a, string memory b, string memory message) public returns (bool result) {
result = (keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)));
emit AssertionEventString(result, message, "equal", a, b);
}
function notEqual(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventUint(result, message, "notEqual", a, b);
}
function notEqual(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventInt(result, message, "notEqual", a, b);
}
function notEqual(bool a, bool b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventBool(result, message, "notEqual", a, b);
}
// TODO: only for certain versions of solc
//function notEqual(fixed a, fixed b, string message) public returns (bool result) {
// result = (a != b);
// emit AssertionEvent(result, message);
//}
// TODO: only for certain versions of solc
//function notEqual(ufixed a, ufixed b, string message) public returns (bool result) {
// result = (a != b);
// emit AssertionEvent(result, message);
//}
function notEqual(address a, address b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventAddress(result, message, "notEqual", a, b);
}
function notEqual(bytes32 a, bytes32 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventBytes32(result, message, "notEqual", a, b);
}
function notEqual(string memory a, string memory b, string memory message) public returns (bool result) {
result = (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b)));
emit AssertionEventString(result, message, "notEqual", a, b);
}
/*----------------- Greater than --------------------*/
function greaterThan(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a > b);
emit AssertionEventUint(result, message, "greaterThan", a, b);
}
function greaterThan(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a > b);
emit AssertionEventInt(result, message, "greaterThan", a, b);
}
// TODO: safely compare between uint and int
function greaterThan(uint256 a, int256 b, string memory message) public returns (bool result) {
if(b < int(0)) {
// int is negative uint "a" always greater
result = true;
} else {
result = (a > uint(b));
}
emit AssertionEventUintInt(result, message, "greaterThan", a, b);
}
function greaterThan(int256 a, uint256 b, string memory message) public returns (bool result) {
if(a < int(0)) {
// int is negative uint "b" always greater
result = false;
} else {
result = (uint(a) > b);
}
emit AssertionEventIntUint(result, message, "greaterThan", a, b);
}
/*----------------- Lesser than --------------------*/
function lesserThan(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a < b);
emit AssertionEventUint(result, message, "lesserThan", a, b);
}
function lesserThan(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a < b);
emit AssertionEventInt(result, message, "lesserThan", a, b);
}
// TODO: safely compare between uint and int
function lesserThan(uint256 a, int256 b, string memory message) public returns (bool result) {
if(b < int(0)) {
// int is negative int "b" always lesser
result = false;
} else {
result = (a < uint(b));
}
emit AssertionEventUintInt(result, message, "lesserThan", a, b);
}
function lesserThan(int256 a, uint256 b, string memory message) public returns (bool result) {
if(a < int(0)) {
// int is negative int "a" always lesser
result = true;
} else {
result = (uint(a) < b);
}
emit AssertionEventIntUint(result, message, "lesserThan", a, b);
}
}
REMIX DEFAULT WORKSPACE
Remix default workspace is present when:
i. Remix loads for the very first time
ii. A new workspace is created with 'Default' template
iii. There are no files existing in the File Explorer
This workspace contains 3 directories:
1. 'contracts': Holds three contracts with increasing levels of complexity.
2. 'scripts': Contains four typescript files to deploy a contract. It is explained below.
3. 'tests': Contains one Solidity test file for 'Ballot' contract & one JS test file for 'Storage' contract.
SCRIPTS
The 'scripts' folder has four typescript files which help to deploy the 'Storage' contract using 'web3.js' and 'ethers.js' libraries.
For the deployment of any other contract, just update the contract's name from 'Storage' to the desired contract and provide constructor arguments accordingly
in the file `deploy_with_ethers.ts` or `deploy_with_web3.ts`
In the 'tests' folder there is a script containing Mocha-Chai unit tests for 'Storage' contract.
To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled.
Output from script will appear in remix terminal.
Please note, require/import is supported in a limited manner for Remix supported modules.
For now, modules supported by Remix are ethers, web3, swarmgw, chai, multihashes, remix and hardhat only for hardhat.ethers object/plugin.
For unsupported modules, an error like this will be thrown: '<module_name> module require is not supported by Remix IDE' will be shown.
{
"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
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:3329:9",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:9",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "76:117:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "86:22:9",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "101:6:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "95:5:9"
},
"nodeType": "YulFunctionCall",
"src": "95:13:9"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "86:5:9"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "171:16:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "180:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "183:1:9",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "173:6:9"
},
"nodeType": "YulFunctionCall",
"src": "173:12:9"
},
"nodeType": "YulExpressionStatement",
"src": "173:12:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "130:5:9"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "141:5:9"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "156:3:9",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "161:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "152:3:9"
},
"nodeType": "YulFunctionCall",
"src": "152:11:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "165:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "148:3:9"
},
"nodeType": "YulFunctionCall",
"src": "148:19:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "137:3:9"
},
"nodeType": "YulFunctionCall",
"src": "137:31:9"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "127:2:9"
},
"nodeType": "YulFunctionCall",
"src": "127:42:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "120:6:9"
},
"nodeType": "YulFunctionCall",
"src": "120:50:9"
},
"nodeType": "YulIf",
"src": "117:2:9"
}
]
},
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "55:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "66:5:9",
"type": ""
}
],
"src": "14:179:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "279:139:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "325:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "334:6:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "342:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "327:6:9"
},
"nodeType": "YulFunctionCall",
"src": "327:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "327:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "300:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "309:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "296:3:9"
},
"nodeType": "YulFunctionCall",
"src": "296:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "321:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "292:3:9"
},
"nodeType": "YulFunctionCall",
"src": "292:32:9"
},
"nodeType": "YulIf",
"src": "289:2:9"
},
{
"nodeType": "YulAssignment",
"src": "360:52:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "402:9:9"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "370:31:9"
},
"nodeType": "YulFunctionCall",
"src": "370:42:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "360:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "245:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "256:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "268:6:9",
"type": ""
}
],
"src": "198:220:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "538:279:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "584:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "593:6:9"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "601:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "586:6:9"
},
"nodeType": "YulFunctionCall",
"src": "586:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "586:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "559:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "568:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "555:3:9"
},
"nodeType": "YulFunctionCall",
"src": "555:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "580:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "551:3:9"
},
"nodeType": "YulFunctionCall",
"src": "551:32:9"
},
"nodeType": "YulIf",
"src": "548:2:9"
},
{
"nodeType": "YulAssignment",
"src": "619:52:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "661:9:9"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "629:31:9"
},
"nodeType": "YulFunctionCall",
"src": "629:42:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "619:6:9"
}
]
},
{
"nodeType": "YulAssignment",
"src": "680:61:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "726:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "737:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "722:3:9"
},
"nodeType": "YulFunctionCall",
"src": "722:18:9"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "690:31:9"
},
"nodeType": "YulFunctionCall",
"src": "690:51:9"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "680:6:9"
}
]
},
{
"nodeType": "YulAssignment",
"src": "750:61:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "796:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "807:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "792:3:9"
},
"nodeType": "YulFunctionCall",
"src": "792:18:9"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "760:31:9"
},
"nodeType": "YulFunctionCall",
"src": "760:51:9"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "750:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "488:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "499:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "511:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "519:6:9",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "527:6:9",
"type": ""
}
],
"src": "423:394:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "951:175:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "961:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "973:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "984:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "969:3:9"
},
"nodeType": "YulFunctionCall",
"src": "969:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "961:4:9"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "996:29:9",
"value": {
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1014:3:9",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1019:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "1010:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1010:11:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1023:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1006:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1006:19:9"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "1000:2:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1041:9:9"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1056:6:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "1064:2:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "1052:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1052:15:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1034:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1034:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "1034:34:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1088:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1099:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1084:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1084:18:9"
},
{
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1108:6:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "1116:2:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "1104:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1104:15:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1077:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1077:43:9"
},
"nodeType": "YulExpressionStatement",
"src": "1077:43:9"
}
]
},
"name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "912:9:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "923:6:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "931:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "942:4:9",
"type": ""
}
],
"src": "822:304:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1271:272:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1281:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1293:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1304:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1289:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1289:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "1281:4:9"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1349:111:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1370:1:9",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1377:3:9",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1382:10:9",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "1373:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1373:20:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1363:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1363:31:9"
},
"nodeType": "YulExpressionStatement",
"src": "1363:31:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1414:1:9",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1417:4:9",
"type": "",
"value": "0x21"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1407:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1407:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "1407:15:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1442:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1445:4:9",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1435:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1435:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "1435:15:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1329:6:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1337:1:9",
"type": "",
"value": "8"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "1326:2:9"
},
"nodeType": "YulFunctionCall",
"src": "1326:13:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1319:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1319:21:9"
},
"nodeType": "YulIf",
"src": "1316:2:9"
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1476:9:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1487:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1469:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1469:25:9"
},
"nodeType": "YulExpressionStatement",
"src": "1469:25:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1514:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1525:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1510:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1510:18:9"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1530:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1503:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1503:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "1503:34:9"
}
]
},
"name": "abi_encode_tuple_t_enum$_TokenType_$830_t_uint256__to_t_uint8_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1232:9:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1243:6:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1251:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "1262:4:9",
"type": ""
}
],
"src": "1131:412:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1722:229:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1739:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1750:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1732:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1732:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "1732:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1773:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1784:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1769:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1769:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1789:2:9",
"type": "",
"value": "39"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1762:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1762:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "1762:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1812:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1823:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1808:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1808:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "1828:34:9",
"type": "",
"value": "Cant set marketing address to ad"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1801:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1801:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "1801:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1883:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1894:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1879:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1879:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "1899:9:9",
"type": "",
"value": "dress 0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1872:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1872:37:9"
},
"nodeType": "YulExpressionStatement",
"src": "1872:37:9"
},
{
"nodeType": "YulAssignment",
"src": "1918:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1930:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1941:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1926:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1926:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "1918:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_dce99c70970a28e4656106f6a4e09c4594a81451776a9b7807989806816fff25__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1699:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "1713:4:9",
"type": ""
}
],
"src": "1548:403:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2057:76:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2067:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2079:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2090:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2075:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2075:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "2067:4:9"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2109:9:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2120:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2102:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2102:25:9"
},
"nodeType": "YulExpressionStatement",
"src": "2102:25:9"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2026:9:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2037:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "2048:4:9",
"type": ""
}
],
"src": "1956:177:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2184:74:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2207:22:9",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x12",
"nodeType": "YulIdentifier",
"src": "2209:16:9"
},
"nodeType": "YulFunctionCall",
"src": "2209:18:9"
},
"nodeType": "YulExpressionStatement",
"src": "2209:18:9"
}
]
},
"condition": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2204:1:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2197:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2197:9:9"
},
"nodeType": "YulIf",
"src": "2194:2:9"
},
{
"nodeType": "YulAssignment",
"src": "2238:14:9",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2247:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2250:1:9"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "2243:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2243:9:9"
},
"variableNames": [
{
"name": "r",
"nodeType": "YulIdentifier",
"src": "2238:1:9"
}
]
}
]
},
"name": "checked_div_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "2169:1:9",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "2172:1:9",
"type": ""
}
],
"returnVariables": [
{
"name": "r",
"nodeType": "YulTypedName",
"src": "2178:1:9",
"type": ""
}
],
"src": "2138:120:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2315:116:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2374:22:9",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "2376:16:9"
},
"nodeType": "YulFunctionCall",
"src": "2376:18:9"
},
"nodeType": "YulExpressionStatement",
"src": "2376:18:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2346:1:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2339:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2339:9:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2332:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2332:17:9"
},
{
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2354:1:9"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2365:1:9",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "2361:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2361:6:9"
},
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2369:1:9"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "2357:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2357:14:9"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2351:2:9"
},
"nodeType": "YulFunctionCall",
"src": "2351:21:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "2328:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2328:45:9"
},
"nodeType": "YulIf",
"src": "2325:2:9"
},
{
"nodeType": "YulAssignment",
"src": "2405:20:9",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2420:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2423:1:9"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "2416:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2416:9:9"
},
"variableNames": [
{
"name": "product",
"nodeType": "YulIdentifier",
"src": "2405:7:9"
}
]
}
]
},
"name": "checked_mul_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "2294:1:9",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "2297:1:9",
"type": ""
}
],
"returnVariables": [
{
"name": "product",
"nodeType": "YulTypedName",
"src": "2303:7:9",
"type": ""
}
],
"src": "2263:168:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2485:76:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2507:22:9",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "2509:16:9"
},
"nodeType": "YulFunctionCall",
"src": "2509:18:9"
},
"nodeType": "YulExpressionStatement",
"src": "2509:18:9"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2501:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2504:1:9"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "2498:2:9"
},
"nodeType": "YulFunctionCall",
"src": "2498:8:9"
},
"nodeType": "YulIf",
"src": "2495:2:9"
},
{
"nodeType": "YulAssignment",
"src": "2538:17:9",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2550:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2553:1:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2546:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2546:9:9"
},
"variableNames": [
{
"name": "diff",
"nodeType": "YulIdentifier",
"src": "2538:4:9"
}
]
}
]
},
"name": "checked_sub_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "2467:1:9",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "2470:1:9",
"type": ""
}
],
"returnVariables": [
{
"name": "diff",
"nodeType": "YulTypedName",
"src": "2476:4:9",
"type": ""
}
],
"src": "2436:125:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2621:325:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2631:22:9",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "2645:4:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2651:1:9",
"type": "",
"value": "2"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "2641:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2641:12:9"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2631:6:9"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "2662:38:9",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "2692:4:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2698:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "2688:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2688:12:9"
},
"variables": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulTypedName",
"src": "2666:18:9",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2739:31:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2741:27:9",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2755:6:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2763:4:9",
"type": "",
"value": "0x7f"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "2751:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2751:17:9"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2741:6:9"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "2719:18:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2712:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2712:26:9"
},
"nodeType": "YulIf",
"src": "2709:2:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2829:111:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2850:1:9",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2857:3:9",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2862:10:9",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "2853:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2853:20:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2843:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2843:31:9"
},
"nodeType": "YulExpressionStatement",
"src": "2843:31:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2894:1:9",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2897:4:9",
"type": "",
"value": "0x22"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2887:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2887:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "2887:15:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2922:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2925:4:9",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2915:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2915:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "2915:15:9"
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "2785:18:9"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2808:6:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2816:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "2805:2:9"
},
"nodeType": "YulFunctionCall",
"src": "2805:14:9"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "2782:2:9"
},
"nodeType": "YulFunctionCall",
"src": "2782:38:9"
},
"nodeType": "YulIf",
"src": "2779:2:9"
}
]
},
"name": "extract_byte_array_length",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "2601:4:9",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "2610:6:9",
"type": ""
}
],
"src": "2566:380:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2989:74:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "3012:22:9",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x12",
"nodeType": "YulIdentifier",
"src": "3014:16:9"
},
"nodeType": "YulFunctionCall",
"src": "3014:18:9"
},
"nodeType": "YulExpressionStatement",
"src": "3014:18:9"
}
]
},
"condition": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "3009:1:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "3002:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3002:9:9"
},
"nodeType": "YulIf",
"src": "2999:2:9"
},
{
"nodeType": "YulAssignment",
"src": "3043:14:9",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "3052:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "3055:1:9"
}
],
"functionName": {
"name": "mod",
"nodeType": "YulIdentifier",
"src": "3048:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3048:9:9"
},
"variableNames": [
{
"name": "r",
"nodeType": "YulIdentifier",
"src": "3043:1:9"
}
]
}
]
},
"name": "mod_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "2974:1:9",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "2977:1:9",
"type": ""
}
],
"returnVariables": [
{
"name": "r",
"nodeType": "YulTypedName",
"src": "2983:1:9",
"type": ""
}
],
"src": "2951:112:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3100:95:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3117:1:9",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3124:3:9",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3129:10:9",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "3120:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3120:20:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3110:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3110:31:9"
},
"nodeType": "YulExpressionStatement",
"src": "3110:31:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3157:1:9",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3160:4:9",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3150:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3150:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "3150:15:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3181:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3184:4:9",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3174:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3174:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "3174:15:9"
}
]
},
"name": "panic_error_0x11",
"nodeType": "YulFunctionDefinition",
"src": "3068:127:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3232:95:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3249:1:9",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3256:3:9",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3261:10:9",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "3252:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3252:20:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3242:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3242:31:9"
},
"nodeType": "YulExpressionStatement",
"src": "3242:31:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3289:1:9",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3292:4:9",
"type": "",
"value": "0x12"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3282:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3282:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "3282:15:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3313:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3316:4:9",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3306:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3306:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "3306:15:9"
}
]
},
"name": "panic_error_0x12",
"nodeType": "YulFunctionDefinition",
"src": "3200:127:9"
}
]
},
"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_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := abi_decode_t_address_fromMemory(headStart)\n }\n function abi_decode_tuple_t_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value1, value1) }\n value0 := abi_decode_t_address_fromMemory(headStart)\n value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n value2 := abi_decode_t_address_fromMemory(add(headStart, 64))\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_enum$_TokenType_$830_t_uint256__to_t_uint8_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n if iszero(lt(value0, 8))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_stringliteral_dce99c70970a28e4656106f6a4e09c4594a81451776a9b7807989806816fff25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"Cant set marketing address to ad\")\n mstore(add(headStart, 96), \"dress 0\")\n tail := add(headStart, 128)\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 checked_div_t_uint256(x, y) -> r\n {\n if iszero(y) { panic_error_0x12() }\n r := div(x, y)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n product := mul(x, y)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function extract_byte_array_length(data) -> length\n {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function mod_t_uint256(x, y) -> r\n {\n if iszero(y) { panic_error_0x12() }\n r := mod(x, y)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function panic_error_0x12()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n}",
"id": 9,
"language": "Yul",
"name": "#utility.yul"
}
],
"linkReferences": {},
"object": "60c060405260086080819052675761696620496e7560c01b60a09081526200002b91600a919062000526565b50604080518082019091526003808252622ba32760e91b60209092019182526200005891600b9162000526565b5060c8600d55600d54600e5560c8600f55600f546010556101906011556011546012553480156200008857600080fd5b5060405162002e1738038062002e17833981016040819052620000ab9162000606565b620000bf620000b9620004a0565b620004a4565b6001600160a01b038216620000f15760405162461bcd60e51b8152600401620000e89062000696565b60405180910390fd5b600c805460ff191660121790556e13426172c74d822b878fe8000000006007819055620001219060001962000776565b6200012f906000196200071f565b600855600d54600e55600f54601055601580546001600160a01b03199081166001600160a01b038581169190911790925560168054909116918316919091179055601154601255600754620001af90612710906200019b906005620004f4602090811b62000f2b17901c565b6200050960201b62000f3e1790919060201c565b6017556016805460ff60a81b1916600160a81b17905560085460016000620001d662000517565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000839050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023957600080fd5b505afa1580156200024e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002749190620005e9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bd57600080fd5b505afa158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f89190620005e9565b6040518363ffffffff1660e01b8152600401620003179291906200064f565b602060405180830381600087803b1580156200033257600080fd5b505af115801562000347573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036d9190620005e9565b601480546001600160a01b03199081166001600160a01b039384161790915560138054909116918316919091179055600160046000620003ac62000517565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003f662000517565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040516200043d9190620006dd565b60405180910390a3306200045062000517565b6001600160a01b03167f56358b41df5fa59f5639228f0930994cbdde383c8a8fd74e06c04e1deebe3562600260016040516200048e92919062000669565b60405180910390a350505050620007b9565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620005028284620006fd565b9392505050565b6000620005028284620006e6565b6000546001600160a01b031690565b828054620005349062000739565b90600052602060002090601f016020900481019282620005585760008555620005a3565b82601f106200057357805160ff1916838001178555620005a3565b82800160010185558215620005a3579182015b82811115620005a357825182559160200191906001019062000586565b50620005b1929150620005b5565b5090565b5b80821115620005b15760008155600101620005b6565b80516001600160a01b0381168114620005e457600080fd5b919050565b600060208284031215620005fb578081fd5b6200050282620005cc565b6000806000606084860312156200061b578182fd5b6200062684620005cc565b92506200063660208501620005cc565b91506200064660408501620005cc565b90509250925092565b6001600160a01b0392831681529116602082015260400190565b60408101600884106200068c57634e487b7160e01b600052602160045260246000fd5b9281526020015290565b60208082526027908201527f43616e7420736574206d61726b6574696e67206164647265737320746f2061646040820152660647265737320360cc1b606082015260800190565b90815260200190565b600082620006f857620006f8620007a3565b500490565b60008160001904831182151516156200071a576200071a6200078d565b500290565b6000828210156200073457620007346200078d565b500390565b6002810460018216806200074e57607f821691505b602082108114156200077057634e487b7160e01b600052602260045260246000fd5b50919050565b600082620007885762000788620007a3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61264e80620007c96000396000f3fe6080604052600436106102135760003560e01c80634a74bb021161011857806395d89b41116100a0578063caac79341161006f578063caac7934146105bc578063dd62ed3e146105d1578063ea2f0b37146105f1578063f2fde38b14610611578063ffa1ad74146106315761021a565b806395d89b4114610547578063a457c2d71461055c578063a9059cbb1461057c578063c49b9a801461059c5761021a565b806370a08231116100e757806370a08231146104bd578063715018a6146104dd57806388f82020146104f25780638da5cb5b146105125780638ee88c53146105275761021a565b80634a74bb021461045357806352390c02146104685780635342acb4146104885780636bc87c3a146104a85761021a565b8063313ce5671161019b5780633bd5d1731161016a5780633bd5d173146103be578063437823ec146103de5780634549b039146103fe578063457c194c1461041e57806349bd5a5e1461043e5761021a565b8063313ce567146103475780633685d4191461036957806339509351146103895780633b124fe7146103a95761021a565b80631694505e116101e25780631694505e146102bb57806318160ddd146102dd57806322976e0d146102f257806323b872dd146103075780632d838119146103275761021a565b8063061c82d01461021f57806306fdde0314610241578063095ea7b31461026c57806313114a9d146102995761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023f61023a36600461201d565b610646565b005b34801561024d57600080fd5b5061025661069c565b60405161026391906120e7565b60405180910390f35b34801561027857600080fd5b5061028c610287366004611fd8565b61072e565b60405161026391906120dc565b3480156102a557600080fd5b506102ae61074c565b604051610263919061243f565b3480156102c757600080fd5b506102d0610752565b604051610263919061208d565b3480156102e957600080fd5b506102ae610761565b3480156102fe57600080fd5b506102ae610767565b34801561031357600080fd5b5061028c610322366004611f98565b61076d565b34801561033357600080fd5b506102ae61034236600461201d565b6107f4565b34801561035357600080fd5b5061035c610837565b60405161026391906124ce565b34801561037557600080fd5b5061023f610384366004611f28565b610840565b34801561039557600080fd5b5061028c6103a4366004611fd8565b6109de565b3480156103b557600080fd5b506102ae610a2c565b3480156103ca57600080fd5b5061023f6103d936600461201d565b610a32565b3480156103ea57600080fd5b5061023f6103f9366004611f28565b610aef565b34801561040a57600080fd5b506102ae610419366004612035565b610b1b565b34801561042a57600080fd5b5061023f61043936600461201d565b610b7a565b34801561044a57600080fd5b506102d0610b9d565b34801561045f57600080fd5b5061028c610bac565b34801561047457600080fd5b5061023f610483366004611f28565b610bbc565b34801561049457600080fd5b5061028c6104a3366004611f28565b610cbd565b3480156104b457600080fd5b506102ae610cdb565b3480156104c957600080fd5b506102ae6104d8366004611f28565b610ce1565b3480156104e957600080fd5b5061023f610d43565b3480156104fe57600080fd5b5061028c61050d366004611f28565b610d57565b34801561051e57600080fd5b506102d0610d75565b34801561053357600080fd5b5061023f61054236600461201d565b610d84565b34801561055357600080fd5b50610256610da7565b34801561056857600080fd5b5061028c610577366004611fd8565b610db6565b34801561058857600080fd5b5061028c610597366004611fd8565b610e1e565b3480156105a857600080fd5b5061023f6105b7366004612003565b610e32565b3480156105c857600080fd5b506102d0610e8c565b3480156105dd57600080fd5b506102ae6105ec366004611f60565b610e9b565b3480156105fd57600080fd5b5061023f61060c366004611f28565b610ec6565b34801561061d57600080fd5b5061023f61062c366004611f28565b610eef565b34801561063d57600080fd5b506102ae610f26565b61064e610f4a565b600d819055601154600f546109c4919061066890846124dc565b61067291906124dc565b11156106995760405162461bcd60e51b815260040161069090612286565b60405180910390fd5b50565b6060600a80546106ab9061254a565b80601f01602080910402602001604051908101604052809291908181526020018280546106d79061254a565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061074261073b610f89565b8484610f8d565b5060015b92915050565b60095490565b6013546001600160a01b031681565b60075490565b60115481565b600061077a848484611041565b6107ea84610786610f89565b6107e5856040518060600160405280602881526020016125cc602891396001600160a01b038a166000908152600360205260408120906107c4610f89565b6001600160a01b031681526020810191909152604001600020549190611183565b610f8d565b5060019392505050565b60006008548211156108185760405162461bcd60e51b81526004016106909061217d565b60006108226111af565b905061082e8382610f3e565b9150505b919050565b600c5460ff1690565b610848610f4a565b6001600160a01b03811660009081526005602052604090205460ff166108805760405162461bcd60e51b81526004016106909061224f565b60005b6006548110156109da57816001600160a01b0316600682815481106108b857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156109c857600680546108e390600190612533565b8154811061090157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b03909216918390811061093b57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806109a157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190556109da565b806109d281612585565b915050610883565b5050565b60006107426109eb610f89565b846107e585600360006109fc610f89565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906111d2565b600d5481565b6000610a3c610f89565b6001600160a01b03811660009081526005602052604090205490915060ff1615610a785760405162461bcd60e51b8152600401610690906123f3565b6000610a83836111de565b5050506001600160a01b038616600090815260016020526040902054939450610ab193925084915050611239565b6001600160a01b038316600090815260016020526040902055600854610ad79082611239565b600855600954610ae790846111d2565b600955505050565b610af7610f4a565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600754831115610b3f5760405162461bcd60e51b8152600401610690906122b5565b81610b5f576000610b4f846111de565b5094965061074695505050505050565b6000610b6a846111de565b5093965061074695505050505050565b610b82610f4a565b6011819055600f54600d546109c491839161066891906124dc565b6014546001600160a01b031681565b601654600160a81b900460ff1681565b610bc4610f4a565b6001600160a01b03811660009081526005602052604090205460ff1615610bfd5760405162461bcd60e51b81526004016106909061224f565b6001600160a01b03811660009081526001602052604090205415610c57576001600160a01b038116600090815260016020526040902054610c3d906107f4565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b600f5481565b6001600160a01b03811660009081526005602052604081205460ff1615610d2157506001600160a01b038116600090815260026020526040902054610832565b6001600160a01b038216600090815260016020526040902054610746906107f4565b610d4b610f4a565b610d556000611245565b565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546001600160a01b031690565b610d8c610f4a565b600f819055601154600d546109c491906106689084906124dc565b6060600b80546106ab9061254a565b6000610742610dc3610f89565b846107e5856040518060600160405280602581526020016125f46025913960036000610ded610f89565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611183565b6000610742610e2b610f89565b8484611041565b610e3a610f4a565b6016805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610e819083906120dc565b60405180910390a150565b6015546001600160a01b031681565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610ece610f4a565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610ef7610f4a565b6001600160a01b038116610f1d5760405162461bcd60e51b8152600401610690906121c7565b61069981611245565b600181565b6000610f378284612514565b9392505050565b6000610f3782846124f4565b610f52610f89565b6001600160a01b0316610f63610d75565b6001600160a01b031614610d555760405162461bcd60e51b8152600401610690906122ec565b3390565b6001600160a01b038316610fb35760405162461bcd60e51b8152600401610690906123af565b6001600160a01b038216610fd95760405162461bcd60e51b81526004016106909061220d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061103490859061243f565b60405180910390a3505050565b6001600160a01b0383166110675760405162461bcd60e51b81526004016106909061236a565b6001600160a01b03821661108d5760405162461bcd60e51b81526004016106909061213a565b600081116110ad5760405162461bcd60e51b815260040161069090612321565b60006110b830610ce1565b601754909150811080159081906110d95750601654600160a01b900460ff16155b80156110f357506014546001600160a01b03868116911614155b80156111085750601654600160a81b900460ff165b1561111b57601754915061111b82611295565b61112483611336565b6001600160a01b03851660009081526004602052604090205460019060ff168061116657506001600160a01b03851660009081526004602052604090205460ff165b1561116f575060005b61117b8686868461139c565b505050505050565b600081848411156111a75760405162461bcd60e51b815260040161069091906120e7565b505050900390565b60008060006111bc61150a565b90925090506111cb8282610f3e565b9250505090565b6000610f3782846124dc565b60008060008060008060008060008060006111f88c6116c7565b935093509350935060008060006112198f8787876112146111af565b61171c565b919f509d509b509599509397509195509350505050919395979092949650565b6000610f378284612533565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6016805460ff60a01b1916600160a01b17905560006112b5826002610f3e565b905060006112c38383611239565b9050476112cf8361177e565b60006112db4783611239565b90506112e783826118fb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161131a939291906124b8565b60405180910390a150506016805460ff60a01b19169055505050565b600061135061271061134a84610190610f2b565b90610f3e565b90504781811115611397576016546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611395573d6000803e3d6000fd5b505b505050565b806113a9576113a96119ad565b6001600160a01b03841660009081526005602052604090205460ff1680156113ea57506001600160a01b03831660009081526005602052604090205460ff16155b156113ff576113fa8484846119f5565b6114fd565b6001600160a01b03841660009081526005602052604090205460ff1615801561144057506001600160a01b03831660009081526005602052604090205460ff165b15611450576113fa848484611b39565b6001600160a01b03841660009081526005602052604090205460ff1615801561149257506001600160a01b03831660009081526005602052604090205460ff16155b156114a2576113fa848484611bf8565b6001600160a01b03841660009081526005602052604090205460ff1680156114e257506001600160a01b03831660009081526005602052604090205460ff165b156114f2576113fa848484611c52565b6114fd848484611bf8565b8061139557611395611cdb565b6008546007546000918291825b6006548110156116955782600160006006848154811061154757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806115c0575081600260006006848154811061159957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156115d757600854600754945094505050506116c3565b61162b60016000600684815481106115ff57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611239565b9250611681600260006006848154811061165557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611239565b91508061168d81612585565b915050611517565b506007546008546116a591610f3e565b8210156116bd576008546007549350935050506116c3565b90925090505b9091565b60008060008060006116d886611cef565b905060006116e587611d0c565b905060006116f288611d29565b9050600061170c8261170685818d89611239565b90611239565b9993985091965094509092505050565b600080808061172b8986610f2b565b905060006117398987610f2b565b905060006117478988610f2b565b905060006117558989610f2b565b905060006117698261170685818989611239565b949d949c50929a509298505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106117c157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561181557600080fd5b505afa158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d9190611f44565b8160018151811061186e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526013546118949130911684610f8d565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac947906118cd908590600090869030904290600401612448565b600060405180830381600087803b1580156118e757600080fd5b505af115801561117b573d6000803e3d6000fd5b6013546119139030906001600160a01b031684610f8d565b6013546001600160a01b031663f305d719823085600080611932610d75565b426040518863ffffffff1660e01b8152600401611954969594939291906120a1565b6060604051808303818588803b15801561196d57600080fd5b505af1158015611981573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119a69190612060565b5050505050565b600d541580156119bd5750600f54155b80156119c95750601154155b156119d357610d55565b600d8054600e55600f8054601055601180546012556000928390559082905555565b6000806000806000806000611a09886111de565b9650965096509650965096509650611a4f88600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461123990919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611a7e9088611239565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054611aad90876111d2565b6001600160a01b038a16600090815260016020526040902055611acf82611d5f565b611ad881611de7565b611ae28584611ef4565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611b25919061243f565b60405180910390a350505050505050505050565b6000806000806000806000611b4d886111de565b9650965096509650965096509650611b9387600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461123990919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054611bc990856111d2565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611aad90876111d2565b6000806000806000806000611c0c886111de565b9650965096509650965096509650611a7e87600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461123990919063ffffffff16565b6000806000806000806000611c66886111de565b9650965096509650965096509650611cac88600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461123990919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611b939088611239565b600e54600d55601054600f55601254601155565b600061074661271061134a600d5485610f2b90919063ffffffff16565b600061074661271061134a600f5485610f2b90919063ffffffff16565b6015546000906001600160a01b0316611d4457506000610832565b61074661271061134a60115485610f2b90919063ffffffff16565b6000611d696111af565b90506000611d778383610f2b565b30600090815260016020526040902054909150611d9490826111d2565b3060009081526001602090815260408083209390935560059052205460ff16156113975730600090815260026020526040902054611dd290846111d2565b30600090815260026020526040902055505050565b8015610699576000611df76111af565b90506000611e058383610f2b565b6015546001600160a01b0316600090815260016020526040902054909150611e2d90826111d2565b601580546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615611ea8576015546001600160a01b0316600090815260026020526040902054611e8c90846111d2565b6015546001600160a01b03166000908152600260205260409020555b6015546001600160a01b0316611ebc610f89565b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611034919061243f565b600854611f019083611239565b600855600954611f1190826111d2565b6009555050565b8035801515811461083257600080fd5b600060208284031215611f39578081fd5b8135610f37816125b6565b600060208284031215611f55578081fd5b8151610f37816125b6565b60008060408385031215611f72578081fd5b8235611f7d816125b6565b91506020830135611f8d816125b6565b809150509250929050565b600080600060608486031215611fac578081fd5b8335611fb7816125b6565b92506020840135611fc7816125b6565b929592945050506040919091013590565b60008060408385031215611fea578182fd5b8235611ff5816125b6565b946020939093013593505050565b600060208284031215612014578081fd5b610f3782611f18565b60006020828403121561202e578081fd5b5035919050565b60008060408385031215612047578182fd5b8235915061205760208401611f18565b90509250929050565b600080600060608486031215612074578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612113578581018301518582016040015282016120f7565b818111156121245783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b602080825260159082015274546f74616c20666565206973206f7665722032352560581b604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156124975784516001600160a01b031683529383019391830191600101612472565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b600082198211156124ef576124ef6125a0565b500190565b60008261250f57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561252e5761252e6125a0565b500290565b600082821015612545576125456125a0565b500390565b60028104600182168061255e57607f821691505b6020821081141561257f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612599576125996125a0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461069957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab8292dd21b86cfdb0512d32809e8ef4616b51da42b937937beb1d52b86d056364736f6c63430008010033",
"opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0x8 PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH8 0x5761696620496E75 PUSH1 0xC0 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH3 0x2B SWAP2 PUSH1 0xA SWAP2 SWAP1 PUSH3 0x526 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP1 DUP3 MSTORE PUSH3 0x2BA327 PUSH1 0xE9 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH3 0x58 SWAP2 PUSH1 0xB SWAP2 PUSH3 0x526 JUMP JUMPDEST POP PUSH1 0xC8 PUSH1 0xD SSTORE PUSH1 0xD SLOAD PUSH1 0xE SSTORE PUSH1 0xC8 PUSH1 0xF SSTORE PUSH1 0xF SLOAD PUSH1 0x10 SSTORE PUSH2 0x190 PUSH1 0x11 SSTORE PUSH1 0x11 SLOAD PUSH1 0x12 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2E17 CODESIZE SUB DUP1 PUSH3 0x2E17 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0xAB SWAP2 PUSH3 0x606 JUMP JUMPDEST PUSH3 0xBF PUSH3 0xB9 PUSH3 0x4A0 JUMP JUMPDEST PUSH3 0x4A4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xF1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xE8 SWAP1 PUSH3 0x696 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE PUSH15 0x13426172C74D822B878FE800000000 PUSH1 0x7 DUP2 SWAP1 SSTORE PUSH3 0x121 SWAP1 PUSH1 0x0 NOT PUSH3 0x776 JUMP JUMPDEST PUSH3 0x12F SWAP1 PUSH1 0x0 NOT PUSH3 0x71F JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0xD SLOAD PUSH1 0xE SSTORE PUSH1 0xF SLOAD PUSH1 0x10 SSTORE PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE PUSH1 0x16 DUP1 SLOAD SWAP1 SWAP2 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x11 SLOAD PUSH1 0x12 SSTORE PUSH1 0x7 SLOAD PUSH3 0x1AF SWAP1 PUSH2 0x2710 SWAP1 PUSH3 0x19B SWAP1 PUSH1 0x5 PUSH3 0x4F4 PUSH1 0x20 SWAP1 DUP2 SHL PUSH3 0xF2B OR SWAP1 SHR JUMP JUMPDEST PUSH3 0x509 PUSH1 0x20 SHL PUSH3 0xF3E OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x17 SSTORE PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA8 SHL NOT AND PUSH1 0x1 PUSH1 0xA8 SHL OR SWAP1 SSTORE PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x0 PUSH3 0x1D6 PUSH3 0x517 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x0 DUP4 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC45A0155 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x24E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x274 SWAP2 SWAP1 PUSH3 0x5E9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC9C65396 ADDRESS DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAD5C4648 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x2D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x2F8 SWAP2 SWAP1 PUSH3 0x5E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x317 SWAP3 SWAP2 SWAP1 PUSH3 0x64F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x347 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x36D SWAP2 SWAP1 PUSH3 0x5E9 JUMP JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x13 DUP1 SLOAD SWAP1 SWAP2 AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x4 PUSH1 0x0 PUSH3 0x3AC PUSH3 0x517 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP5 ISZERO ISZERO PUSH1 0xFF NOT SWAP6 DUP7 AND OR SWAP1 SSTORE ADDRESS DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH3 0x3F6 PUSH3 0x517 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH3 0x43D SWAP2 SWAP1 PUSH3 0x6DD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 ADDRESS PUSH3 0x450 PUSH3 0x517 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x56358B41DF5FA59F5639228F0930994CBDDE383C8A8FD74E06C04E1DEEBE3562 PUSH1 0x2 PUSH1 0x1 PUSH1 0x40 MLOAD PUSH3 0x48E SWAP3 SWAP2 SWAP1 PUSH3 0x669 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP PUSH3 0x7B9 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x502 DUP3 DUP5 PUSH3 0x6FD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x502 DUP3 DUP5 PUSH3 0x6E6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x534 SWAP1 PUSH3 0x739 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x558 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x5A3 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x573 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x5A3 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x5A3 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x5A3 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x586 JUMP JUMPDEST POP PUSH3 0x5B1 SWAP3 SWAP2 POP PUSH3 0x5B5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x5B1 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x5B6 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x5E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5FB JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH3 0x502 DUP3 PUSH3 0x5CC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x61B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH3 0x626 DUP5 PUSH3 0x5CC JUMP JUMPDEST SWAP3 POP PUSH3 0x636 PUSH1 0x20 DUP6 ADD PUSH3 0x5CC JUMP JUMPDEST SWAP2 POP PUSH3 0x646 PUSH1 0x40 DUP6 ADD PUSH3 0x5CC JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x8 DUP5 LT PUSH3 0x68C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x27 SWAP1 DUP3 ADD MSTORE PUSH32 0x43616E7420736574206D61726B6574696E67206164647265737320746F206164 PUSH1 0x40 DUP3 ADD MSTORE PUSH7 0x6472657373203 PUSH1 0xCC SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0x6F8 JUMPI PUSH3 0x6F8 PUSH3 0x7A3 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH3 0x71A JUMPI PUSH3 0x71A PUSH3 0x78D JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x734 JUMPI PUSH3 0x734 PUSH3 0x78D JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH3 0x74E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x770 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0x788 JUMPI PUSH3 0x788 PUSH3 0x7A3 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x264E DUP1 PUSH3 0x7C9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x213 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4A74BB02 GT PUSH2 0x118 JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xCAAC7934 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xCAAC7934 EQ PUSH2 0x5BC JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5D1 JUMPI DUP1 PUSH4 0xEA2F0B37 EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x631 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x547 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x55C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x57C JUMPI DUP1 PUSH4 0xC49B9A80 EQ PUSH2 0x59C JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x70A08231 GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x4BD JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0x88F82020 EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x512 JUMPI DUP1 PUSH4 0x8EE88C53 EQ PUSH2 0x527 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x4A74BB02 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0x52390C02 EQ PUSH2 0x468 JUMPI DUP1 PUSH4 0x5342ACB4 EQ PUSH2 0x488 JUMPI DUP1 PUSH4 0x6BC87C3A EQ PUSH2 0x4A8 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x19B JUMPI DUP1 PUSH4 0x3BD5D173 GT PUSH2 0x16A JUMPI DUP1 PUSH4 0x3BD5D173 EQ PUSH2 0x3BE JUMPI DUP1 PUSH4 0x437823EC EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0x4549B039 EQ PUSH2 0x3FE JUMPI DUP1 PUSH4 0x457C194C EQ PUSH2 0x41E JUMPI DUP1 PUSH4 0x49BD5A5E EQ PUSH2 0x43E JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x347 JUMPI DUP1 PUSH4 0x3685D419 EQ PUSH2 0x369 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x3B124FE7 EQ PUSH2 0x3A9 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x2BB JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2DD JUMPI DUP1 PUSH4 0x22976E0D EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x2D838119 EQ PUSH2 0x327 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x61C82D0 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0x13114A9D EQ PUSH2 0x299 JUMPI PUSH2 0x21A JUMP JUMPDEST CALLDATASIZE PUSH2 0x21A JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x23A CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0x646 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x256 PUSH2 0x69C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x20E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x287 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FD8 JUMP JUMPDEST PUSH2 0x72E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x20DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x74C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x243F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D0 PUSH2 0x752 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x208D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x761 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x767 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F98 JUMP JUMPDEST PUSH2 0x76D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x342 CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0x7F4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x353 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x35C PUSH2 0x837 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x384 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0x840 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x3A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FD8 JUMP JUMPDEST PUSH2 0x9DE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0xA2C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0xA32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x3F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xAEF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x2035 JUMP JUMPDEST PUSH2 0xB1B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x439 CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0xB7A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D0 PUSH2 0xB9D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0xBAC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x474 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xBBC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x4A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xCBD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0xCDB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x4D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xCE1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0xD43 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x50D CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xD57 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D0 PUSH2 0xD75 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x533 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x542 CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0xD84 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x553 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x256 PUSH2 0xDA7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x577 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FD8 JUMP JUMPDEST PUSH2 0xDB6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x588 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x597 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FD8 JUMP JUMPDEST PUSH2 0xE1E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x5B7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2003 JUMP JUMPDEST PUSH2 0xE32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D0 PUSH2 0xE8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x5EC CALLDATASIZE PUSH1 0x4 PUSH2 0x1F60 JUMP JUMPDEST PUSH2 0xE9B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x60C CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xEC6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x62C CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xEEF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0xF26 JUMP JUMPDEST PUSH2 0x64E PUSH2 0xF4A JUMP JUMPDEST PUSH1 0xD DUP2 SWAP1 SSTORE PUSH1 0x11 SLOAD PUSH1 0xF SLOAD PUSH2 0x9C4 SWAP2 SWAP1 PUSH2 0x668 SWAP1 DUP5 PUSH2 0x24DC JUMP JUMPDEST PUSH2 0x672 SWAP2 SWAP1 PUSH2 0x24DC JUMP JUMPDEST GT ISZERO PUSH2 0x699 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x2286 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xA DUP1 SLOAD PUSH2 0x6AB SWAP1 PUSH2 0x254A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x6D7 SWAP1 PUSH2 0x254A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x724 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x6F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x724 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x707 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x742 PUSH2 0x73B PUSH2 0xF89 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xF8D JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77A DUP5 DUP5 DUP5 PUSH2 0x1041 JUMP JUMPDEST PUSH2 0x7EA DUP5 PUSH2 0x786 PUSH2 0xF89 JUMP JUMPDEST PUSH2 0x7E5 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25CC PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x7C4 PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x1183 JUMP JUMPDEST PUSH2 0xF8D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 SLOAD DUP3 GT ISZERO PUSH2 0x818 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x217D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x822 PUSH2 0x11AF JUMP JUMPDEST SWAP1 POP PUSH2 0x82E DUP4 DUP3 PUSH2 0xF3E JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x848 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x880 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x224F JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x9DA JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x8B8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x9C8 JUMPI PUSH1 0x6 DUP1 SLOAD PUSH2 0x8E3 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2533 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x901 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x93B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP2 DUP5 AND DUP2 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP3 SWAP1 SSTORE PUSH1 0x5 SWAP1 SWAP3 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD DUP1 PUSH2 0x9A1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP2 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE ADD SWAP1 SSTORE PUSH2 0x9DA JUMP JUMPDEST DUP1 PUSH2 0x9D2 DUP2 PUSH2 0x2585 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x883 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x742 PUSH2 0x9EB PUSH2 0xF89 JUMP JUMPDEST DUP5 PUSH2 0x7E5 DUP6 PUSH1 0x3 PUSH1 0x0 PUSH2 0x9FC PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xA78 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x23F3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA83 DUP4 PUSH2 0x11DE JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP4 SWAP5 POP PUSH2 0xAB1 SWAP4 SWAP3 POP DUP5 SWAP2 POP POP PUSH2 0x1239 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x8 SLOAD PUSH2 0xAD7 SWAP1 DUP3 PUSH2 0x1239 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x9 SLOAD PUSH2 0xAE7 SWAP1 DUP5 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x9 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0xAF7 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x7 SLOAD DUP4 GT ISZERO PUSH2 0xB3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x22B5 JUMP JUMPDEST DUP2 PUSH2 0xB5F JUMPI PUSH1 0x0 PUSH2 0xB4F DUP5 PUSH2 0x11DE JUMP JUMPDEST POP SWAP5 SWAP7 POP PUSH2 0x746 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB6A DUP5 PUSH2 0x11DE JUMP JUMPDEST POP SWAP4 SWAP7 POP PUSH2 0x746 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB82 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x11 DUP2 SWAP1 SSTORE PUSH1 0xF SLOAD PUSH1 0xD SLOAD PUSH2 0x9C4 SWAP2 DUP4 SWAP2 PUSH2 0x668 SWAP2 SWAP1 PUSH2 0x24DC JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xBC4 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xBFD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x224F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xC57 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC3D SWAP1 PUSH2 0x7F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE SWAP1 SWAP2 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xD21 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x746 SWAP1 PUSH2 0x7F4 JUMP JUMPDEST PUSH2 0xD4B PUSH2 0xF4A JUMP JUMPDEST PUSH2 0xD55 PUSH1 0x0 PUSH2 0x1245 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xD8C PUSH2 0xF4A JUMP JUMPDEST PUSH1 0xF DUP2 SWAP1 SSTORE PUSH1 0x11 SLOAD PUSH1 0xD SLOAD PUSH2 0x9C4 SWAP2 SWAP1 PUSH2 0x668 SWAP1 DUP5 SWAP1 PUSH2 0x24DC JUMP JUMPDEST PUSH1 0x60 PUSH1 0xB DUP1 SLOAD PUSH2 0x6AB SWAP1 PUSH2 0x254A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x742 PUSH2 0xDC3 PUSH2 0xF89 JUMP JUMPDEST DUP5 PUSH2 0x7E5 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25F4 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x3 PUSH1 0x0 PUSH2 0xDED PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x1183 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x742 PUSH2 0xE2B PUSH2 0xF89 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x1041 JUMP JUMPDEST PUSH2 0xE3A PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA8 SHL NOT AND PUSH1 0x1 PUSH1 0xA8 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x53726DFCAF90650AA7EB35524F4D3220F07413C8D6CB404CC8C18BF5591BC159 SWAP1 PUSH2 0xE81 SWAP1 DUP4 SWAP1 PUSH2 0x20DC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xECE PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xEF7 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF1D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x21C7 JUMP JUMPDEST PUSH2 0x699 DUP2 PUSH2 0x1245 JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF37 DUP3 DUP5 PUSH2 0x2514 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF37 DUP3 DUP5 PUSH2 0x24F4 JUMP JUMPDEST PUSH2 0xF52 PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xF63 PUSH2 0xD75 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x22EC JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xFB3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x23AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xFD9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x220D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1034 SWAP1 DUP6 SWAP1 PUSH2 0x243F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1067 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x236A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x108D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x213A JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x10AD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x2321 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B8 ADDRESS PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x17 SLOAD SWAP1 SWAP2 POP DUP2 LT DUP1 ISZERO SWAP1 DUP2 SWAP1 PUSH2 0x10D9 JUMPI POP PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x10F3 JUMPI POP PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1108 JUMPI POP PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x111B JUMPI PUSH1 0x17 SLOAD SWAP2 POP PUSH2 0x111B DUP3 PUSH2 0x1295 JUMP JUMPDEST PUSH2 0x1124 DUP4 PUSH2 0x1336 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x1166 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x116F JUMPI POP PUSH1 0x0 JUMPDEST PUSH2 0x117B DUP7 DUP7 DUP7 DUP5 PUSH2 0x139C JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x11A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x20E7 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x11BC PUSH2 0x150A JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x11CB DUP3 DUP3 PUSH2 0xF3E JUMP JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF37 DUP3 DUP5 PUSH2 0x24DC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x11F8 DUP13 PUSH2 0x16C7 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1219 DUP16 DUP8 DUP8 DUP8 PUSH2 0x1214 PUSH2 0x11AF JUMP JUMPDEST PUSH2 0x171C JUMP JUMPDEST SWAP2 SWAP16 POP SWAP14 POP SWAP12 POP SWAP6 SWAP10 POP SWAP4 SWAP8 POP SWAP2 SWAP6 POP SWAP4 POP POP POP POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP1 SWAP3 SWAP5 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF37 DUP3 DUP5 PUSH2 0x2533 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH1 0x0 PUSH2 0x12B5 DUP3 PUSH1 0x2 PUSH2 0xF3E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12C3 DUP4 DUP4 PUSH2 0x1239 JUMP JUMPDEST SWAP1 POP SELFBALANCE PUSH2 0x12CF DUP4 PUSH2 0x177E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12DB SELFBALANCE DUP4 PUSH2 0x1239 JUMP JUMPDEST SWAP1 POP PUSH2 0x12E7 DUP4 DUP3 PUSH2 0x18FB JUMP JUMPDEST PUSH32 0x17BBFB9A6069321B6DED73BD96327C9E6B7212A5CD51FF219CD61370ACAFB561 DUP5 DUP3 DUP6 PUSH1 0x40 MLOAD PUSH2 0x131A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x24B8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1350 PUSH2 0x2710 PUSH2 0x134A DUP5 PUSH2 0x190 PUSH2 0xF2B JUMP JUMPDEST SWAP1 PUSH2 0xF3E JUMP JUMPDEST SWAP1 POP SELFBALANCE DUP2 DUP2 GT ISZERO PUSH2 0x1397 JUMPI PUSH1 0x16 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1395 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x13A9 JUMPI PUSH2 0x13A9 PUSH2 0x19AD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x13EA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x13FF JUMPI PUSH2 0x13FA DUP5 DUP5 DUP5 PUSH2 0x19F5 JUMP JUMPDEST PUSH2 0x14FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1440 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x1450 JUMPI PUSH2 0x13FA DUP5 DUP5 DUP5 PUSH2 0x1B39 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1492 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x14A2 JUMPI PUSH2 0x13FA DUP5 DUP5 DUP5 PUSH2 0x1BF8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x14E2 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x14F2 JUMPI PUSH2 0x13FA DUP5 DUP5 DUP5 PUSH2 0x1C52 JUMP JUMPDEST PUSH2 0x14FD DUP5 DUP5 DUP5 PUSH2 0x1BF8 JUMP JUMPDEST DUP1 PUSH2 0x1395 JUMPI PUSH2 0x1395 PUSH2 0x1CDB JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x1695 JUMPI DUP3 PUSH1 0x1 PUSH1 0x0 PUSH1 0x6 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1547 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD GT DUP1 PUSH2 0x15C0 JUMPI POP DUP2 PUSH1 0x2 PUSH1 0x0 PUSH1 0x6 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1599 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD GT JUMPDEST ISZERO PUSH2 0x15D7 JUMPI PUSH1 0x8 SLOAD PUSH1 0x7 SLOAD SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x16C3 JUMP JUMPDEST PUSH2 0x162B PUSH1 0x1 PUSH1 0x0 PUSH1 0x6 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x15FF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD DUP5 SWAP1 PUSH2 0x1239 JUMP JUMPDEST SWAP3 POP PUSH2 0x1681 PUSH1 0x2 PUSH1 0x0 PUSH1 0x6 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1655 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH2 0x1239 JUMP JUMPDEST SWAP2 POP DUP1 PUSH2 0x168D DUP2 PUSH2 0x2585 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1517 JUMP JUMPDEST POP PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH2 0x16A5 SWAP2 PUSH2 0xF3E JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x16BD JUMPI PUSH1 0x8 SLOAD PUSH1 0x7 SLOAD SWAP4 POP SWAP4 POP POP POP PUSH2 0x16C3 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x16D8 DUP7 PUSH2 0x1CEF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x16E5 DUP8 PUSH2 0x1D0C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x16F2 DUP9 PUSH2 0x1D29 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x170C DUP3 PUSH2 0x1706 DUP6 DUP2 DUP14 DUP10 PUSH2 0x1239 JUMP JUMPDEST SWAP1 PUSH2 0x1239 JUMP JUMPDEST SWAP10 SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x172B DUP10 DUP7 PUSH2 0xF2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1739 DUP10 DUP8 PUSH2 0xF2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1747 DUP10 DUP9 PUSH2 0xF2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1755 DUP10 DUP10 PUSH2 0xF2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1769 DUP3 PUSH2 0x1706 DUP6 DUP2 DUP10 DUP10 PUSH2 0x1239 JUMP JUMPDEST SWAP5 SWAP14 SWAP5 SWAP13 POP SWAP3 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP ADDRESS DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x17C1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x13 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP4 AND SWAP3 PUSH4 0xAD5C4648 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1815 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1829 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x184D SWAP2 SWAP1 PUSH2 0x1F44 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x186E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x13 SLOAD PUSH2 0x1894 SWAP2 ADDRESS SWAP2 AND DUP5 PUSH2 0xF8D JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x40 MLOAD PUSH4 0x791AC947 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x791AC947 SWAP1 PUSH2 0x18CD SWAP1 DUP6 SWAP1 PUSH1 0x0 SWAP1 DUP7 SWAP1 ADDRESS SWAP1 TIMESTAMP SWAP1 PUSH1 0x4 ADD PUSH2 0x2448 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x117B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x13 SLOAD PUSH2 0x1913 SWAP1 ADDRESS SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH2 0xF8D JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF305D719 DUP3 ADDRESS DUP6 PUSH1 0x0 DUP1 PUSH2 0x1932 PUSH2 0xD75 JUMP JUMPDEST TIMESTAMP PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1954 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x20A1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x196D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1981 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A6 SWAP2 SWAP1 PUSH2 0x2060 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0xD SLOAD ISZERO DUP1 ISZERO PUSH2 0x19BD JUMPI POP PUSH1 0xF SLOAD ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x19C9 JUMPI POP PUSH1 0x11 SLOAD ISZERO JUMPDEST ISZERO PUSH2 0x19D3 JUMPI PUSH2 0xD55 JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0xE SSTORE PUSH1 0xF DUP1 SLOAD PUSH1 0x10 SSTORE PUSH1 0x11 DUP1 SLOAD PUSH1 0x12 SSTORE PUSH1 0x0 SWAP3 DUP4 SWAP1 SSTORE SWAP1 DUP3 SWAP1 SSTORE SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A09 DUP9 PUSH2 0x11DE JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP PUSH2 0x1A4F DUP9 PUSH1 0x2 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x1239 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x1 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1A7E SWAP1 DUP9 PUSH2 0x1239 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP12 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1AAD SWAP1 DUP8 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x1ACF DUP3 PUSH2 0x1D5F JUMP JUMPDEST PUSH2 0x1AD8 DUP2 PUSH2 0x1DE7 JUMP JUMPDEST PUSH2 0x1AE2 DUP6 DUP5 PUSH2 0x1EF4 JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP7 PUSH1 0x40 MLOAD PUSH2 0x1B25 SWAP2 SWAP1 PUSH2 0x243F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B4D DUP9 PUSH2 0x11DE JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP PUSH2 0x1B93 DUP8 PUSH1 0x1 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x1239 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP13 AND DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH2 0x1BC9 SWAP1 DUP6 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x1 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1AAD SWAP1 DUP8 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C0C DUP9 PUSH2 0x11DE JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP PUSH2 0x1A7E DUP8 PUSH1 0x1 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x1239 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C66 DUP9 PUSH2 0x11DE JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP PUSH2 0x1CAC DUP9 PUSH1 0x2 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x1239 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x1 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1B93 SWAP1 DUP9 PUSH2 0x1239 JUMP JUMPDEST PUSH1 0xE SLOAD PUSH1 0xD SSTORE PUSH1 0x10 SLOAD PUSH1 0xF SSTORE PUSH1 0x12 SLOAD PUSH1 0x11 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x746 PUSH2 0x2710 PUSH2 0x134A PUSH1 0xD SLOAD DUP6 PUSH2 0xF2B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x746 PUSH2 0x2710 PUSH2 0x134A PUSH1 0xF SLOAD DUP6 PUSH2 0xF2B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D44 JUMPI POP PUSH1 0x0 PUSH2 0x832 JUMP JUMPDEST PUSH2 0x746 PUSH2 0x2710 PUSH2 0x134A PUSH1 0x11 SLOAD DUP6 PUSH2 0xF2B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D69 PUSH2 0x11AF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1D77 DUP4 DUP4 PUSH2 0xF2B JUMP JUMPDEST ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1D94 SWAP1 DUP3 PUSH2 0x11D2 JUMP JUMPDEST ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x5 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1397 JUMPI ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1DD2 SWAP1 DUP5 PUSH2 0x11D2 JUMP JUMPDEST ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP POP POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x699 JUMPI PUSH1 0x0 PUSH2 0x1DF7 PUSH2 0x11AF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1E05 DUP4 DUP4 PUSH2 0xF2B JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1E2D SWAP1 DUP3 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 SLOAD SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1EA8 JUMPI PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1E8C SWAP1 DUP5 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EBC PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD PUSH2 0x1034 SWAP2 SWAP1 PUSH2 0x243F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x1F01 SWAP1 DUP4 PUSH2 0x1239 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x9 SLOAD PUSH2 0x1F11 SWAP1 DUP3 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x9 SSTORE POP POP JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x832 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F39 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xF37 DUP2 PUSH2 0x25B6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F55 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xF37 DUP2 PUSH2 0x25B6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1F72 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1F7D DUP2 PUSH2 0x25B6 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1F8D DUP2 PUSH2 0x25B6 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1FAC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FB7 DUP2 PUSH2 0x25B6 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FC7 DUP2 PUSH2 0x25B6 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FEA JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FF5 DUP2 PUSH2 0x25B6 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2014 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xF37 DUP3 PUSH2 0x1F18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x202E JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2047 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x2057 PUSH1 0x20 DUP5 ADD PUSH2 0x1F18 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2074 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2113 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x20F7 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x2124 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x416D6F756E74206D757374206265206C657373207468616E20746F74616C2072 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x65666C656374696F6E73 PUSH1 0xB0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x4163636F756E7420697320616C7265616479206578636C756465640000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x546F74616C20666565206973206F76657220323525 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x416D6F756E74206D757374206265206C657373207468616E20737570706C7900 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x5472616E7366657220616D6F756E74206D757374206265206772656174657220 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x7468616E207A65726F PUSH1 0xB8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x4578636C75646564206164647265737365732063616E6E6F742063616C6C2074 PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x3434B990333AB731BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD DUP8 DUP4 MSTORE PUSH1 0x20 DUP8 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP8 MLOAD DUP1 DUP5 MSTORE PUSH1 0xC0 DUP7 ADD SWAP2 POP DUP3 DUP10 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2497 JUMPI DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2472 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 SWAP1 SWAP7 AND PUSH1 0x60 DUP6 ADD MSTORE POP POP POP PUSH1 0x80 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x24EF JUMPI PUSH2 0x24EF PUSH2 0x25A0 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x250F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x252E JUMPI PUSH2 0x252E PUSH2 0x25A0 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2545 JUMPI PUSH2 0x2545 PUSH2 0x25A0 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x255E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x257F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x2599 JUMPI PUSH2 0x2599 PUSH2 0x25A0 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x699 JUMPI PUSH1 0x0 DUP1 REVERT INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20646563 PUSH19 0x656173656420616C6C6F77616E63652062656C PUSH16 0x77207A65726FA2646970667358221220 0xAB DUP3 SWAP3 0xDD 0x21 0xB8 PUSH13 0xFDB0512D32809E8EF4616B51DA TIMESTAMP 0xB9 CALLDATACOPY SWAP4 PUSH28 0xEB1D52B86D056364736F6C6343000801003300000000000000000000 ",
"sourceMap": "1010:33:6:-:0;399:22131;1010:33;;399:22131;1010:33;;;-1:-1:-1;;;1010:33:6;;;;;;;;;;:::i;:::-;-1:-1:-1;1049:30:6;;;;;;;;;;;;;-1:-1:-1;;;1049:30:6;;;;;;;;;;;;:::i;:::-;;1140:3;1115:28;;1183:7;;1149:41;;1228:3;1197:34;;1277:13;;1237:53;;1328:3;1297:34;;1377:13;;1337:53;;2033:1441;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:0;955:12;:10;:12::i;:::-;936:18;:32::i;:::-;-1:-1:-1;;;;;2171:31:6;;2150:117;;;;-1:-1:-1;;;2150:117:6;;;;;;;:::i;:::-;;;;;;;;;2278:9;:14;;-1:-1:-1;;2278:14:6;2290:2;2278:14;;;2313:36;2303:7;:46;;;2377:13;;-1:-1:-1;;2377:13:6;:::i;:::-;2370:21;;-1:-1:-1;;2370:21:6;:::i;:::-;2359:7;:33;2421:7;;2403:15;:25;2463:13;;2439:21;:37;2487:17;:37;;-1:-1:-1;;;;;;2487:37:6;;;-1:-1:-1;;;;;2487:37:6;;;;;;;;;;2534:11;:25;;;;;;;;;;;;;;2593:13;;2569:21;:37;2649:7;;:25;;2668:5;;2649:14;;2661:1;2649:11;;;;;;;:14;;:::i;:::-;:18;;;;;;:25;;;;:::i;:::-;2617:29;:57;2694:21;:28;;-1:-1:-1;;;;2694:28:6;-1:-1:-1;;;2694:28:6;;;2752:7;;2718:4;2694:28;2741:7;:5;:7::i;:::-;-1:-1:-1;;;;;2733:16:6;-1:-1:-1;;;;;2733:16:6;;;;;;;;;;;;:26;;;;2770:35;2827:7;2770:65;;2931:16;-1:-1:-1;;;;;2931:24:6;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2913:69:6;;2991:4;2998:16;-1:-1:-1;;;;;2998:21:6;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2913:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2897:13;:125;;-1:-1:-1;;;;;;2897:125:6;;;-1:-1:-1;;;;;2897:125:6;;;;;;;3083:15;:34;;;;;;;;;;;;;;-1:-1:-1;3180:18:6;-1:-1:-1;3199:7:6;:5;:7::i;:::-;-1:-1:-1;;;;;3180:27:6;;;;;;;;;;;;;;;-1:-1:-1;3180:27:6;;;:34;;;;;-1:-1:-1;;3180:34:6;;;;;;3251:4;3224:33;;:18;:33;;;;;:40;;;;;3180:34;3224:40;;;3301:7;:5;:7::i;:::-;-1:-1:-1;;;;;3280:38:6;3297:1;-1:-1:-1;;;;;3280:38:6;;3310:7;;3280:38;;;;;;:::i;:::-;;;;;;;;3389:4;3360:7;:5;:7::i;:::-;-1:-1:-1;;;;;3334:133:6;;3408:28;550:1;3334:133;;;;;;;:::i;:::-;;;;;;;;2033:1441;;;;399:22131;;640:96:3;719:10;640:96;:::o;2433:187:0:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:0;;;-1:-1:-1;;;;;;2541:17:0;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2433:187;;:::o;3465:96:4:-;3523:7;3549:5;3553:1;3549;:5;:::i;:::-;3542:12;3465:96;-1:-1:-1;;;3465:96:4:o;3850:::-;3908:7;3934:5;3938:1;3934;:5;:::i;1201:85:0:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;:::o;399:22131:6:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;399:22131:6;;;-1:-1:-1;399:22131:6;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:179:9;95:13;;-1:-1:-1;;;;;137:31:9;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:220::-;;321:2;309:9;300:7;296:23;292:32;289:2;;;342:6;334;327:22;289:2;370:42;402:9;370:42;:::i;423:394::-;;;;580:2;568:9;559:7;555:23;551:32;548:2;;;601:6;593;586:22;548:2;629:42;661:9;629:42;:::i;:::-;619:52;;690:51;737:2;726:9;722:18;690:51;:::i;:::-;680:61;;760:51;807:2;796:9;792:18;760:51;:::i;:::-;750:61;;538:279;;;;;:::o;822:304::-;-1:-1:-1;;;;;1052:15:9;;;1034:34;;1104:15;;1099:2;1084:18;;1077:43;984:2;969:18;;951:175::o;1131:412::-;1304:2;1289:18;;1337:1;1326:13;;1316:2;;1382:10;1377:3;1373:20;1370:1;1363:31;1417:4;1414:1;1407:15;1445:4;1442:1;1435:15;1316:2;1469:25;;;1525:2;1510:18;1503:34;1271:272;:::o;1548:403::-;1750:2;1732:21;;;1789:2;1769:18;;;1762:30;1828:34;1823:2;1808:18;;1801:62;-1:-1:-1;;;1894:2:9;1879:18;;1872:37;1941:3;1926:19;;1722:229::o;1956:177::-;2102:25;;;2090:2;2075:18;;2057:76::o;2138:120::-;;2204:1;2194:2;;2209:18;;:::i;:::-;-1:-1:-1;2243:9:9;;2184:74::o;2263:168::-;;2369:1;2365;2361:6;2357:14;2354:1;2351:21;2346:1;2339:9;2332:17;2328:45;2325:2;;;2376:18;;:::i;:::-;-1:-1:-1;2416:9:9;;2315:116::o;2436:125::-;;2504:1;2501;2498:8;2495:2;;;2509:18;;:::i;:::-;-1:-1:-1;2546:9:9;;2485:76::o;2566:380::-;2651:1;2641:12;;2698:1;2688:12;;;2709:2;;2763:4;2755:6;2751:17;2741:27;;2709:2;2816;2808:6;2805:14;2785:18;2782:38;2779:2;;;2862:10;2857:3;2853:20;2850:1;2843:31;2897:4;2894:1;2887:15;2925:4;2922:1;2915:15;2779:2;;2621:325;;;:::o;2951:112::-;;3009:1;2999:2;;3014:18;;:::i;:::-;-1:-1:-1;3048:9:9;;2989:74::o;3068:127::-;3129:10;3124:3;3120:20;3117:1;3110:31;3160:4;3157:1;3150:15;3184:4;3181:1;3174:15;3200:127;3261:10;3256:3;3252:20;3249:1;3242:31;3292:4;3289:1;3282:15;3316:4;3313:1;3306:15;3232:95;399:22131:6;;;;;;"
},
"deployedBytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:12579:9",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:9",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "62:114:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "72:29:9",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "94:6:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "81:12:9"
},
"nodeType": "YulFunctionCall",
"src": "81:20:9"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "72:5:9"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "154:16:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "163:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "166:1:9",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "156:6:9"
},
"nodeType": "YulFunctionCall",
"src": "156:12:9"
},
"nodeType": "YulExpressionStatement",
"src": "156:12:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "123:5:9"
},
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "144:5:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "137:6:9"
},
"nodeType": "YulFunctionCall",
"src": "137:13:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "130:6:9"
},
"nodeType": "YulFunctionCall",
"src": "130:21:9"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "120:2:9"
},
"nodeType": "YulFunctionCall",
"src": "120:32:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "113:6:9"
},
"nodeType": "YulFunctionCall",
"src": "113:40:9"
},
"nodeType": "YulIf",
"src": "110:2:9"
}
]
},
"name": "abi_decode_t_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "41:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "52:5:9",
"type": ""
}
],
"src": "14:162:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "251:189:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "297:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "306:6:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "314:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "299:6:9"
},
"nodeType": "YulFunctionCall",
"src": "299:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "299:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "272:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "281:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "268:3:9"
},
"nodeType": "YulFunctionCall",
"src": "268:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "293:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "264:3:9"
},
"nodeType": "YulFunctionCall",
"src": "264:32:9"
},
"nodeType": "YulIf",
"src": "261:2:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "332:36:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "358:9:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "345:12:9"
},
"nodeType": "YulFunctionCall",
"src": "345:23:9"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "336:5:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "404:5:9"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "377:26:9"
},
"nodeType": "YulFunctionCall",
"src": "377:33:9"
},
"nodeType": "YulExpressionStatement",
"src": "377:33:9"
},
{
"nodeType": "YulAssignment",
"src": "419:15:9",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "429:5:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "419:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "217:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "228:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "240:6:9",
"type": ""
}
],
"src": "181:259:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "526:182:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "572:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "581:6:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "589:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "574:6:9"
},
"nodeType": "YulFunctionCall",
"src": "574:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "574:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "547:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "556:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "543:3:9"
},
"nodeType": "YulFunctionCall",
"src": "543:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "568:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "539:3:9"
},
"nodeType": "YulFunctionCall",
"src": "539:32:9"
},
"nodeType": "YulIf",
"src": "536:2:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "607:29:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "626:9:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "620:5:9"
},
"nodeType": "YulFunctionCall",
"src": "620:16:9"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "611:5:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "672:5:9"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "645:26:9"
},
"nodeType": "YulFunctionCall",
"src": "645:33:9"
},
"nodeType": "YulExpressionStatement",
"src": "645:33:9"
},
{
"nodeType": "YulAssignment",
"src": "687:15:9",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "697:5:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "687:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "492:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "503:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "515:6:9",
"type": ""
}
],
"src": "445:263:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "800:315:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "846:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "855:6:9"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "863:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "848:6:9"
},
"nodeType": "YulFunctionCall",
"src": "848:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "848:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "821:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "830:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "817:3:9"
},
"nodeType": "YulFunctionCall",
"src": "817:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "842:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "813:3:9"
},
"nodeType": "YulFunctionCall",
"src": "813:32:9"
},
"nodeType": "YulIf",
"src": "810:2:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "881:36:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "907:9:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "894:12:9"
},
"nodeType": "YulFunctionCall",
"src": "894:23:9"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "885:5:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "953:5:9"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "926:26:9"
},
"nodeType": "YulFunctionCall",
"src": "926:33:9"
},
"nodeType": "YulExpressionStatement",
"src": "926:33:9"
},
{
"nodeType": "YulAssignment",
"src": "968:15:9",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "978:5:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "968:6:9"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "992:47:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1024:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1035:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1020:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1020:18:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1007:12:9"
},
"nodeType": "YulFunctionCall",
"src": "1007:32:9"
},
"variables": [
{
"name": "value_1",
"nodeType": "YulTypedName",
"src": "996:7:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "1075:7:9"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "1048:26:9"
},
"nodeType": "YulFunctionCall",
"src": "1048:35:9"
},
"nodeType": "YulExpressionStatement",
"src": "1048:35:9"
},
{
"nodeType": "YulAssignment",
"src": "1092:17:9",
"value": {
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "1102:7:9"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1092:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "758:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "769:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "781:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "789:6:9",
"type": ""
}
],
"src": "713:402:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1224:366:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1270:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1279:6:9"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1287:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1272:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1272:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "1272:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1245:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1254:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1241:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1241:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1266:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1237:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1237:32:9"
},
"nodeType": "YulIf",
"src": "1234:2:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "1305:36:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1331:9:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1318:12:9"
},
"nodeType": "YulFunctionCall",
"src": "1318:23:9"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1309:5:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1377:5:9"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "1350:26:9"
},
"nodeType": "YulFunctionCall",
"src": "1350:33:9"
},
"nodeType": "YulExpressionStatement",
"src": "1350:33:9"
},
{
"nodeType": "YulAssignment",
"src": "1392:15:9",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "1402:5:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1392:6:9"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "1416:47:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1448:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1459:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1444:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1444:18:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1431:12:9"
},
"nodeType": "YulFunctionCall",
"src": "1431:32:9"
},
"variables": [
{
"name": "value_1",
"nodeType": "YulTypedName",
"src": "1420:7:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "1499:7:9"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "1472:26:9"
},
"nodeType": "YulFunctionCall",
"src": "1472:35:9"
},
"nodeType": "YulExpressionStatement",
"src": "1472:35:9"
},
{
"nodeType": "YulAssignment",
"src": "1516:17:9",
"value": {
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "1526:7:9"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1516:6:9"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1542:42:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1569:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1580:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1565:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1565:18:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1552:12:9"
},
"nodeType": "YulFunctionCall",
"src": "1552:32:9"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1542:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1174:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1185:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1197:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1205:6:9",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "1213:6:9",
"type": ""
}
],
"src": "1120:470:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1682:240:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1728:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1737:6:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1745:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1730:6:9"
},
"nodeType": "YulFunctionCall",
"src": "1730:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "1730:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1703:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1712:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1699:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1699:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1724:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1695:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1695:32:9"
},
"nodeType": "YulIf",
"src": "1692:2:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "1763:36:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1789:9:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1776:12:9"
},
"nodeType": "YulFunctionCall",
"src": "1776:23:9"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1767:5:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1835:5:9"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "1808:26:9"
},
"nodeType": "YulFunctionCall",
"src": "1808:33:9"
},
"nodeType": "YulExpressionStatement",
"src": "1808:33:9"
},
{
"nodeType": "YulAssignment",
"src": "1850:15:9",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "1860:5:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1850:6:9"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1874:42:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1901:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1912:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1897:3:9"
},
"nodeType": "YulFunctionCall",
"src": "1897:18:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1884:12:9"
},
"nodeType": "YulFunctionCall",
"src": "1884:32:9"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1874:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1640:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1651:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1663:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1671:6:9",
"type": ""
}
],
"src": "1595:327:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1994:125:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2040:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2049:6:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2057:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2042:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2042:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "2042:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2015:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2024:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2011:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2011:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2036:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2007:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2007:32:9"
},
"nodeType": "YulIf",
"src": "2004:2:9"
},
{
"nodeType": "YulAssignment",
"src": "2075:38:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2103:9:9"
}
],
"functionName": {
"name": "abi_decode_t_bool",
"nodeType": "YulIdentifier",
"src": "2085:17:9"
},
"nodeType": "YulFunctionCall",
"src": "2085:28:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2075:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1960:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1971:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1983:6:9",
"type": ""
}
],
"src": "1927:192:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2194:120:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2240:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2249:6:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2257:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2242:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2242:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "2242:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2215:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2224:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2211:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2211:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2236:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2207:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2207:32:9"
},
"nodeType": "YulIf",
"src": "2204:2:9"
},
{
"nodeType": "YulAssignment",
"src": "2275:33:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2298:9:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2285:12:9"
},
"nodeType": "YulFunctionCall",
"src": "2285:23:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2275:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2160:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2171:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2183:6:9",
"type": ""
}
],
"src": "2124:190:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2403:176:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2449:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2458:6:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2466:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2451:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2451:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "2451:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2424:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2433:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2420:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2420:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2445:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2416:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2416:32:9"
},
"nodeType": "YulIf",
"src": "2413:2:9"
},
{
"nodeType": "YulAssignment",
"src": "2484:33:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2507:9:9"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2494:12:9"
},
"nodeType": "YulFunctionCall",
"src": "2494:23:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2484:6:9"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2526:47:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2558:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2569:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2554:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2554:18:9"
}
],
"functionName": {
"name": "abi_decode_t_bool",
"nodeType": "YulIdentifier",
"src": "2536:17:9"
},
"nodeType": "YulFunctionCall",
"src": "2536:37:9"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2526:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256t_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2361:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2372:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2384:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "2392:6:9",
"type": ""
}
],
"src": "2319:260:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2699:201:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2745:26:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2754:6:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2762:6:9"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2747:6:9"
},
"nodeType": "YulFunctionCall",
"src": "2747:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "2747:22:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2720:7:9"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2729:9:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2716:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2716:23:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2741:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2712:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2712:32:9"
},
"nodeType": "YulIf",
"src": "2709:2:9"
},
{
"nodeType": "YulAssignment",
"src": "2780:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2796:9:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2790:5:9"
},
"nodeType": "YulFunctionCall",
"src": "2790:16:9"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2780:6:9"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2815:35:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2835:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2846:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2831:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2831:18:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2825:5:9"
},
"nodeType": "YulFunctionCall",
"src": "2825:25:9"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2815:6:9"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2859:35:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2879:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2890:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2875:3:9"
},
"nodeType": "YulFunctionCall",
"src": "2875:18:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2869:5:9"
},
"nodeType": "YulFunctionCall",
"src": "2869:25:9"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "2859:6:9"
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2649:9:9",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2660:7:9",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2672:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "2680:6:9",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "2688:6:9",
"type": ""
}
],
"src": "2584:316:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3006:102:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3016:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3028:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3039:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3024:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3024:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "3016:4:9"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3058:9:9"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3073:6:9"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3089:3:9",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3094:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "3085:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3085:11:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3098:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "3081:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3081:19:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3069:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3069:32:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3051:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3051:51:9"
},
"nodeType": "YulExpressionStatement",
"src": "3051:51:9"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2975:9:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2986:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "2997:4:9",
"type": ""
}
],
"src": "2905:203:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3370:350:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3380:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3392:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3403:3:9",
"type": "",
"value": "192"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3388:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3388:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "3380:4:9"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "3416:29:9",
"value": {
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3434:3:9",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3439:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "3430:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3430:11:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3443:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "3426:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3426:19:9"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "3420:2:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3461:9:9"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3476:6:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "3484:2:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3472:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3472:15:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3454:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3454:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "3454:34:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3508:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3519:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3504:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3504:18:9"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "3524:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3497:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3497:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "3497:34:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3551:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3562:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3547:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3547:18:9"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "3567:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3540:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3540:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "3540:34:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3594:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3605:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3590:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3590:18:9"
},
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "3610:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3583:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3583:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "3583:34:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3637:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3648:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3633:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3633:19:9"
},
{
"arguments": [
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "3658:6:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "3666:2:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3654:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3654:15:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3626:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3626:44:9"
},
"nodeType": "YulExpressionStatement",
"src": "3626:44:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3690:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3701:3:9",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3686:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3686:19:9"
},
{
"name": "value5",
"nodeType": "YulIdentifier",
"src": "3707:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3679:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3679:35:9"
},
"nodeType": "YulExpressionStatement",
"src": "3679:35:9"
}
]
},
"name": "abi_encode_tuple_t_address_t_uint256_t_rational_0_by_1_t_rational_0_by_1_t_address_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256_t_address_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "3299:9:9",
"type": ""
},
{
"name": "value5",
"nodeType": "YulTypedName",
"src": "3310:6:9",
"type": ""
},
{
"name": "value4",
"nodeType": "YulTypedName",
"src": "3318:6:9",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "3326:6:9",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "3334:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "3342:6:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3350:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "3361:4:9",
"type": ""
}
],
"src": "3113:607:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3820:92:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3830:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3842:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3853:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3838:3:9"
},
"nodeType": "YulFunctionCall",
"src": "3838:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "3830:4:9"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3872:9:9"
},
{
"arguments": [
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3897:6:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "3890:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3890:14:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "3883:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3883:22:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3865:6:9"
},
"nodeType": "YulFunctionCall",
"src": "3865:41:9"
},
"nodeType": "YulExpressionStatement",
"src": "3865:41:9"
}
]
},
"name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "3789:9:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3800:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "3811:4:9",
"type": ""
}
],
"src": "3725:187:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4045:102:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4055:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4067:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4078:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4063:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4063:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4055:4:9"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4097:9:9"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4112:6:9"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4128:3:9",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4133:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "4124:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4124:11:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4137:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4120:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4120:19:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4108:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4108:32:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4090:6:9"
},
"nodeType": "YulFunctionCall",
"src": "4090:51:9"
},
"nodeType": "YulExpressionStatement",
"src": "4090:51:9"
}
]
},
"name": "abi_encode_tuple_t_contract$_IUniswapV2Router02_$3451__to_t_address__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4014:9:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4025:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4036:4:9",
"type": ""
}
],
"src": "3917:230:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4273:482:9",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4283:12:9",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "4293:2:9",
"type": "",
"value": "32"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "4287:2:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4311:9:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4322:2:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4304:6:9"
},
"nodeType": "YulFunctionCall",
"src": "4304:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "4304:21:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "4334:27:9",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4354:6:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "4348:5:9"
},
"nodeType": "YulFunctionCall",
"src": "4348:13:9"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "4338:6:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4381:9:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4392:2:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4377:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4377:18:9"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4397:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4370:6:9"
},
"nodeType": "YulFunctionCall",
"src": "4370:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "4370:34:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "4413:13:9",
"value": {
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4422:4:9"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "4417:1:9",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "4485:90:9",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4514:9:9"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4525:1:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4510:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4510:17:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4529:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4506:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4506:26:9"
},
{
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4548:6:9"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4556:1:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4544:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4544:14:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4560:2:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4540:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4540:23:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "4534:5:9"
},
"nodeType": "YulFunctionCall",
"src": "4534:30:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4499:6:9"
},
"nodeType": "YulFunctionCall",
"src": "4499:66:9"
},
"nodeType": "YulExpressionStatement",
"src": "4499:66:9"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4446:1:9"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4449:6:9"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "4443:2:9"
},
"nodeType": "YulFunctionCall",
"src": "4443:13:9"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "4457:19:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4459:15:9",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4468:1:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4471:2:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4464:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4464:10:9"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4459:1:9"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "4439:3:9",
"statements": []
},
"src": "4435:140:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4609:69:9",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4638:9:9"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4649:6:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4634:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4634:22:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4658:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4630:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4630:31:9"
},
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4663:4:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4623:6:9"
},
"nodeType": "YulFunctionCall",
"src": "4623:45:9"
},
"nodeType": "YulExpressionStatement",
"src": "4623:45:9"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4590:1:9"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4593:6:9"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "4587:2:9"
},
"nodeType": "YulFunctionCall",
"src": "4587:13:9"
},
"nodeType": "YulIf",
"src": "4584:2:9"
},
{
"nodeType": "YulAssignment",
"src": "4687:62:9",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4703:9:9"
},
{
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4722:6:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4730:2:9",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4718:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4718:15:9"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4739:2:9",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "4735:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4735:7:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4714:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4714:29:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4699:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4699:45:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4746:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4695:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4695:54:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4687:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4242:9:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4253:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4264:4:9",
"type": ""
}
],
"src": "4152:603:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4934:225:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4951:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4962:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4944:6:9"
},
"nodeType": "YulFunctionCall",
"src": "4944:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "4944:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4985:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4996:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4981:3:9"
},
"nodeType": "YulFunctionCall",
"src": "4981:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5001:2:9",
"type": "",
"value": "35"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4974:6:9"
},
"nodeType": "YulFunctionCall",
"src": "4974:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "4974:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5024:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5035:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5020:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5020:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "5040:34:9",
"type": "",
"value": "ERC20: transfer to the zero addr"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5013:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5013:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "5013:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5095:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5106:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5091:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5091:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "5111:5:9",
"type": "",
"value": "ess"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5084:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5084:33:9"
},
"nodeType": "YulExpressionStatement",
"src": "5084:33:9"
},
{
"nodeType": "YulAssignment",
"src": "5126:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5138:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5149:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5134:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5134:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5126:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4911:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4925:4:9",
"type": ""
}
],
"src": "4760:399:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5338:232:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5355:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5366:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5348:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5348:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "5348:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5389:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5400:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5385:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5385:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5405:2:9",
"type": "",
"value": "42"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5378:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5378:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "5378:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5428:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5439:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5424:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5424:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "5444:34:9",
"type": "",
"value": "Amount must be less than total r"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5417:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5417:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "5417:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5499:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5510:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5495:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5495:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "5515:12:9",
"type": "",
"value": "eflections"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5488:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5488:40:9"
},
"nodeType": "YulExpressionStatement",
"src": "5488:40:9"
},
{
"nodeType": "YulAssignment",
"src": "5537:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5549:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5560:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5545:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5545:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5537:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_22f7af55a509c3b14f0d528f087748dec8a8bf425135e3f5dc28c6a31ec6d812__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5315:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5329:4:9",
"type": ""
}
],
"src": "5164:406:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5749:228:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5766:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5777:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5759:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5759:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "5759:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5800:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5811:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5796:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5796:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5816:2:9",
"type": "",
"value": "38"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5789:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5789:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "5789:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5839:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5850:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5835:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5835:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "5855:34:9",
"type": "",
"value": "Ownable: new owner is the zero a"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5828:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5828:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "5828:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5910:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5921:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5906:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5906:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "5926:8:9",
"type": "",
"value": "ddress"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5899:6:9"
},
"nodeType": "YulFunctionCall",
"src": "5899:36:9"
},
"nodeType": "YulExpressionStatement",
"src": "5899:36:9"
},
{
"nodeType": "YulAssignment",
"src": "5944:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5956:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5967:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5952:3:9"
},
"nodeType": "YulFunctionCall",
"src": "5952:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5944:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5726:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5740:4:9",
"type": ""
}
],
"src": "5575:402:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6156:224:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6173:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6184:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6166:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6166:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "6166:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6207:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6218:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6203:3:9"
},
"nodeType": "YulFunctionCall",
"src": "6203:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6223:2:9",
"type": "",
"value": "34"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6196:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6196:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "6196:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6246:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6257:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6242:3:9"
},
"nodeType": "YulFunctionCall",
"src": "6242:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "6262:34:9",
"type": "",
"value": "ERC20: approve to the zero addre"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6235:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6235:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "6235:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6317:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6328:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6313:3:9"
},
"nodeType": "YulFunctionCall",
"src": "6313:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "6333:4:9",
"type": "",
"value": "ss"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6306:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6306:32:9"
},
"nodeType": "YulExpressionStatement",
"src": "6306:32:9"
},
{
"nodeType": "YulAssignment",
"src": "6347:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6359:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6370:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6355:3:9"
},
"nodeType": "YulFunctionCall",
"src": "6355:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "6347:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "6133:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "6147:4:9",
"type": ""
}
],
"src": "5982:398:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6559:177:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6576:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6587:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6569:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6569:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "6569:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6610:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6621:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6606:3:9"
},
"nodeType": "YulFunctionCall",
"src": "6606:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6626:2:9",
"type": "",
"value": "27"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6599:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6599:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "6599:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6649:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6660:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6645:3:9"
},
"nodeType": "YulFunctionCall",
"src": "6645:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "6665:29:9",
"type": "",
"value": "Account is already excluded"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6638:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6638:57:9"
},
"nodeType": "YulExpressionStatement",
"src": "6638:57:9"
},
{
"nodeType": "YulAssignment",
"src": "6704:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6716:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6727:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6712:3:9"
},
"nodeType": "YulFunctionCall",
"src": "6712:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "6704:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_40ff67f743a73c63981ce97facdb4b14324f60afa0e3049344c62414448ff258__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "6536:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "6550:4:9",
"type": ""
}
],
"src": "6385:351:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6915:171:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6932:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6943:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6925:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6925:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "6925:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6966:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6977:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6962:3:9"
},
"nodeType": "YulFunctionCall",
"src": "6962:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6982:2:9",
"type": "",
"value": "21"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6955:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6955:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "6955:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7005:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7016:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7001:3:9"
},
"nodeType": "YulFunctionCall",
"src": "7001:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "7021:23:9",
"type": "",
"value": "Total fee is over 25%"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6994:6:9"
},
"nodeType": "YulFunctionCall",
"src": "6994:51:9"
},
"nodeType": "YulExpressionStatement",
"src": "6994:51:9"
},
{
"nodeType": "YulAssignment",
"src": "7054:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7066:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7077:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7062:3:9"
},
"nodeType": "YulFunctionCall",
"src": "7062:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "7054:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_5934f4898c552614209bdadb34ca76f71881c07b22c5c529611e5c3fba9f09dc__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "6892:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "6906:4:9",
"type": ""
}
],
"src": "6741:345:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7265:181:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7282:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7293:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7275:6:9"
},
"nodeType": "YulFunctionCall",
"src": "7275:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "7275:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7316:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7327:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7312:3:9"
},
"nodeType": "YulFunctionCall",
"src": "7312:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7332:2:9",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7305:6:9"
},
"nodeType": "YulFunctionCall",
"src": "7305:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "7305:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7355:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7366:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7351:3:9"
},
"nodeType": "YulFunctionCall",
"src": "7351:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "7371:33:9",
"type": "",
"value": "Amount must be less than supply"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7344:6:9"
},
"nodeType": "YulFunctionCall",
"src": "7344:61:9"
},
"nodeType": "YulExpressionStatement",
"src": "7344:61:9"
},
{
"nodeType": "YulAssignment",
"src": "7414:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7426:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7437:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7422:3:9"
},
"nodeType": "YulFunctionCall",
"src": "7422:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "7414:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_6c3d5d630711c57d95621b0547fb0a19eab6922a3a0e7e9054d9f9c5458b757b__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "7242:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "7256:4:9",
"type": ""
}
],
"src": "7091:355:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7625:182:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7642:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7653:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7635:6:9"
},
"nodeType": "YulFunctionCall",
"src": "7635:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "7635:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7676:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7687:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7672:3:9"
},
"nodeType": "YulFunctionCall",
"src": "7672:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7692:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7665:6:9"
},
"nodeType": "YulFunctionCall",
"src": "7665:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "7665:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7715:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7726:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7711:3:9"
},
"nodeType": "YulFunctionCall",
"src": "7711:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "7731:34:9",
"type": "",
"value": "Ownable: caller is not the owner"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7704:6:9"
},
"nodeType": "YulFunctionCall",
"src": "7704:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "7704:62:9"
},
{
"nodeType": "YulAssignment",
"src": "7775:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7787:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7798:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7783:3:9"
},
"nodeType": "YulFunctionCall",
"src": "7783:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "7775:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "7602:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "7616:4:9",
"type": ""
}
],
"src": "7451:356:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7986:231:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8003:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8014:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7996:6:9"
},
"nodeType": "YulFunctionCall",
"src": "7996:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "7996:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8037:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8048:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8033:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8033:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8053:2:9",
"type": "",
"value": "41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8026:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8026:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "8026:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8076:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8087:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8072:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8072:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "8092:34:9",
"type": "",
"value": "Transfer amount must be greater "
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8065:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8065:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "8065:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8147:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8158:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8143:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8143:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "8163:11:9",
"type": "",
"value": "than zero"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8136:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8136:39:9"
},
"nodeType": "YulExpressionStatement",
"src": "8136:39:9"
},
{
"nodeType": "YulAssignment",
"src": "8184:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8196:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8207:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8192:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8192:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "8184:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_9edb5ab58321f35d2386ea65721c9b107daa2c273610fc16d394af2a320ba785__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "7963:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "7977:4:9",
"type": ""
}
],
"src": "7812:405:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8396:227:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8413:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8424:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8406:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8406:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "8406:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8447:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8458:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8443:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8443:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8463:2:9",
"type": "",
"value": "37"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8436:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8436:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "8436:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8486:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8497:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8482:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8482:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "8502:34:9",
"type": "",
"value": "ERC20: transfer from the zero ad"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8475:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8475:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "8475:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8557:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8568:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8553:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8553:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "8573:7:9",
"type": "",
"value": "dress"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8546:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8546:35:9"
},
"nodeType": "YulExpressionStatement",
"src": "8546:35:9"
},
{
"nodeType": "YulAssignment",
"src": "8590:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8602:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8613:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8598:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8598:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "8590:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "8373:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "8387:4:9",
"type": ""
}
],
"src": "8222:401:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8802:226:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8819:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8830:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8812:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8812:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "8812:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8853:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8864:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8849:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8849:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8869:2:9",
"type": "",
"value": "36"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8842:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8842:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "8842:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8892:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8903:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8888:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8888:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "8908:34:9",
"type": "",
"value": "ERC20: approve from the zero add"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8881:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8881:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "8881:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8963:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8974:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8959:3:9"
},
"nodeType": "YulFunctionCall",
"src": "8959:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "8979:6:9",
"type": "",
"value": "ress"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8952:6:9"
},
"nodeType": "YulFunctionCall",
"src": "8952:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "8952:34:9"
},
{
"nodeType": "YulAssignment",
"src": "8995:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9007:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9018:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9003:3:9"
},
"nodeType": "YulFunctionCall",
"src": "9003:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "8995:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "8779:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "8793:4:9",
"type": ""
}
],
"src": "8628:400:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9207:234:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9224:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9235:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9217:6:9"
},
"nodeType": "YulFunctionCall",
"src": "9217:21:9"
},
"nodeType": "YulExpressionStatement",
"src": "9217:21:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9258:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9269:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9254:3:9"
},
"nodeType": "YulFunctionCall",
"src": "9254:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9274:2:9",
"type": "",
"value": "44"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9247:6:9"
},
"nodeType": "YulFunctionCall",
"src": "9247:30:9"
},
"nodeType": "YulExpressionStatement",
"src": "9247:30:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9297:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9308:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9293:3:9"
},
"nodeType": "YulFunctionCall",
"src": "9293:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "9313:34:9",
"type": "",
"value": "Excluded addresses cannot call t"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9286:6:9"
},
"nodeType": "YulFunctionCall",
"src": "9286:62:9"
},
"nodeType": "YulExpressionStatement",
"src": "9286:62:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9368:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9379:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9364:3:9"
},
"nodeType": "YulFunctionCall",
"src": "9364:18:9"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "9384:14:9",
"type": "",
"value": "his function"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9357:6:9"
},
"nodeType": "YulFunctionCall",
"src": "9357:42:9"
},
"nodeType": "YulExpressionStatement",
"src": "9357:42:9"
},
{
"nodeType": "YulAssignment",
"src": "9408:27:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9420:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9431:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9416:3:9"
},
"nodeType": "YulFunctionCall",
"src": "9416:19:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9408:4:9"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_ecefcaf5fbcf9ca6dcdb02298ba1da96f4ead317b0a4779917ecb2e5e7dc3ac4__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "9184:9:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "9198:4:9",
"type": ""
}
],
"src": "9033:408:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9547:76:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "9557:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9569:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9580:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9565:3:9"
},
"nodeType": "YulFunctionCall",
"src": "9565:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9557:4:9"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9599:9:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "9610:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9592:6:9"
},
"nodeType": "YulFunctionCall",
"src": "9592:25:9"
},
"nodeType": "YulExpressionStatement",
"src": "9592:25:9"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "9516:9:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "9527:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "9538:4:9",
"type": ""
}
],
"src": "9446:177:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9899:712:9",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "9909:33:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9927:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9938:3:9",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9923:3:9"
},
"nodeType": "YulFunctionCall",
"src": "9923:19:9"
},
"variables": [
{
"name": "tail_1",
"nodeType": "YulTypedName",
"src": "9913:6:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9958:9:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "9969:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9951:6:9"
},
"nodeType": "YulFunctionCall",
"src": "9951:25:9"
},
"nodeType": "YulExpressionStatement",
"src": "9951:25:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "9985:12:9",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "9995:2:9",
"type": "",
"value": "32"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "9989:2:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10017:9:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "10028:2:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10013:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10013:18:9"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "10033:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10006:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10006:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "10006:34:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10060:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10071:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10056:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10056:18:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10076:3:9",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10049:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10049:31:9"
},
"nodeType": "YulExpressionStatement",
"src": "10049:31:9"
},
{
"nodeType": "YulVariableDeclaration",
"src": "10089:17:9",
"value": {
"name": "tail_1",
"nodeType": "YulIdentifier",
"src": "10100:6:9"
},
"variables": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "10093:3:9",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "10115:27:9",
"value": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "10135:6:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "10129:5:9"
},
"nodeType": "YulFunctionCall",
"src": "10129:13:9"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "10119:6:9",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "tail_1",
"nodeType": "YulIdentifier",
"src": "10158:6:9"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "10166:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10151:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10151:22:9"
},
"nodeType": "YulExpressionStatement",
"src": "10151:22:9"
},
{
"nodeType": "YulAssignment",
"src": "10182:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10193:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10204:3:9",
"type": "",
"value": "192"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10189:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10189:19:9"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10182:3:9"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "10217:29:9",
"value": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "10235:6:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "10243:2:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10231:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10231:15:9"
},
"variables": [
{
"name": "srcPtr",
"nodeType": "YulTypedName",
"src": "10221:6:9",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "10255:13:9",
"value": {
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10264:4:9"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "10259:1:9",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "10326:146:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10347:3:9"
},
{
"arguments": [
{
"arguments": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "10362:6:9"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "10356:5:9"
},
"nodeType": "YulFunctionCall",
"src": "10356:13:9"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10379:3:9",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10384:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "10375:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10375:11:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10388:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "10371:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10371:19:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "10352:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10352:39:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10340:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10340:52:9"
},
"nodeType": "YulExpressionStatement",
"src": "10340:52:9"
},
{
"nodeType": "YulAssignment",
"src": "10405:19:9",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10416:3:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "10421:2:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10412:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10412:12:9"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10405:3:9"
}
]
},
{
"nodeType": "YulAssignment",
"src": "10437:25:9",
"value": {
"arguments": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "10451:6:9"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "10459:2:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10447:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10447:15:9"
},
"variableNames": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "10437:6:9"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "10288:1:9"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "10291:6:9"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "10285:2:9"
},
"nodeType": "YulFunctionCall",
"src": "10285:13:9"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "10299:18:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "10301:14:9",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "10310:1:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10313:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10306:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10306:9:9"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "10301:1:9"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "10281:3:9",
"statements": []
},
"src": "10277:195:9"
},
{
"nodeType": "YulAssignment",
"src": "10481:11:9",
"value": {
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10489:3:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10481:4:9"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10512:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10523:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10508:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10508:18:9"
},
{
"arguments": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "10532:6:9"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10548:3:9",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10553:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "10544:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10544:11:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10557:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "10540:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10540:19:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "10528:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10528:32:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10501:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10501:60:9"
},
"nodeType": "YulExpressionStatement",
"src": "10501:60:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10581:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10592:3:9",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10577:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10577:19:9"
},
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "10598:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10570:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10570:35:9"
},
"nodeType": "YulExpressionStatement",
"src": "10570:35:9"
}
]
},
"name": "abi_encode_tuple_t_uint256_t_rational_0_by_1_t_array$_t_address_$dyn_memory_ptr_t_address_t_uint256__to_t_uint256_t_uint256_t_array$_t_address_$dyn_memory_ptr_t_address_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "9836:9:9",
"type": ""
},
{
"name": "value4",
"nodeType": "YulTypedName",
"src": "9847:6:9",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "9855:6:9",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "9863:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "9871:6:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "9879:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "9890:4:9",
"type": ""
}
],
"src": "9628:983:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10773:162:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "10783:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10795:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10806:2:9",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10791:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10791:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10783:4:9"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10825:9:9"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "10836:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10818:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10818:25:9"
},
"nodeType": "YulExpressionStatement",
"src": "10818:25:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10863:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10874:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10859:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10859:18:9"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "10879:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10852:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10852:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "10852:34:9"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10906:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10917:2:9",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10902:3:9"
},
"nodeType": "YulFunctionCall",
"src": "10902:18:9"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "10922:6:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10895:6:9"
},
"nodeType": "YulFunctionCall",
"src": "10895:34:9"
},
"nodeType": "YulExpressionStatement",
"src": "10895:34:9"
}
]
},
"name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "10726:9:9",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "10737:6:9",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "10745:6:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "10753:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "10764:4:9",
"type": ""
}
],
"src": "10616:319:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11037:87:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "11047:26:9",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11059:9:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11070:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11055:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11055:18:9"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "11047:4:9"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11089:9:9"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "11104:6:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11112:4:9",
"type": "",
"value": "0xff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "11100:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11100:17:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11082:6:9"
},
"nodeType": "YulFunctionCall",
"src": "11082:36:9"
},
"nodeType": "YulExpressionStatement",
"src": "11082:36:9"
}
]
},
"name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "11006:9:9",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "11017:6:9",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "11028:4:9",
"type": ""
}
],
"src": "10940:184:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11177:80:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "11204:22:9",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "11206:16:9"
},
"nodeType": "YulFunctionCall",
"src": "11206:18:9"
},
"nodeType": "YulExpressionStatement",
"src": "11206:18:9"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "11193:1:9"
},
{
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "11200:1:9"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "11196:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11196:6:9"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "11190:2:9"
},
"nodeType": "YulFunctionCall",
"src": "11190:13:9"
},
"nodeType": "YulIf",
"src": "11187:2:9"
},
{
"nodeType": "YulAssignment",
"src": "11235:16:9",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "11246:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "11249:1:9"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11242:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11242:9:9"
},
"variableNames": [
{
"name": "sum",
"nodeType": "YulIdentifier",
"src": "11235:3:9"
}
]
}
]
},
"name": "checked_add_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "11160:1:9",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "11163:1:9",
"type": ""
}
],
"returnVariables": [
{
"name": "sum",
"nodeType": "YulTypedName",
"src": "11169:3:9",
"type": ""
}
],
"src": "11129:128:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11308:171:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "11339:111:9",
"statements": [
{
"expression": {
"arguments": [
{
"name": "r",
"nodeType": "YulIdentifier",
"src": "11360:1:9"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11367:3:9",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11372:10:9",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "11363:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11363:20:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11353:6:9"
},
"nodeType": "YulFunctionCall",
"src": "11353:31:9"
},
"nodeType": "YulExpressionStatement",
"src": "11353:31:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11404:1:9",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11407:4:9",
"type": "",
"value": "0x12"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11397:6:9"
},
"nodeType": "YulFunctionCall",
"src": "11397:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "11397:15:9"
},
{
"expression": {
"arguments": [
{
"name": "r",
"nodeType": "YulIdentifier",
"src": "11432:1:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11435:4:9",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "11425:6:9"
},
"nodeType": "YulFunctionCall",
"src": "11425:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "11425:15:9"
}
]
},
"condition": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "11328:1:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "11321:6:9"
},
"nodeType": "YulFunctionCall",
"src": "11321:9:9"
},
"nodeType": "YulIf",
"src": "11318:2:9"
},
{
"nodeType": "YulAssignment",
"src": "11459:14:9",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "11468:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "11471:1:9"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "11464:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11464:9:9"
},
"variableNames": [
{
"name": "r",
"nodeType": "YulIdentifier",
"src": "11459:1:9"
}
]
}
]
},
"name": "checked_div_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "11293:1:9",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "11296:1:9",
"type": ""
}
],
"returnVariables": [
{
"name": "r",
"nodeType": "YulTypedName",
"src": "11302:1:9",
"type": ""
}
],
"src": "11262:217:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11536:116:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "11595:22:9",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "11597:16:9"
},
"nodeType": "YulFunctionCall",
"src": "11597:18:9"
},
"nodeType": "YulExpressionStatement",
"src": "11597:18:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "11567:1:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "11560:6:9"
},
"nodeType": "YulFunctionCall",
"src": "11560:9:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "11553:6:9"
},
"nodeType": "YulFunctionCall",
"src": "11553:17:9"
},
{
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "11575:1:9"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11586:1:9",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "11582:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11582:6:9"
},
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "11590:1:9"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "11578:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11578:14:9"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "11572:2:9"
},
"nodeType": "YulFunctionCall",
"src": "11572:21:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "11549:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11549:45:9"
},
"nodeType": "YulIf",
"src": "11546:2:9"
},
{
"nodeType": "YulAssignment",
"src": "11626:20:9",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "11641:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "11644:1:9"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "11637:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11637:9:9"
},
"variableNames": [
{
"name": "product",
"nodeType": "YulIdentifier",
"src": "11626:7:9"
}
]
}
]
},
"name": "checked_mul_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "11515:1:9",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "11518:1:9",
"type": ""
}
],
"returnVariables": [
{
"name": "product",
"nodeType": "YulTypedName",
"src": "11524:7:9",
"type": ""
}
],
"src": "11484:168:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11706:76:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "11728:22:9",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "11730:16:9"
},
"nodeType": "YulFunctionCall",
"src": "11730:18:9"
},
"nodeType": "YulExpressionStatement",
"src": "11730:18:9"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "11722:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "11725:1:9"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "11719:2:9"
},
"nodeType": "YulFunctionCall",
"src": "11719:8:9"
},
"nodeType": "YulIf",
"src": "11716:2:9"
},
{
"nodeType": "YulAssignment",
"src": "11759:17:9",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "11771:1:9"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "11774:1:9"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "11767:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11767:9:9"
},
"variableNames": [
{
"name": "diff",
"nodeType": "YulIdentifier",
"src": "11759:4:9"
}
]
}
]
},
"name": "checked_sub_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "11688:1:9",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "11691:1:9",
"type": ""
}
],
"returnVariables": [
{
"name": "diff",
"nodeType": "YulTypedName",
"src": "11697:4:9",
"type": ""
}
],
"src": "11657:125:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11842:325:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "11852:22:9",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "11866:4:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11872:1:9",
"type": "",
"value": "2"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "11862:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11862:12:9"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11852:6:9"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "11883:38:9",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "11913:4:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11919:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "11909:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11909:12:9"
},
"variables": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulTypedName",
"src": "11887:18:9",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "11960:31:9",
"statements": [
{
"nodeType": "YulAssignment",
"src": "11962:27:9",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11976:6:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11984:4:9",
"type": "",
"value": "0x7f"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "11972:3:9"
},
"nodeType": "YulFunctionCall",
"src": "11972:17:9"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11962:6:9"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "11940:18:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "11933:6:9"
},
"nodeType": "YulFunctionCall",
"src": "11933:26:9"
},
"nodeType": "YulIf",
"src": "11930:2:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12050:111:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12071:1:9",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12078:3:9",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12083:10:9",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "12074:3:9"
},
"nodeType": "YulFunctionCall",
"src": "12074:20:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12064:6:9"
},
"nodeType": "YulFunctionCall",
"src": "12064:31:9"
},
"nodeType": "YulExpressionStatement",
"src": "12064:31:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12115:1:9",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12118:4:9",
"type": "",
"value": "0x22"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12108:6:9"
},
"nodeType": "YulFunctionCall",
"src": "12108:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "12108:15:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12143:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12146:4:9",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "12136:6:9"
},
"nodeType": "YulFunctionCall",
"src": "12136:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "12136:15:9"
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "12006:18:9"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "12029:6:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12037:2:9",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "12026:2:9"
},
"nodeType": "YulFunctionCall",
"src": "12026:14:9"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "12003:2:9"
},
"nodeType": "YulFunctionCall",
"src": "12003:38:9"
},
"nodeType": "YulIf",
"src": "12000:2:9"
}
]
},
"name": "extract_byte_array_length",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "11822:4:9",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "11831:6:9",
"type": ""
}
],
"src": "11787:380:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12219:88:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "12250:22:9",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "12252:16:9"
},
"nodeType": "YulFunctionCall",
"src": "12252:18:9"
},
"nodeType": "YulExpressionStatement",
"src": "12252:18:9"
}
]
},
"condition": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12235:5:9"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12246:1:9",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "12242:3:9"
},
"nodeType": "YulFunctionCall",
"src": "12242:6:9"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "12232:2:9"
},
"nodeType": "YulFunctionCall",
"src": "12232:17:9"
},
"nodeType": "YulIf",
"src": "12229:2:9"
},
{
"nodeType": "YulAssignment",
"src": "12281:20:9",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12292:5:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12299:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12288:3:9"
},
"nodeType": "YulFunctionCall",
"src": "12288:13:9"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "12281:3:9"
}
]
}
]
},
"name": "increment_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "12201:5:9",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "12211:3:9",
"type": ""
}
],
"src": "12172:135:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12344:95:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12361:1:9",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12368:3:9",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12373:10:9",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "12364:3:9"
},
"nodeType": "YulFunctionCall",
"src": "12364:20:9"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12354:6:9"
},
"nodeType": "YulFunctionCall",
"src": "12354:31:9"
},
"nodeType": "YulExpressionStatement",
"src": "12354:31:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12401:1:9",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12404:4:9",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12394:6:9"
},
"nodeType": "YulFunctionCall",
"src": "12394:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "12394:15:9"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12425:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12428:4:9",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "12418:6:9"
},
"nodeType": "YulFunctionCall",
"src": "12418:15:9"
},
"nodeType": "YulExpressionStatement",
"src": "12418:15:9"
}
]
},
"name": "panic_error_0x11",
"nodeType": "YulFunctionDefinition",
"src": "12312:127:9"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12491:86:9",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "12555:16:9",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12564:1:9",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12567:1:9",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "12557:6:9"
},
"nodeType": "YulFunctionCall",
"src": "12557:12:9"
},
"nodeType": "YulExpressionStatement",
"src": "12557:12:9"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12514:5:9"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12525:5:9"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12540:3:9",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12545:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "12536:3:9"
},
"nodeType": "YulFunctionCall",
"src": "12536:11:9"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12549:1:9",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "12532:3:9"
},
"nodeType": "YulFunctionCall",
"src": "12532:19:9"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "12521:3:9"
},
"nodeType": "YulFunctionCall",
"src": "12521:31:9"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "12511:2:9"
},
"nodeType": "YulFunctionCall",
"src": "12511:42:9"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "12504:6:9"
},
"nodeType": "YulFunctionCall",
"src": "12504:50:9"
},
"nodeType": "YulIf",
"src": "12501:2:9"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "12480:5:9",
"type": ""
}
],
"src": "12444:133:9"
}
]
},
"contents": "{\n { }\n function abi_decode_t_bool(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := mload(headStart)\n validator_revert_t_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value1, value1) }\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 }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\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 value2 := calldataload(add(headStart, 64))\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n }\n function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := abi_decode_t_bool(headStart)\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := calldataload(headStart)\n }\n function abi_decode_tuple_t_uint256t_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := calldataload(headStart)\n value1 := abi_decode_t_bool(add(headStart, 32))\n }\n function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n value0 := mload(headStart)\n value1 := mload(add(headStart, 32))\n value2 := mload(add(headStart, 64))\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, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_t_uint256_t_rational_0_by_1_t_rational_0_by_1_t_address_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256_t_address_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 192)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), and(value4, _1))\n mstore(add(headStart, 160), value5)\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_contract$_IUniswapV2Router02_$3451__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := tail\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n if gt(i, length)\n {\n mstore(add(add(headStart, length), 64), tail)\n }\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 35)\n mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n mstore(add(headStart, 96), \"ess\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_22f7af55a509c3b14f0d528f087748dec8a8bf425135e3f5dc28c6a31ec6d812__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 42)\n mstore(add(headStart, 64), \"Amount must be less than total r\")\n mstore(add(headStart, 96), \"eflections\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n mstore(add(headStart, 96), \"ss\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_40ff67f743a73c63981ce97facdb4b14324f60afa0e3049344c62414448ff258__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Account is already excluded\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_5934f4898c552614209bdadb34ca76f71881c07b22c5c529611e5c3fba9f09dc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 21)\n mstore(add(headStart, 64), \"Total fee is over 25%\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_6c3d5d630711c57d95621b0547fb0a19eab6922a3a0e7e9054d9f9c5458b757b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"Amount must be less than supply\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_9edb5ab58321f35d2386ea65721c9b107daa2c273610fc16d394af2a320ba785__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 41)\n mstore(add(headStart, 64), \"Transfer amount must be greater \")\n mstore(add(headStart, 96), \"than zero\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 37)\n mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n mstore(add(headStart, 96), \"dress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 36)\n mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n mstore(add(headStart, 96), \"ress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_ecefcaf5fbcf9ca6dcdb02298ba1da96f4ead317b0a4779917ecb2e5e7dc3ac4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"Excluded addresses cannot call t\")\n mstore(add(headStart, 96), \"his function\")\n tail := add(headStart, 128)\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 abi_encode_tuple_t_uint256_t_rational_0_by_1_t_array$_t_address_$dyn_memory_ptr_t_address_t_uint256__to_t_uint256_t_uint256_t_array$_t_address_$dyn_memory_ptr_t_address_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n let tail_1 := add(headStart, 160)\n mstore(headStart, value0)\n let _1 := 32\n mstore(add(headStart, _1), value1)\n mstore(add(headStart, 64), 160)\n let pos := tail_1\n let length := mload(value2)\n mstore(tail_1, length)\n pos := add(headStart, 192)\n let srcPtr := add(value2, _1)\n let i := tail\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n tail := pos\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), value4)\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n if gt(x, not(y)) { panic_error_0x11() }\n sum := add(x, y)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(r, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(r, 0x24)\n }\n r := div(x, y)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n product := mul(x, y)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function extract_byte_array_length(data) -> length\n {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function validator_revert_t_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n}",
"id": 9,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "6080604052600436106102135760003560e01c80634a74bb021161011857806395d89b41116100a0578063caac79341161006f578063caac7934146105bc578063dd62ed3e146105d1578063ea2f0b37146105f1578063f2fde38b14610611578063ffa1ad74146106315761021a565b806395d89b4114610547578063a457c2d71461055c578063a9059cbb1461057c578063c49b9a801461059c5761021a565b806370a08231116100e757806370a08231146104bd578063715018a6146104dd57806388f82020146104f25780638da5cb5b146105125780638ee88c53146105275761021a565b80634a74bb021461045357806352390c02146104685780635342acb4146104885780636bc87c3a146104a85761021a565b8063313ce5671161019b5780633bd5d1731161016a5780633bd5d173146103be578063437823ec146103de5780634549b039146103fe578063457c194c1461041e57806349bd5a5e1461043e5761021a565b8063313ce567146103475780633685d4191461036957806339509351146103895780633b124fe7146103a95761021a565b80631694505e116101e25780631694505e146102bb57806318160ddd146102dd57806322976e0d146102f257806323b872dd146103075780632d838119146103275761021a565b8063061c82d01461021f57806306fdde0314610241578063095ea7b31461026c57806313114a9d146102995761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023f61023a36600461201d565b610646565b005b34801561024d57600080fd5b5061025661069c565b60405161026391906120e7565b60405180910390f35b34801561027857600080fd5b5061028c610287366004611fd8565b61072e565b60405161026391906120dc565b3480156102a557600080fd5b506102ae61074c565b604051610263919061243f565b3480156102c757600080fd5b506102d0610752565b604051610263919061208d565b3480156102e957600080fd5b506102ae610761565b3480156102fe57600080fd5b506102ae610767565b34801561031357600080fd5b5061028c610322366004611f98565b61076d565b34801561033357600080fd5b506102ae61034236600461201d565b6107f4565b34801561035357600080fd5b5061035c610837565b60405161026391906124ce565b34801561037557600080fd5b5061023f610384366004611f28565b610840565b34801561039557600080fd5b5061028c6103a4366004611fd8565b6109de565b3480156103b557600080fd5b506102ae610a2c565b3480156103ca57600080fd5b5061023f6103d936600461201d565b610a32565b3480156103ea57600080fd5b5061023f6103f9366004611f28565b610aef565b34801561040a57600080fd5b506102ae610419366004612035565b610b1b565b34801561042a57600080fd5b5061023f61043936600461201d565b610b7a565b34801561044a57600080fd5b506102d0610b9d565b34801561045f57600080fd5b5061028c610bac565b34801561047457600080fd5b5061023f610483366004611f28565b610bbc565b34801561049457600080fd5b5061028c6104a3366004611f28565b610cbd565b3480156104b457600080fd5b506102ae610cdb565b3480156104c957600080fd5b506102ae6104d8366004611f28565b610ce1565b3480156104e957600080fd5b5061023f610d43565b3480156104fe57600080fd5b5061028c61050d366004611f28565b610d57565b34801561051e57600080fd5b506102d0610d75565b34801561053357600080fd5b5061023f61054236600461201d565b610d84565b34801561055357600080fd5b50610256610da7565b34801561056857600080fd5b5061028c610577366004611fd8565b610db6565b34801561058857600080fd5b5061028c610597366004611fd8565b610e1e565b3480156105a857600080fd5b5061023f6105b7366004612003565b610e32565b3480156105c857600080fd5b506102d0610e8c565b3480156105dd57600080fd5b506102ae6105ec366004611f60565b610e9b565b3480156105fd57600080fd5b5061023f61060c366004611f28565b610ec6565b34801561061d57600080fd5b5061023f61062c366004611f28565b610eef565b34801561063d57600080fd5b506102ae610f26565b61064e610f4a565b600d819055601154600f546109c4919061066890846124dc565b61067291906124dc565b11156106995760405162461bcd60e51b815260040161069090612286565b60405180910390fd5b50565b6060600a80546106ab9061254a565b80601f01602080910402602001604051908101604052809291908181526020018280546106d79061254a565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061074261073b610f89565b8484610f8d565b5060015b92915050565b60095490565b6013546001600160a01b031681565b60075490565b60115481565b600061077a848484611041565b6107ea84610786610f89565b6107e5856040518060600160405280602881526020016125cc602891396001600160a01b038a166000908152600360205260408120906107c4610f89565b6001600160a01b031681526020810191909152604001600020549190611183565b610f8d565b5060019392505050565b60006008548211156108185760405162461bcd60e51b81526004016106909061217d565b60006108226111af565b905061082e8382610f3e565b9150505b919050565b600c5460ff1690565b610848610f4a565b6001600160a01b03811660009081526005602052604090205460ff166108805760405162461bcd60e51b81526004016106909061224f565b60005b6006548110156109da57816001600160a01b0316600682815481106108b857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156109c857600680546108e390600190612533565b8154811061090157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b03909216918390811061093b57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806109a157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190556109da565b806109d281612585565b915050610883565b5050565b60006107426109eb610f89565b846107e585600360006109fc610f89565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906111d2565b600d5481565b6000610a3c610f89565b6001600160a01b03811660009081526005602052604090205490915060ff1615610a785760405162461bcd60e51b8152600401610690906123f3565b6000610a83836111de565b5050506001600160a01b038616600090815260016020526040902054939450610ab193925084915050611239565b6001600160a01b038316600090815260016020526040902055600854610ad79082611239565b600855600954610ae790846111d2565b600955505050565b610af7610f4a565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600754831115610b3f5760405162461bcd60e51b8152600401610690906122b5565b81610b5f576000610b4f846111de565b5094965061074695505050505050565b6000610b6a846111de565b5093965061074695505050505050565b610b82610f4a565b6011819055600f54600d546109c491839161066891906124dc565b6014546001600160a01b031681565b601654600160a81b900460ff1681565b610bc4610f4a565b6001600160a01b03811660009081526005602052604090205460ff1615610bfd5760405162461bcd60e51b81526004016106909061224f565b6001600160a01b03811660009081526001602052604090205415610c57576001600160a01b038116600090815260016020526040902054610c3d906107f4565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b600f5481565b6001600160a01b03811660009081526005602052604081205460ff1615610d2157506001600160a01b038116600090815260026020526040902054610832565b6001600160a01b038216600090815260016020526040902054610746906107f4565b610d4b610f4a565b610d556000611245565b565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546001600160a01b031690565b610d8c610f4a565b600f819055601154600d546109c491906106689084906124dc565b6060600b80546106ab9061254a565b6000610742610dc3610f89565b846107e5856040518060600160405280602581526020016125f46025913960036000610ded610f89565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611183565b6000610742610e2b610f89565b8484611041565b610e3a610f4a565b6016805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610e819083906120dc565b60405180910390a150565b6015546001600160a01b031681565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610ece610f4a565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610ef7610f4a565b6001600160a01b038116610f1d5760405162461bcd60e51b8152600401610690906121c7565b61069981611245565b600181565b6000610f378284612514565b9392505050565b6000610f3782846124f4565b610f52610f89565b6001600160a01b0316610f63610d75565b6001600160a01b031614610d555760405162461bcd60e51b8152600401610690906122ec565b3390565b6001600160a01b038316610fb35760405162461bcd60e51b8152600401610690906123af565b6001600160a01b038216610fd95760405162461bcd60e51b81526004016106909061220d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061103490859061243f565b60405180910390a3505050565b6001600160a01b0383166110675760405162461bcd60e51b81526004016106909061236a565b6001600160a01b03821661108d5760405162461bcd60e51b81526004016106909061213a565b600081116110ad5760405162461bcd60e51b815260040161069090612321565b60006110b830610ce1565b601754909150811080159081906110d95750601654600160a01b900460ff16155b80156110f357506014546001600160a01b03868116911614155b80156111085750601654600160a81b900460ff165b1561111b57601754915061111b82611295565b61112483611336565b6001600160a01b03851660009081526004602052604090205460019060ff168061116657506001600160a01b03851660009081526004602052604090205460ff165b1561116f575060005b61117b8686868461139c565b505050505050565b600081848411156111a75760405162461bcd60e51b815260040161069091906120e7565b505050900390565b60008060006111bc61150a565b90925090506111cb8282610f3e565b9250505090565b6000610f3782846124dc565b60008060008060008060008060008060006111f88c6116c7565b935093509350935060008060006112198f8787876112146111af565b61171c565b919f509d509b509599509397509195509350505050919395979092949650565b6000610f378284612533565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6016805460ff60a01b1916600160a01b17905560006112b5826002610f3e565b905060006112c38383611239565b9050476112cf8361177e565b60006112db4783611239565b90506112e783826118fb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161131a939291906124b8565b60405180910390a150506016805460ff60a01b19169055505050565b600061135061271061134a84610190610f2b565b90610f3e565b90504781811115611397576016546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611395573d6000803e3d6000fd5b505b505050565b806113a9576113a96119ad565b6001600160a01b03841660009081526005602052604090205460ff1680156113ea57506001600160a01b03831660009081526005602052604090205460ff16155b156113ff576113fa8484846119f5565b6114fd565b6001600160a01b03841660009081526005602052604090205460ff1615801561144057506001600160a01b03831660009081526005602052604090205460ff165b15611450576113fa848484611b39565b6001600160a01b03841660009081526005602052604090205460ff1615801561149257506001600160a01b03831660009081526005602052604090205460ff16155b156114a2576113fa848484611bf8565b6001600160a01b03841660009081526005602052604090205460ff1680156114e257506001600160a01b03831660009081526005602052604090205460ff165b156114f2576113fa848484611c52565b6114fd848484611bf8565b8061139557611395611cdb565b6008546007546000918291825b6006548110156116955782600160006006848154811061154757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806115c0575081600260006006848154811061159957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156115d757600854600754945094505050506116c3565b61162b60016000600684815481106115ff57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611239565b9250611681600260006006848154811061165557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611239565b91508061168d81612585565b915050611517565b506007546008546116a591610f3e565b8210156116bd576008546007549350935050506116c3565b90925090505b9091565b60008060008060006116d886611cef565b905060006116e587611d0c565b905060006116f288611d29565b9050600061170c8261170685818d89611239565b90611239565b9993985091965094509092505050565b600080808061172b8986610f2b565b905060006117398987610f2b565b905060006117478988610f2b565b905060006117558989610f2b565b905060006117698261170685818989611239565b949d949c50929a509298505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106117c157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561181557600080fd5b505afa158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d9190611f44565b8160018151811061186e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526013546118949130911684610f8d565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac947906118cd908590600090869030904290600401612448565b600060405180830381600087803b1580156118e757600080fd5b505af115801561117b573d6000803e3d6000fd5b6013546119139030906001600160a01b031684610f8d565b6013546001600160a01b031663f305d719823085600080611932610d75565b426040518863ffffffff1660e01b8152600401611954969594939291906120a1565b6060604051808303818588803b15801561196d57600080fd5b505af1158015611981573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119a69190612060565b5050505050565b600d541580156119bd5750600f54155b80156119c95750601154155b156119d357610d55565b600d8054600e55600f8054601055601180546012556000928390559082905555565b6000806000806000806000611a09886111de565b9650965096509650965096509650611a4f88600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461123990919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611a7e9088611239565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054611aad90876111d2565b6001600160a01b038a16600090815260016020526040902055611acf82611d5f565b611ad881611de7565b611ae28584611ef4565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611b25919061243f565b60405180910390a350505050505050505050565b6000806000806000806000611b4d886111de565b9650965096509650965096509650611b9387600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461123990919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054611bc990856111d2565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611aad90876111d2565b6000806000806000806000611c0c886111de565b9650965096509650965096509650611a7e87600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461123990919063ffffffff16565b6000806000806000806000611c66886111de565b9650965096509650965096509650611cac88600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461123990919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054611b939088611239565b600e54600d55601054600f55601254601155565b600061074661271061134a600d5485610f2b90919063ffffffff16565b600061074661271061134a600f5485610f2b90919063ffffffff16565b6015546000906001600160a01b0316611d4457506000610832565b61074661271061134a60115485610f2b90919063ffffffff16565b6000611d696111af565b90506000611d778383610f2b565b30600090815260016020526040902054909150611d9490826111d2565b3060009081526001602090815260408083209390935560059052205460ff16156113975730600090815260026020526040902054611dd290846111d2565b30600090815260026020526040902055505050565b8015610699576000611df76111af565b90506000611e058383610f2b565b6015546001600160a01b0316600090815260016020526040902054909150611e2d90826111d2565b601580546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615611ea8576015546001600160a01b0316600090815260026020526040902054611e8c90846111d2565b6015546001600160a01b03166000908152600260205260409020555b6015546001600160a01b0316611ebc610f89565b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611034919061243f565b600854611f019083611239565b600855600954611f1190826111d2565b6009555050565b8035801515811461083257600080fd5b600060208284031215611f39578081fd5b8135610f37816125b6565b600060208284031215611f55578081fd5b8151610f37816125b6565b60008060408385031215611f72578081fd5b8235611f7d816125b6565b91506020830135611f8d816125b6565b809150509250929050565b600080600060608486031215611fac578081fd5b8335611fb7816125b6565b92506020840135611fc7816125b6565b929592945050506040919091013590565b60008060408385031215611fea578182fd5b8235611ff5816125b6565b946020939093013593505050565b600060208284031215612014578081fd5b610f3782611f18565b60006020828403121561202e578081fd5b5035919050565b60008060408385031215612047578182fd5b8235915061205760208401611f18565b90509250929050565b600080600060608486031215612074578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612113578581018301518582016040015282016120f7565b818111156121245783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b602080825260159082015274546f74616c20666565206973206f7665722032352560581b604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156124975784516001600160a01b031683529383019391830191600101612472565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b600082198211156124ef576124ef6125a0565b500190565b60008261250f57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561252e5761252e6125a0565b500290565b600082821015612545576125456125a0565b500390565b60028104600182168061255e57607f821691505b6020821081141561257f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612599576125996125a0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461069957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab8292dd21b86cfdb0512d32809e8ef4616b51da42b937937beb1d52b86d056364736f6c63430008010033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x213 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4A74BB02 GT PUSH2 0x118 JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xCAAC7934 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xCAAC7934 EQ PUSH2 0x5BC JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5D1 JUMPI DUP1 PUSH4 0xEA2F0B37 EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x631 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x547 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x55C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x57C JUMPI DUP1 PUSH4 0xC49B9A80 EQ PUSH2 0x59C JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x70A08231 GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x4BD JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0x88F82020 EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x512 JUMPI DUP1 PUSH4 0x8EE88C53 EQ PUSH2 0x527 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x4A74BB02 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0x52390C02 EQ PUSH2 0x468 JUMPI DUP1 PUSH4 0x5342ACB4 EQ PUSH2 0x488 JUMPI DUP1 PUSH4 0x6BC87C3A EQ PUSH2 0x4A8 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x19B JUMPI DUP1 PUSH4 0x3BD5D173 GT PUSH2 0x16A JUMPI DUP1 PUSH4 0x3BD5D173 EQ PUSH2 0x3BE JUMPI DUP1 PUSH4 0x437823EC EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0x4549B039 EQ PUSH2 0x3FE JUMPI DUP1 PUSH4 0x457C194C EQ PUSH2 0x41E JUMPI DUP1 PUSH4 0x49BD5A5E EQ PUSH2 0x43E JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x347 JUMPI DUP1 PUSH4 0x3685D419 EQ PUSH2 0x369 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x3B124FE7 EQ PUSH2 0x3A9 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x2BB JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2DD JUMPI DUP1 PUSH4 0x22976E0D EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x2D838119 EQ PUSH2 0x327 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x61C82D0 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0x13114A9D EQ PUSH2 0x299 JUMPI PUSH2 0x21A JUMP JUMPDEST CALLDATASIZE PUSH2 0x21A JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x23A CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0x646 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x256 PUSH2 0x69C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x20E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x287 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FD8 JUMP JUMPDEST PUSH2 0x72E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x20DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x74C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x243F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D0 PUSH2 0x752 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x208D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x761 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x767 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F98 JUMP JUMPDEST PUSH2 0x76D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x342 CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0x7F4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x353 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x35C PUSH2 0x837 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x384 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0x840 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x3A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FD8 JUMP JUMPDEST PUSH2 0x9DE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0xA2C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0xA32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x3F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xAEF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x2035 JUMP JUMPDEST PUSH2 0xB1B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x439 CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0xB7A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D0 PUSH2 0xB9D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0xBAC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x474 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xBBC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x4A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xCBD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0xCDB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x4D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xCE1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0xD43 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x50D CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xD57 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D0 PUSH2 0xD75 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x533 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x542 CALLDATASIZE PUSH1 0x4 PUSH2 0x201D JUMP JUMPDEST PUSH2 0xD84 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x553 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x256 PUSH2 0xDA7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x577 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FD8 JUMP JUMPDEST PUSH2 0xDB6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x588 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x597 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FD8 JUMP JUMPDEST PUSH2 0xE1E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x5B7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2003 JUMP JUMPDEST PUSH2 0xE32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D0 PUSH2 0xE8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0x5EC CALLDATASIZE PUSH1 0x4 PUSH2 0x1F60 JUMP JUMPDEST PUSH2 0xE9B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x60C CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xEC6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x62C CALLDATASIZE PUSH1 0x4 PUSH2 0x1F28 JUMP JUMPDEST PUSH2 0xEEF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH2 0xF26 JUMP JUMPDEST PUSH2 0x64E PUSH2 0xF4A JUMP JUMPDEST PUSH1 0xD DUP2 SWAP1 SSTORE PUSH1 0x11 SLOAD PUSH1 0xF SLOAD PUSH2 0x9C4 SWAP2 SWAP1 PUSH2 0x668 SWAP1 DUP5 PUSH2 0x24DC JUMP JUMPDEST PUSH2 0x672 SWAP2 SWAP1 PUSH2 0x24DC JUMP JUMPDEST GT ISZERO PUSH2 0x699 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x2286 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xA DUP1 SLOAD PUSH2 0x6AB SWAP1 PUSH2 0x254A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x6D7 SWAP1 PUSH2 0x254A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x724 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x6F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x724 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x707 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x742 PUSH2 0x73B PUSH2 0xF89 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xF8D JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77A DUP5 DUP5 DUP5 PUSH2 0x1041 JUMP JUMPDEST PUSH2 0x7EA DUP5 PUSH2 0x786 PUSH2 0xF89 JUMP JUMPDEST PUSH2 0x7E5 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25CC PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x7C4 PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x1183 JUMP JUMPDEST PUSH2 0xF8D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 SLOAD DUP3 GT ISZERO PUSH2 0x818 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x217D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x822 PUSH2 0x11AF JUMP JUMPDEST SWAP1 POP PUSH2 0x82E DUP4 DUP3 PUSH2 0xF3E JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x848 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x880 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x224F JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x9DA JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x8B8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x9C8 JUMPI PUSH1 0x6 DUP1 SLOAD PUSH2 0x8E3 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2533 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x901 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x93B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP2 DUP5 AND DUP2 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP3 SWAP1 SSTORE PUSH1 0x5 SWAP1 SWAP3 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD DUP1 PUSH2 0x9A1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP2 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE ADD SWAP1 SSTORE PUSH2 0x9DA JUMP JUMPDEST DUP1 PUSH2 0x9D2 DUP2 PUSH2 0x2585 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x883 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x742 PUSH2 0x9EB PUSH2 0xF89 JUMP JUMPDEST DUP5 PUSH2 0x7E5 DUP6 PUSH1 0x3 PUSH1 0x0 PUSH2 0x9FC PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xA78 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x23F3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA83 DUP4 PUSH2 0x11DE JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP4 SWAP5 POP PUSH2 0xAB1 SWAP4 SWAP3 POP DUP5 SWAP2 POP POP PUSH2 0x1239 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x8 SLOAD PUSH2 0xAD7 SWAP1 DUP3 PUSH2 0x1239 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x9 SLOAD PUSH2 0xAE7 SWAP1 DUP5 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x9 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0xAF7 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x7 SLOAD DUP4 GT ISZERO PUSH2 0xB3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x22B5 JUMP JUMPDEST DUP2 PUSH2 0xB5F JUMPI PUSH1 0x0 PUSH2 0xB4F DUP5 PUSH2 0x11DE JUMP JUMPDEST POP SWAP5 SWAP7 POP PUSH2 0x746 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB6A DUP5 PUSH2 0x11DE JUMP JUMPDEST POP SWAP4 SWAP7 POP PUSH2 0x746 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB82 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x11 DUP2 SWAP1 SSTORE PUSH1 0xF SLOAD PUSH1 0xD SLOAD PUSH2 0x9C4 SWAP2 DUP4 SWAP2 PUSH2 0x668 SWAP2 SWAP1 PUSH2 0x24DC JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xBC4 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xBFD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x224F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xC57 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC3D SWAP1 PUSH2 0x7F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE SWAP1 SWAP2 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xD21 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x746 SWAP1 PUSH2 0x7F4 JUMP JUMPDEST PUSH2 0xD4B PUSH2 0xF4A JUMP JUMPDEST PUSH2 0xD55 PUSH1 0x0 PUSH2 0x1245 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xD8C PUSH2 0xF4A JUMP JUMPDEST PUSH1 0xF DUP2 SWAP1 SSTORE PUSH1 0x11 SLOAD PUSH1 0xD SLOAD PUSH2 0x9C4 SWAP2 SWAP1 PUSH2 0x668 SWAP1 DUP5 SWAP1 PUSH2 0x24DC JUMP JUMPDEST PUSH1 0x60 PUSH1 0xB DUP1 SLOAD PUSH2 0x6AB SWAP1 PUSH2 0x254A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x742 PUSH2 0xDC3 PUSH2 0xF89 JUMP JUMPDEST DUP5 PUSH2 0x7E5 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25F4 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x3 PUSH1 0x0 PUSH2 0xDED PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x1183 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x742 PUSH2 0xE2B PUSH2 0xF89 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x1041 JUMP JUMPDEST PUSH2 0xE3A PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA8 SHL NOT AND PUSH1 0x1 PUSH1 0xA8 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x53726DFCAF90650AA7EB35524F4D3220F07413C8D6CB404CC8C18BF5591BC159 SWAP1 PUSH2 0xE81 SWAP1 DUP4 SWAP1 PUSH2 0x20DC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xECE PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xEF7 PUSH2 0xF4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF1D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x21C7 JUMP JUMPDEST PUSH2 0x699 DUP2 PUSH2 0x1245 JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF37 DUP3 DUP5 PUSH2 0x2514 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF37 DUP3 DUP5 PUSH2 0x24F4 JUMP JUMPDEST PUSH2 0xF52 PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xF63 PUSH2 0xD75 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x22EC JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xFB3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x23AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xFD9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x220D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1034 SWAP1 DUP6 SWAP1 PUSH2 0x243F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1067 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x236A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x108D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x213A JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x10AD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP1 PUSH2 0x2321 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B8 ADDRESS PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x17 SLOAD SWAP1 SWAP2 POP DUP2 LT DUP1 ISZERO SWAP1 DUP2 SWAP1 PUSH2 0x10D9 JUMPI POP PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x10F3 JUMPI POP PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1108 JUMPI POP PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0xA8 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x111B JUMPI PUSH1 0x17 SLOAD SWAP2 POP PUSH2 0x111B DUP3 PUSH2 0x1295 JUMP JUMPDEST PUSH2 0x1124 DUP4 PUSH2 0x1336 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x1166 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x116F JUMPI POP PUSH1 0x0 JUMPDEST PUSH2 0x117B DUP7 DUP7 DUP7 DUP5 PUSH2 0x139C JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x11A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x20E7 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x11BC PUSH2 0x150A JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x11CB DUP3 DUP3 PUSH2 0xF3E JUMP JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF37 DUP3 DUP5 PUSH2 0x24DC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x11F8 DUP13 PUSH2 0x16C7 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1219 DUP16 DUP8 DUP8 DUP8 PUSH2 0x1214 PUSH2 0x11AF JUMP JUMPDEST PUSH2 0x171C JUMP JUMPDEST SWAP2 SWAP16 POP SWAP14 POP SWAP12 POP SWAP6 SWAP10 POP SWAP4 SWAP8 POP SWAP2 SWAP6 POP SWAP4 POP POP POP POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP1 SWAP3 SWAP5 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF37 DUP3 DUP5 PUSH2 0x2533 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH1 0x0 PUSH2 0x12B5 DUP3 PUSH1 0x2 PUSH2 0xF3E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12C3 DUP4 DUP4 PUSH2 0x1239 JUMP JUMPDEST SWAP1 POP SELFBALANCE PUSH2 0x12CF DUP4 PUSH2 0x177E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12DB SELFBALANCE DUP4 PUSH2 0x1239 JUMP JUMPDEST SWAP1 POP PUSH2 0x12E7 DUP4 DUP3 PUSH2 0x18FB JUMP JUMPDEST PUSH32 0x17BBFB9A6069321B6DED73BD96327C9E6B7212A5CD51FF219CD61370ACAFB561 DUP5 DUP3 DUP6 PUSH1 0x40 MLOAD PUSH2 0x131A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x24B8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1350 PUSH2 0x2710 PUSH2 0x134A DUP5 PUSH2 0x190 PUSH2 0xF2B JUMP JUMPDEST SWAP1 PUSH2 0xF3E JUMP JUMPDEST SWAP1 POP SELFBALANCE DUP2 DUP2 GT ISZERO PUSH2 0x1397 JUMPI PUSH1 0x16 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1395 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x13A9 JUMPI PUSH2 0x13A9 PUSH2 0x19AD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x13EA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x13FF JUMPI PUSH2 0x13FA DUP5 DUP5 DUP5 PUSH2 0x19F5 JUMP JUMPDEST PUSH2 0x14FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1440 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x1450 JUMPI PUSH2 0x13FA DUP5 DUP5 DUP5 PUSH2 0x1B39 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1492 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x14A2 JUMPI PUSH2 0x13FA DUP5 DUP5 DUP5 PUSH2 0x1BF8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x14E2 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x14F2 JUMPI PUSH2 0x13FA DUP5 DUP5 DUP5 PUSH2 0x1C52 JUMP JUMPDEST PUSH2 0x14FD DUP5 DUP5 DUP5 PUSH2 0x1BF8 JUMP JUMPDEST DUP1 PUSH2 0x1395 JUMPI PUSH2 0x1395 PUSH2 0x1CDB JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x1695 JUMPI DUP3 PUSH1 0x1 PUSH1 0x0 PUSH1 0x6 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1547 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD GT DUP1 PUSH2 0x15C0 JUMPI POP DUP2 PUSH1 0x2 PUSH1 0x0 PUSH1 0x6 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1599 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD GT JUMPDEST ISZERO PUSH2 0x15D7 JUMPI PUSH1 0x8 SLOAD PUSH1 0x7 SLOAD SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x16C3 JUMP JUMPDEST PUSH2 0x162B PUSH1 0x1 PUSH1 0x0 PUSH1 0x6 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x15FF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD DUP5 SWAP1 PUSH2 0x1239 JUMP JUMPDEST SWAP3 POP PUSH2 0x1681 PUSH1 0x2 PUSH1 0x0 PUSH1 0x6 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1655 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH2 0x1239 JUMP JUMPDEST SWAP2 POP DUP1 PUSH2 0x168D DUP2 PUSH2 0x2585 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1517 JUMP JUMPDEST POP PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH2 0x16A5 SWAP2 PUSH2 0xF3E JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x16BD JUMPI PUSH1 0x8 SLOAD PUSH1 0x7 SLOAD SWAP4 POP SWAP4 POP POP POP PUSH2 0x16C3 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x16D8 DUP7 PUSH2 0x1CEF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x16E5 DUP8 PUSH2 0x1D0C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x16F2 DUP9 PUSH2 0x1D29 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x170C DUP3 PUSH2 0x1706 DUP6 DUP2 DUP14 DUP10 PUSH2 0x1239 JUMP JUMPDEST SWAP1 PUSH2 0x1239 JUMP JUMPDEST SWAP10 SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x172B DUP10 DUP7 PUSH2 0xF2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1739 DUP10 DUP8 PUSH2 0xF2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1747 DUP10 DUP9 PUSH2 0xF2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1755 DUP10 DUP10 PUSH2 0xF2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1769 DUP3 PUSH2 0x1706 DUP6 DUP2 DUP10 DUP10 PUSH2 0x1239 JUMP JUMPDEST SWAP5 SWAP14 SWAP5 SWAP13 POP SWAP3 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP ADDRESS DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x17C1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x13 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP4 AND SWAP3 PUSH4 0xAD5C4648 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1815 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1829 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x184D SWAP2 SWAP1 PUSH2 0x1F44 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x186E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x13 SLOAD PUSH2 0x1894 SWAP2 ADDRESS SWAP2 AND DUP5 PUSH2 0xF8D JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x40 MLOAD PUSH4 0x791AC947 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x791AC947 SWAP1 PUSH2 0x18CD SWAP1 DUP6 SWAP1 PUSH1 0x0 SWAP1 DUP7 SWAP1 ADDRESS SWAP1 TIMESTAMP SWAP1 PUSH1 0x4 ADD PUSH2 0x2448 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x117B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x13 SLOAD PUSH2 0x1913 SWAP1 ADDRESS SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH2 0xF8D JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF305D719 DUP3 ADDRESS DUP6 PUSH1 0x0 DUP1 PUSH2 0x1932 PUSH2 0xD75 JUMP JUMPDEST TIMESTAMP PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1954 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x20A1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x196D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1981 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A6 SWAP2 SWAP1 PUSH2 0x2060 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0xD SLOAD ISZERO DUP1 ISZERO PUSH2 0x19BD JUMPI POP PUSH1 0xF SLOAD ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x19C9 JUMPI POP PUSH1 0x11 SLOAD ISZERO JUMPDEST ISZERO PUSH2 0x19D3 JUMPI PUSH2 0xD55 JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0xE SSTORE PUSH1 0xF DUP1 SLOAD PUSH1 0x10 SSTORE PUSH1 0x11 DUP1 SLOAD PUSH1 0x12 SSTORE PUSH1 0x0 SWAP3 DUP4 SWAP1 SSTORE SWAP1 DUP3 SWAP1 SSTORE SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A09 DUP9 PUSH2 0x11DE JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP PUSH2 0x1A4F DUP9 PUSH1 0x2 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x1239 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x1 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1A7E SWAP1 DUP9 PUSH2 0x1239 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP12 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1AAD SWAP1 DUP8 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x1ACF DUP3 PUSH2 0x1D5F JUMP JUMPDEST PUSH2 0x1AD8 DUP2 PUSH2 0x1DE7 JUMP JUMPDEST PUSH2 0x1AE2 DUP6 DUP5 PUSH2 0x1EF4 JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP7 PUSH1 0x40 MLOAD PUSH2 0x1B25 SWAP2 SWAP1 PUSH2 0x243F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B4D DUP9 PUSH2 0x11DE JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP PUSH2 0x1B93 DUP8 PUSH1 0x1 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x1239 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP13 AND DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH2 0x1BC9 SWAP1 DUP6 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x1 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1AAD SWAP1 DUP8 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C0C DUP9 PUSH2 0x11DE JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP PUSH2 0x1A7E DUP8 PUSH1 0x1 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x1239 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C66 DUP9 PUSH2 0x11DE JUMP JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP PUSH2 0x1CAC DUP9 PUSH1 0x2 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x1239 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x1 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1B93 SWAP1 DUP9 PUSH2 0x1239 JUMP JUMPDEST PUSH1 0xE SLOAD PUSH1 0xD SSTORE PUSH1 0x10 SLOAD PUSH1 0xF SSTORE PUSH1 0x12 SLOAD PUSH1 0x11 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x746 PUSH2 0x2710 PUSH2 0x134A PUSH1 0xD SLOAD DUP6 PUSH2 0xF2B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x746 PUSH2 0x2710 PUSH2 0x134A PUSH1 0xF SLOAD DUP6 PUSH2 0xF2B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D44 JUMPI POP PUSH1 0x0 PUSH2 0x832 JUMP JUMPDEST PUSH2 0x746 PUSH2 0x2710 PUSH2 0x134A PUSH1 0x11 SLOAD DUP6 PUSH2 0xF2B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D69 PUSH2 0x11AF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1D77 DUP4 DUP4 PUSH2 0xF2B JUMP JUMPDEST ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1D94 SWAP1 DUP3 PUSH2 0x11D2 JUMP JUMPDEST ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x5 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1397 JUMPI ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1DD2 SWAP1 DUP5 PUSH2 0x11D2 JUMP JUMPDEST ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP POP POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x699 JUMPI PUSH1 0x0 PUSH2 0x1DF7 PUSH2 0x11AF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1E05 DUP4 DUP4 PUSH2 0xF2B JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1E2D SWAP1 DUP3 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 SLOAD SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1EA8 JUMPI PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1E8C SWAP1 DUP5 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EBC PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD PUSH2 0x1034 SWAP2 SWAP1 PUSH2 0x243F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x1F01 SWAP1 DUP4 PUSH2 0x1239 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x9 SLOAD PUSH2 0x1F11 SWAP1 DUP3 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x9 SSTORE POP POP JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x832 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F39 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xF37 DUP2 PUSH2 0x25B6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F55 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xF37 DUP2 PUSH2 0x25B6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1F72 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1F7D DUP2 PUSH2 0x25B6 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1F8D DUP2 PUSH2 0x25B6 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1FAC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FB7 DUP2 PUSH2 0x25B6 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FC7 DUP2 PUSH2 0x25B6 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FEA JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FF5 DUP2 PUSH2 0x25B6 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2014 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xF37 DUP3 PUSH2 0x1F18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x202E JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2047 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x2057 PUSH1 0x20 DUP5 ADD PUSH2 0x1F18 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2074 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2113 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x20F7 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x2124 JUMPI DUP4 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2A SWAP1 DUP3 ADD MSTORE PUSH32 0x416D6F756E74206D757374206265206C657373207468616E20746F74616C2072 PUSH1 0x40 DUP3 ADD MSTORE PUSH10 0x65666C656374696F6E73 PUSH1 0xB0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x4163636F756E7420697320616C7265616479206578636C756465640000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x546F74616C20666565206973206F76657220323525 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x416D6F756E74206D757374206265206C657373207468616E20737570706C7900 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x5472616E7366657220616D6F756E74206D757374206265206772656174657220 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x7468616E207A65726F PUSH1 0xB8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x4578636C75646564206164647265737365732063616E6E6F742063616C6C2074 PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x3434B990333AB731BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD DUP8 DUP4 MSTORE PUSH1 0x20 DUP8 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP8 MLOAD DUP1 DUP5 MSTORE PUSH1 0xC0 DUP7 ADD SWAP2 POP DUP3 DUP10 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2497 JUMPI DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2472 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 SWAP1 SWAP7 AND PUSH1 0x60 DUP6 ADD MSTORE POP POP POP PUSH1 0x80 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x24EF JUMPI PUSH2 0x24EF PUSH2 0x25A0 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x250F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x252E JUMPI PUSH2 0x252E PUSH2 0x25A0 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2545 JUMPI PUSH2 0x2545 PUSH2 0x25A0 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x255E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x257F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x2599 JUMPI PUSH2 0x2599 PUSH2 0x25A0 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x699 JUMPI PUSH1 0x0 DUP1 REVERT INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20646563 PUSH19 0x656173656420616C6C6F77616E63652062656C PUSH16 0x77207A65726FA2646970667358221220 0xAB DUP3 SWAP3 0xDD 0x21 0xB8 PUSH13 0xFDB0512D32809E8EF4616B51DA TIMESTAMP 0xB9 CALLDATACOPY SWAP4 PUSH28 0xEB1D52B86D056364736F6C6343000801003300000000000000000000 ",
"sourceMap": "399:22131:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9126:230;;;;;;;;;;-1:-1:-1;9126:230:6;;;;;:::i;:::-;;:::i;:::-;;3480:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4426:186;;;;;;;;;;-1:-1:-1;4426:186:6;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5866:85::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1397:41::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3745:93::-;;;;;;;;;;;;;:::i;1297:34::-;;;;;;;;;;;;;:::i;4618:431::-;;;;;;;;;;-1:-1:-1;4618:431:6;;;;;:::i;:::-;;:::i;6850:311::-;;;;;;;;;;-1:-1:-1;6850:311:6;;;;;:::i;:::-;;:::i;3658:81::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7611:466::-;;;;;;;;;;-1:-1:-1;7611:466:6;;;;;:::i;:::-;;:::i;5055:289::-;;;;;;;;;;-1:-1:-1;5055:289:6;;;;;:::i;:::-;;:::i;1115:28::-;;;;;;;;;;;;;:::i;5957:411::-;;;;;;;;;;-1:-1:-1;5957:411:6;;;;;:::i;:::-;;:::i;8897:109::-;;;;;;;;;;-1:-1:-1;8897:109:6;;;;;:::i;:::-;;:::i;6374:470::-;;;;;;;;;;-1:-1:-1;6374:470:6;;;;;:::i;:::-;;:::i;9642:274::-;;;;;;;;;;-1:-1:-1;9642:274:6;;;;;:::i;:::-;;:::i;1444:28::-;;;;;;;;;;;;;:::i;1577:33::-;;;;;;;;;;;;;:::i;7167:438::-;;;;;;;;;;-1:-1:-1;7167:438:6;;;;;:::i;:::-;;:::i;15104:122::-;;;;;;;;;;-1:-1:-1;15104:122:6;;;;;:::i;:::-;;:::i;1197:34::-;;;;;;;;;;;;;:::i;3844:195::-;;;;;;;;;;-1:-1:-1;3844:195:6;;;;;:::i;:::-;;:::i;1831:101:0:-;;;;;;;;;;;;;:::i;5742:118:6:-;;;;;;;;;;-1:-1:-1;5742:118:6;;;;;:::i;:::-;;:::i;1201:85:0:-;;;;;;;;;;;;;:::i;9362:274:6:-;;;;;;;;;;-1:-1:-1;9362:274:6;;;;;:::i;:::-;;:::i;3567:85::-;;;;;;;;;;;;;:::i;5350:386::-;;;;;;;;;;-1:-1:-1;5350:386:6;;;;;:::i;:::-;;:::i;4045:192::-;;;;;;;;;;-1:-1:-1;4045:192:6;;;;;:::i;:::-;;:::i;9922:168::-;;;;;;;;;;-1:-1:-1;9922:168:6;;;;;:::i;:::-;;:::i;1478:32::-;;;;;;;;;;;;;:::i;4243:177::-;;;;;;;;;;-1:-1:-1;4243:177:6;;;;;:::i;:::-;;:::i;9012:108::-;;;;;;;;;;-1:-1:-1;9012:108:6;;;;;:::i;:::-;;:::i;2081:198:0:-;;;;;;;;;;-1:-1:-1;2081:198:0;;;;;:::i;:::-;;:::i;516:35:6:-;;;;;;;;;;;;;:::i;9126:230::-;1094:13:0;:11;:13::i;:::-;9200:7:6::1;:19:::0;;;9276:13:::1;::::0;9260::::1;::::0;9293:9:::1;::::0;9276:13;9250:23:::1;::::0;9210:9;9250:23:::1;:::i;:::-;:39;;;;:::i;:::-;:52;;9229:120;;;;-1:-1:-1::0;;;9229:120:6::1;;;;;;;:::i;:::-;;;;;;;;;9126:230:::0;:::o;3480:81::-;3517:13;3549:5;3542:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3480:81;:::o;4426:186::-;4525:4;4545:39;4554:12;:10;:12::i;:::-;4568:7;4577:6;4545:8;:39::i;:::-;-1:-1:-1;4601:4:6;4426:186;;;;;:::o;5866:85::-;5934:10;;5866:85;:::o;1397:41::-;;;-1:-1:-1;;;;;1397:41:6;;:::o;3745:93::-;3824:7;;3745:93;:::o;1297:34::-;;;;:::o;4618:431::-;4746:4;4762:36;4772:6;4780:9;4791:6;4762:9;:36::i;:::-;4808:213;4830:6;4850:12;:10;:12::i;:::-;4876:135;4931:6;4876:135;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4876:19:6;;;;;;:11;:19;;;;;;4896:12;:10;:12::i;:::-;-1:-1:-1;;;;;4876:33:6;;;;;;;;;;;;-1:-1:-1;4876:33:6;;;:135;:37;:135::i;:::-;4808:8;:213::i;:::-;-1:-1:-1;5038:4:6;4618:431;;;;;:::o;6850:311::-;6941:7;6996;;6985;:18;;6964:107;;;;-1:-1:-1;;;6964:107:6;;;;;;;:::i;:::-;7081:19;7103:10;:8;:10::i;:::-;7081:32;-1:-1:-1;7130:24:6;:7;7081:32;7130:11;:24::i;:::-;7123:31;;;6850:311;;;;:::o;3658:81::-;3723:9;;;;3658:81;:::o;7611:466::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;7690:20:6;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;7682:60;;;;-1:-1:-1::0;;;7682:60:6::1;;;;;;;:::i;:::-;7757:9;7752:319;7776:9;:16:::0;7772:20;::::1;7752:319;;;7833:7;-1:-1:-1::0;;;;;7817:23:6::1;:9;7827:1;7817:12;;;;;;-1:-1:-1::0;;;7817:12:6::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;7817:12:6::1;:23;7813:248;;;7875:9;7885:16:::0;;:20:::1;::::0;7904:1:::1;::::0;7885:20:::1;:::i;:::-;7875:31;;;;;;-1:-1:-1::0;;;7875:31:6::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;7860:9:::1;:12:::0;;-1:-1:-1;;;;;7875:31:6;;::::1;::::0;7870:1;;7860:12;::::1;;;-1:-1:-1::0;;;7860:12:6::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;7860:46:6::1;-1:-1:-1::0;;;;;7860:46:6;;::::1;;::::0;;7924:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;7962:11:::1;:20:::0;;;;:28;;-1:-1:-1;;7962:28:6::1;::::0;;8008:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;8008:15:6::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8008:15:6;;;;;-1:-1:-1;;;;;;8008:15:6::1;::::0;;;;;8041:5:::1;;7813:248;7794:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7752:319;;;;7611:466:::0;:::o;5055:289::-;5167:4;5187:129;5209:12;:10;:12::i;:::-;5235:7;5256:50;5295:10;5256:11;:25;5268:12;:10;:12::i;:::-;-1:-1:-1;;;;;5256:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;5256:25:6;;;:34;;;;;;;;;;;:38;:50::i;1115:28::-;;;;:::o;5957:411::-;6008:14;6025:12;:10;:12::i;:::-;-1:-1:-1;;;;;6069:19:6;;;;;;:11;:19;;;;;;6008:29;;-1:-1:-1;6069:19:6;;6068:20;6047:111;;;;-1:-1:-1;;;6047:111:6;;;;;;;:::i;:::-;6169:15;6200:19;6211:7;6200:10;:19::i;:::-;-1:-1:-1;;;;;;;;6247:15:6;;;;;;:7;:15;;;;;;6168:51;;-1:-1:-1;6247:28:6;;:15;-1:-1:-1;6168:51:6;;-1:-1:-1;;6247:19:6;:28::i;:::-;-1:-1:-1;;;;;6229:15:6;;;;;;:7;:15;;;;;:46;6295:7;;:20;;6307:7;6295:11;:20::i;:::-;6285:7;:30;6338:10;;:23;;6353:7;6338:14;:23::i;:::-;6325:10;:36;-1:-1:-1;;;5957:411:6:o;8897:109::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;8965:27:6::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;8965:34:6::1;8995:4;8965:34;::::0;;8897:109::o;6374:470::-;6489:7;6531;;6520;:18;;6512:62;;;;-1:-1:-1;;;6512:62:6;;;;;;;:::i;:::-;6589:17;6584:254;;6623:15;6654:19;6665:7;6654:10;:19::i;:::-;-1:-1:-1;6622:51:6;;-1:-1:-1;6687:14:6;;-1:-1:-1;;;;;;6687:14:6;6584:254;6735:23;6772:19;6783:7;6772:10;:19::i;:::-;-1:-1:-1;6732:59:6;;-1:-1:-1;6805:22:6;;-1:-1:-1;;;;;;6805:22:6;9642:274;1094:13:0;:11;:13::i;:::-;9748::6::1;:31:::0;;;9820:13:::1;::::0;9810:7:::1;::::0;9853:9:::1;::::0;9764:15;;9810:23:::1;::::0;9820:13;9810:23:::1;:::i;1444:28::-:0;;;-1:-1:-1;;;;;1444:28:6;;:::o;1577:33::-;;;-1:-1:-1;;;1577:33:6;;;;;:::o;7167:438::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;7360:20:6;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;7359:21;7351:61;;;;-1:-1:-1::0;;;7351:61:6::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7426:16:6;::::1;7445:1;7426:16:::0;;;:7:::1;:16;::::0;;;;;:20;7422:107:::1;;-1:-1:-1::0;;;;;7501:16:6;::::1;;::::0;;;:7:::1;:16;::::0;;;;;7481:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;7462:16:6;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;7422:107:::1;-1:-1:-1::0;;;;;7538:20:6::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;7538:27:6::1;7561:4;7538:27:::0;;::::1;::::0;;;7575:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;7575:23:6::1;::::0;;::::1;::::0;;7167:438::o;15104:122::-;-1:-1:-1;;;;;15192:27:6;15169:4;15192:27;;;:18;:27;;;;;;;;;15104:122::o;1197:34::-;;;;:::o;3844:195::-;-1:-1:-1;;;;;3933:20:6;;3910:7;3933:20;;;:11;:20;;;;;;;;3929:49;;;-1:-1:-1;;;;;;3962:16:6;;;;;;:7;:16;;;;;;3955:23;;3929:49;-1:-1:-1;;;;;4015:16:6;;;;;;:7;:16;;;;;;3995:37;;:19;:37::i;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;5742:118:6:-;-1:-1:-1;;;;;5833:20:6;5810:4;5833:20;;;:11;:20;;;;;;;;;5742:118::o;1201:85:0:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;:::o;9362:274:6:-;1094:13:0;:11;:13::i;:::-;9468::6::1;:31:::0;;;9556:13:::1;::::0;9530:7:::1;::::0;9573:9:::1;::::0;9556:13;9530:23:::1;::::0;9484:15;;9530:23:::1;:::i;3567:85::-:0;3606:13;3638:7;3631:14;;;;;:::i;5350:386::-;5467:4;5487:221;5509:12;:10;:12::i;:::-;5535:7;5556:142;5612:15;5556:142;;;;;;;;;;;;;;;;;:11;:25;5568:12;:10;:12::i;:::-;-1:-1:-1;;;;;5556:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;5556:25:6;;;:34;;;;;;;;;;;:142;:38;:142::i;4045:192::-;4147:4;4167:42;4177:12;:10;:12::i;:::-;4191:9;4202:6;4167:9;:42::i;9922:168::-;1094:13:0;:11;:13::i;:::-;9998:21:6::1;:32:::0;;-1:-1:-1;;;;9998:32:6::1;-1:-1:-1::0;;;9998:32:6;::::1;;;;::::0;;10045:38:::1;::::0;::::1;::::0;::::1;::::0;9998:32;;10045:38:::1;:::i;:::-;;;;;;;;9922:168:::0;:::o;1478:32::-;;;-1:-1:-1;;;;;1478:32:6;;:::o;4243:177::-;-1:-1:-1;;;;;4386:18:6;;;4356:7;4386:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4243:177::o;9012:108::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;9078:27:6::1;9108:5;9078:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;9078:35:6::1;::::0;;9012:108::o;2081:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:0;::::1;2161:73;;;;-1:-1:-1::0;;;2161:73:0::1;;;;;;;:::i;:::-;2244:28;2263:8;2244:18;:28::i;516:35:6:-:0;550:1;516:35;:::o;3465:96:4:-;3523:7;3549:5;3553:1;3549;:5;:::i;:::-;3542:12;3465:96;-1:-1:-1;;;3465:96:4:o;3850:::-;3908:7;3934:5;3938:1;3934;:5;:::i;1359:130:0:-;1433:12;:10;:12::i;:::-;-1:-1:-1;;;;;1422:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1422:23:0;;1414:68;;;;-1:-1:-1;;;1414:68:0;;;;;;;:::i;640:96:3:-;719:10;640:96;:::o;15232:361:6:-;-1:-1:-1;;;;;15354:19:6;;15346:68;;;;-1:-1:-1;;;15346:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;15432:21:6;;15424:68;;;;-1:-1:-1;;;15424:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;15503:18:6;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;15554:32;;;;;15533:6;;15554:32;:::i;:::-;;;;;;;;15232:361;;;:::o;15599:1522::-;-1:-1:-1;;;;;15716:18:6;;15708:68;;;;-1:-1:-1;;;15708:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;15794:16:6;;15786:64;;;;-1:-1:-1;;;15786:64:6;;;;;;;:::i;:::-;15877:1;15868:6;:10;15860:64;;;;-1:-1:-1;;;15860:64:6;;;;;;;:::i;:::-;16213:28;16244:24;16262:4;16244:9;:24::i;:::-;16342:29;;16213:55;;-1:-1:-1;16306:65:6;;;;;;;16398:52;;-1:-1:-1;16434:16:6;;-1:-1:-1;;;16434:16:6;;;;16433:17;16398:52;:89;;;;-1:-1:-1;16474:13:6;;-1:-1:-1;;;;;16466:21:6;;;16474:13;;16466:21;;16398:89;:126;;;;-1:-1:-1;16503:21:6;;-1:-1:-1;;;16503:21:6;;;;16398:126;16381:309;;;16572:29;;16549:52;;16643:36;16658:20;16643:14;:36::i;:::-;16699:19;16711:6;16699:11;:19::i;:::-;-1:-1:-1;;;;;16906:24:6;;16789:12;16906:24;;;:18;:24;;;;;;16804:4;;16906:24;;;:50;;-1:-1:-1;;;;;;16934:22:6;;;;;;:18;:22;;;;;;;;16906:50;16902:96;;;-1:-1:-1;16982:5:6;16902:96;17073:41;17088:4;17094:2;17098:6;17106:7;17073:14;:41::i;:::-;15599:1522;;;;;;:::o;4959:231:4:-;5075:7;5134:12;5126:6;;;;5118:29;;;;-1:-1:-1;;;5118:29:4;;;;;;;;:::i;:::-;-1:-1:-1;;;5168:5:4;;;4959:231::o;12365:161:6:-;12407:7;12427:15;12444;12463:19;:17;:19::i;:::-;12426:56;;-1:-1:-1;12426:56:6;-1:-1:-1;12499:20:6;12426:56;;12499:11;:20::i;:::-;12492:27;;;;12365:161;:::o;2755:96:4:-;2813:7;2839:5;2843:1;2839;:5;:::i;10336:812:6:-;10432:7;10453;10474;10495;10516;10537;10558;10604:23;10641:12;10667:18;10699;10730:20;10742:7;10730:11;:20::i;:::-;10590:160;;;;;;;;10761:15;10778:23;10803:12;10819:132;10844:7;10865:4;10883:10;10907;10931;:8;:10::i;:::-;10819:11;:132::i;:::-;10760:191;;-1:-1:-1;10760:191:6;-1:-1:-1;10760:191:6;-1:-1:-1;11050:15:6;;-1:-1:-1;11079:4:6;;-1:-1:-1;11097:10:6;;-1:-1:-1;11121:10:6;-1:-1:-1;;;;10336:812:6;;;;;;;;;:::o;3122:96:4:-;3180:7;3206:5;3210:1;3206;:5;:::i;2433:187:0:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:0;;;-1:-1:-1;;;;;;2541:17:0;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2433:187;;:::o;17408:956:6:-;1952:16;:23;;-1:-1:-1;;;;1952:23:6;-1:-1:-1;;;1952:23:6;;;;17557:27:::1;:20:::0;17582:1:::1;17557:24;:27::i;:::-;17542:42:::0;-1:-1:-1;17594:17:6::1;17614:30;:20:::0;17542:42;17614:24:::1;:30::i;:::-;17594:50:::0;-1:-1:-1;17941:21:6::1;18004:22;18021:4:::0;18004:16:::1;:22::i;:::-;18154:18;18175:41;:21;18201:14:::0;18175:25:::1;:41::i;:::-;18154:62;;18263:35;18276:9;18287:10;18263:12;:35::i;:::-;18314:43;18329:4;18335:10;18347:9;18314:43;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;1996:16:6;:24;;-1:-1:-1;;;;1996:24:6;;;-1:-1:-1;;;17408:956:6:o;17127:275::-;17183:15;17201:27;17222:5;17201:16;:7;17213:3;17201:11;:16::i;:::-;:20;;:27::i;:::-;17183:45;-1:-1:-1;17267:21:6;17303:28;;;17299:97;;;17355:11;;17347:38;;-1:-1:-1;;;;;17355:11:6;;;;17347:38;;;;;17377:7;;17355:11;17347:38;17355:11;17347:38;17377:7;17355:11;17347:38;;;;;;;;;;;;;;;;;;;;;17299:97;17127:275;;;:::o;19527:817::-;19677:7;19672:28;;19686:14;:12;:14::i;:::-;-1:-1:-1;;;;;19715:19:6;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;19739:22:6;;;;;;:11;:22;;;;;;;;19738:23;19715:46;19711:587;;;19777:48;19799:6;19807:9;19818:6;19777:21;:48::i;:::-;19711:587;;;-1:-1:-1;;;;;19847:19:6;;;;;;:11;:19;;;;;;;;19846:20;:46;;;;-1:-1:-1;;;;;;19870:22:6;;;;;;:11;:22;;;;;;;;19846:46;19842:456;;;19908:46;19928:6;19936:9;19947:6;19908:19;:46::i;19842:456::-;-1:-1:-1;;;;;19976:19:6;;;;;;:11;:19;;;;;;;;19975:20;:47;;;;-1:-1:-1;;;;;;20000:22:6;;;;;;:11;:22;;;;;;;;19999:23;19975:47;19971:327;;;20038:44;20056:6;20064:9;20075:6;20038:17;:44::i;19971:327::-;-1:-1:-1;;;;;20103:19:6;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;20126:22:6;;;;;;:11;:22;;;;;;;;20103:45;20099:199;;;20164:48;20186:6;20194:9;20205:6;20164:21;:48::i;20099:199::-;20243:44;20261:6;20269:9;20280:6;20243:17;:44::i;:::-;20313:7;20308:29;;20322:15;:13;:15::i;12532:592::-;12629:7;;12664;;12583;;;;;12681:331;12705:9;:16;12701:20;;12681:331;;;12787:7;12763;:21;12771:9;12781:1;12771:12;;;;;;-1:-1:-1;;;12771:12:6;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12771:12:6;12763:21;;;;;;;;;;;;;:31;;:82;;;12838:7;12814;:21;12822:9;12832:1;12822:12;;;;;;-1:-1:-1;;;12822:12:6;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12822:12:6;12814:21;;;;;;;;;;;;;:31;12763:82;12742:143;;;12868:7;;12877;;12860:25;;;;;;;;;12742:143;12909:34;12921:7;:21;12929:9;12939:1;12929:12;;;;;;-1:-1:-1;;;12929:12:6;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12929:12:6;12921:21;;;;;;;;;;;;;12909:7;;:11;:34::i;:::-;12899:44;;12967:34;12979:7;:21;12987:9;12997:1;12987:12;;;;;;-1:-1:-1;;;12987:12:6;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12987:12:6;12979:21;;;;;;;;;;;;;12967:7;;:11;:34::i;:::-;12957:44;-1:-1:-1;12723:3:6;;;;:::i;:::-;;;;12681:331;;;-1:-1:-1;13047:7:6;;13035;;:20;;:11;:20::i;:::-;13025:7;:30;13021:61;;;13065:7;;13074;;13057:25;;;;;;;;13021:61;13100:7;;-1:-1:-1;13109:7:6;-1:-1:-1;12532:592:6;;;:::o;11154:540::-;11251:7;11272;11293;11314;11346:12;11361:24;11377:7;11361:15;:24::i;:::-;11346:39;;11395:18;11416:30;11438:7;11416:21;:30::i;:::-;11395:51;;11456:21;11480:30;11502:7;11480:21;:30::i;:::-;11456:54;-1:-1:-1;11520:23:6;11546:74;11456:54;11546:33;11568:10;11546:33;:7;11558:4;11546:11;:17::i;:::-;:21;;:33::i;:74::-;11520:100;11655:4;;-1:-1:-1;11661:10:6;;-1:-1:-1;11661:10:6;-1:-1:-1;11154:540:6;;-1:-1:-1;;;11154:540:6:o;11700:659::-;11918:7;;;;12010:24;:7;12022:11;12010;:24::i;:::-;11992:42;-1:-1:-1;12044:12:6;12059:21;:4;12068:11;12059:8;:21::i;:::-;12044:36;-1:-1:-1;12090:18:6;12111:27;:10;12126:11;12111:14;:27::i;:::-;12090:48;-1:-1:-1;12148:18:6;12169:27;:10;12184:11;12169:14;:27::i;:::-;12148:48;-1:-1:-1;12206:23:6;12232:71;12148:48;12232:33;12254:10;12232:33;:7;12244:4;12232:11;:17::i;:71::-;12321:7;;;;-1:-1:-1;12347:4:6;;-1:-1:-1;11700:659:6;;-1:-1:-1;;;;;;;;;11700:659:6:o;18370:573::-;18518:16;;;18532:1;18518:16;;;;;;;;18494:21;;18518:16;;;;;;;;;;-1:-1:-1;18518:16:6;18494:40;;18562:4;18544;18549:1;18544:7;;;;;;-1:-1:-1;;;18544:7:6;;;;;;;;;-1:-1:-1;;;;;18544:23:6;;;:7;;;;;;;;;;:23;;;;18587:15;;:22;;;-1:-1:-1;;;18587:22:6;;;;:15;;;;;:20;;:22;;;;;18544:7;;18587:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18577:4;18582:1;18577:7;;;;;;-1:-1:-1;;;18577:7:6;;;;;;;;;-1:-1:-1;;;;;18577:32:6;;;:7;;;;;;;;;:32;18652:15;;18620:62;;18637:4;;18652:15;18670:11;18620:8;:62::i;:::-;18718:15;;:218;;-1:-1:-1;;;18718:218:6;;-1:-1:-1;;;;;18718:15:6;;;;:66;;:218;;18798:11;;18718:15;;18866:4;;18892;;18911:15;;18718:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18949:500;19127:15;;19095:62;;19112:4;;-1:-1:-1;;;;;19127:15:6;19145:11;19095:8;:62::i;:::-;19197:15;;-1:-1:-1;;;;;19197:15:6;:31;19236:9;19268:4;19287:11;19197:15;;19396:7;:5;:7::i;:::-;19417:15;19197:245;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18949:500;;:::o;14600:323::-;14646:7;;:12;:34;;;;-1:-1:-1;14662:13:6;;:18;14646:34;:56;;;;-1:-1:-1;14684:13:6;;:18;14646:56;14642:69;;;14704:7;;14642:69;14739:7;;;14721:15;:25;14780:13;;;14756:21;:37;14827:13;;;14803:21;:37;-1:-1:-1;14851:11:6;;;;14872:17;;;;14899;14600:323::o;21790:738::-;21935:15;21964:23;22001:12;22027:23;22064:12;22090:18;22122;22153:19;22164:7;22153:10;:19::i;:::-;21921:251;;;;;;;;;;;;;;22200:28;22220:7;22200;:15;22208:6;-1:-1:-1;;;;;22200:15:6;-1:-1:-1;;;;;22200:15:6;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;22182:15:6;;;;;;:7;:15;;;;;;;;:46;;;;22256:7;:15;;;;:28;;22276:7;22256:19;:28::i;:::-;-1:-1:-1;;;;;22238:15:6;;;;;;;:7;:15;;;;;;:46;;;;22315:18;;;;;;;:39;;22338:15;22315:22;:39::i;:::-;-1:-1:-1;;;;;22294:18:6;;;;;;:7;:18;;;;;:60;22364:26;22379:10;22364:14;:26::i;:::-;22400:29;22418:10;22400:17;:29::i;:::-;22439:23;22451:4;22457;22439:11;:23::i;:::-;22494:9;-1:-1:-1;;;;;22477:44:6;22486:6;-1:-1:-1;;;;;22477:44:6;;22505:15;22477:44;;;;;;:::i;:::-;;;;;;;;21790:738;;;;;;;;;;:::o;21034:750::-;21177:15;21206:23;21243:12;21269:23;21306:12;21332:18;21364;21395:19;21406:7;21395:10;:19::i;:::-;21163:251;;;;;;;;;;;;;;21442:28;21462:7;21442;:15;21450:6;-1:-1:-1;;;;;21442:15:6;-1:-1:-1;;;;;21442:15:6;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;21424:15:6;;;;;;;:7;:15;;;;;;;;:46;;;;21501:18;;;;;:7;:18;;;;;:39;;21524:15;21501:22;:39::i;:::-;-1:-1:-1;;;;;21480:18:6;;;;;;:7;:18;;;;;;;;:60;;;;21571:7;:18;;;;:39;;21594:15;21571:22;:39::i;20350:678::-;20491:15;20520:23;20557:12;20583:23;20620:12;20646:18;20678;20709:19;20720:7;20709:10;:19::i;:::-;20477:251;;;;;;;;;;;;;;20756:28;20776:7;20756;:15;20764:6;-1:-1:-1;;;;;20756:15:6;-1:-1:-1;;;;;20756:15:6;;;;;;;;;;;;;:19;;:28;;;;:::i;8083:808::-;8228:15;8257:23;8294:12;8320:23;8357:12;8383:18;8415;8446:19;8457:7;8446:10;:19::i;:::-;8214:251;;;;;;;;;;;;;;8493:28;8513:7;8493;:15;8501:6;-1:-1:-1;;;;;8493:15:6;-1:-1:-1;;;;;8493:15:6;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;8475:15:6;;;;;;:7;:15;;;;;;;;:46;;;;8549:7;:15;;;;:28;;8569:7;8549:19;:28::i;14929:169::-;14982:15;;14972:7;:25;15023:21;;15007:13;:37;15070:21;;15054:13;:37;14929:169::o;14063:128::-;14127:7;14153:31;14178:5;14153:20;14165:7;;14153;:11;;:20;;;;:::i;14197:168::-;14291:7;14321:37;14352:5;14321:26;14333:13;;14321:7;:11;;:26;;;;:::i;14371:223::-;14492:17;;14465:7;;-1:-1:-1;;;;;14492:17:6;14488:45;;-1:-1:-1;14532:1:6;14525:8;;14488:45;14550:37;14581:5;14550:26;14562:13;;14550:7;:11;;:26;;;;:::i;13130:349::-;13192:19;13214:10;:8;:10::i;:::-;13192:32;-1:-1:-1;13234:18:6;13255:27;:10;13192:32;13255:14;:27::i;:::-;13333:4;13317:22;;;;:7;:22;;;;;;13234:48;;-1:-1:-1;13317:38:6;;13234:48;13317:26;:38::i;:::-;13308:4;13292:22;;;;:7;:22;;;;;;;;:63;;;;13369:11;:26;;;;;;13365:107;;;13450:4;13434:22;;;;:7;:22;;;;;;:38;;13461:10;13434:26;:38::i;:::-;13425:4;13409:22;;;;:7;:22;;;;;:63;13130:349;;;:::o;13485:572::-;13554:14;;13550:501;;13584:19;13606:10;:8;:10::i;:::-;13584:32;-1:-1:-1;13630:18:6;13651:27;:10;13584:32;13651:14;:27::i;:::-;13729:17;;-1:-1:-1;;;;;13729:17:6;13721:26;;;;:7;:26;;;;;;13630:48;;-1:-1:-1;13721:72:6;;13630:48;13721:30;:72::i;:::-;13700:17;;;-1:-1:-1;;;;;13700:17:6;;;13692:26;;;;:7;:26;;;;;;;;:101;;;;13823:17;;;;;13811:30;;:11;:30;;;;;;;13807:161;;;13896:17;;-1:-1:-1;;;;;13896:17:6;13888:26;;;;:7;:26;;;;;;:80;;13940:10;13888:30;:80::i;:::-;13867:17;;-1:-1:-1;;;;;13867:17:6;13859:26;;;;:7;:26;;;;;:109;13807:161;14010:17;;-1:-1:-1;;;;;14010:17:6;13996:12;:10;:12::i;:::-;-1:-1:-1;;;;;13987:53:6;;14029:10;13987:53;;;;;;:::i;10186:144::-;10263:7;;:17;;10275:4;10263:11;:17::i;:::-;10253:7;:27;10303:10;;:20;;10318:4;10303:14;:20::i;:::-;10290:10;:33;-1:-1:-1;;10186:144:6:o;14:162:9:-;81:20;;137:13;;130:21;120:32;;110:2;;166:1;163;156:12;181:259;;293:2;281:9;272:7;268:23;264:32;261:2;;;314:6;306;299:22;261:2;358:9;345:23;377:33;404:5;377:33;:::i;445:263::-;;568:2;556:9;547:7;543:23;539:32;536:2;;;589:6;581;574:22;536:2;626:9;620:16;645:33;672:5;645:33;:::i;713:402::-;;;842:2;830:9;821:7;817:23;813:32;810:2;;;863:6;855;848:22;810:2;907:9;894:23;926:33;953:5;926:33;:::i;:::-;978:5;-1:-1:-1;1035:2:9;1020:18;;1007:32;1048:35;1007:32;1048:35;:::i;:::-;1102:7;1092:17;;;800:315;;;;;:::o;1120:470::-;;;;1266:2;1254:9;1245:7;1241:23;1237:32;1234:2;;;1287:6;1279;1272:22;1234:2;1331:9;1318:23;1350:33;1377:5;1350:33;:::i;:::-;1402:5;-1:-1:-1;1459:2:9;1444:18;;1431:32;1472:35;1431:32;1472:35;:::i;:::-;1224:366;;1526:7;;-1:-1:-1;;;1580:2:9;1565:18;;;;1552:32;;1224:366::o;1595:327::-;;;1724:2;1712:9;1703:7;1699:23;1695:32;1692:2;;;1745:6;1737;1730:22;1692:2;1789:9;1776:23;1808:33;1835:5;1808:33;:::i;:::-;1860:5;1912:2;1897:18;;;;1884:32;;-1:-1:-1;;;1682:240:9:o;1927:192::-;;2036:2;2024:9;2015:7;2011:23;2007:32;2004:2;;;2057:6;2049;2042:22;2004:2;2085:28;2103:9;2085:28;:::i;2124:190::-;;2236:2;2224:9;2215:7;2211:23;2207:32;2204:2;;;2257:6;2249;2242:22;2204:2;-1:-1:-1;2285:23:9;;2194:120;-1:-1:-1;2194:120:9:o;2319:260::-;;;2445:2;2433:9;2424:7;2420:23;2416:32;2413:2;;;2466:6;2458;2451:22;2413:2;2507:9;2494:23;2484:33;;2536:37;2569:2;2558:9;2554:18;2536:37;:::i;:::-;2526:47;;2403:176;;;;;:::o;2584:316::-;;;;2741:2;2729:9;2720:7;2716:23;2712:32;2709:2;;;2762:6;2754;2747:22;2709:2;2796:9;2790:16;2780:26;;2846:2;2835:9;2831:18;2825:25;2815:35;;2890:2;2879:9;2875:18;2869:25;2859:35;;2699:201;;;;;:::o;2905:203::-;-1:-1:-1;;;;;3069:32:9;;;;3051:51;;3039:2;3024:18;;3006:102::o;3113:607::-;-1:-1:-1;;;;;3472:15:9;;;3454:34;;3519:2;3504:18;;3497:34;;;;3562:2;3547:18;;3540:34;;;;3605:2;3590:18;;3583:34;;;;3654:15;;;3648:3;3633:19;;3626:44;3434:3;3686:19;;3679:35;;;;3403:3;3388:19;;3370:350::o;3725:187::-;3890:14;;3883:22;3865:41;;3853:2;3838:18;;3820:92::o;4152:603::-;;4293:2;4322;4311:9;4304:21;4354:6;4348:13;4397:6;4392:2;4381:9;4377:18;4370:34;4422:4;4435:140;4449:6;4446:1;4443:13;4435:140;;;4544:14;;;4540:23;;4534:30;4510:17;;;4529:2;4506:26;4499:66;4464:10;;4435:140;;;4593:6;4590:1;4587:13;4584:2;;;4663:4;4658:2;4649:6;4638:9;4634:22;4630:31;4623:45;4584:2;-1:-1:-1;4739:2:9;4718:15;-1:-1:-1;;4714:29:9;4699:45;;;;4746:2;4695:54;;4273:482;-1:-1:-1;;;4273:482:9:o;4760:399::-;4962:2;4944:21;;;5001:2;4981:18;;;4974:30;5040:34;5035:2;5020:18;;5013:62;-1:-1:-1;;;5106:2:9;5091:18;;5084:33;5149:3;5134:19;;4934:225::o;5164:406::-;5366:2;5348:21;;;5405:2;5385:18;;;5378:30;5444:34;5439:2;5424:18;;5417:62;-1:-1:-1;;;5510:2:9;5495:18;;5488:40;5560:3;5545:19;;5338:232::o;5575:402::-;5777:2;5759:21;;;5816:2;5796:18;;;5789:30;5855:34;5850:2;5835:18;;5828:62;-1:-1:-1;;;5921:2:9;5906:18;;5899:36;5967:3;5952:19;;5749:228::o;5982:398::-;6184:2;6166:21;;;6223:2;6203:18;;;6196:30;6262:34;6257:2;6242:18;;6235:62;-1:-1:-1;;;6328:2:9;6313:18;;6306:32;6370:3;6355:19;;6156:224::o;6385:351::-;6587:2;6569:21;;;6626:2;6606:18;;;6599:30;6665:29;6660:2;6645:18;;6638:57;6727:2;6712:18;;6559:177::o;6741:345::-;6943:2;6925:21;;;6982:2;6962:18;;;6955:30;-1:-1:-1;;;7016:2:9;7001:18;;6994:51;7077:2;7062:18;;6915:171::o;7091:355::-;7293:2;7275:21;;;7332:2;7312:18;;;7305:30;7371:33;7366:2;7351:18;;7344:61;7437:2;7422:18;;7265:181::o;7451:356::-;7653:2;7635:21;;;7672:18;;;7665:30;7731:34;7726:2;7711:18;;7704:62;7798:2;7783:18;;7625:182::o;7812:405::-;8014:2;7996:21;;;8053:2;8033:18;;;8026:30;8092:34;8087:2;8072:18;;8065:62;-1:-1:-1;;;8158:2:9;8143:18;;8136:39;8207:3;8192:19;;7986:231::o;8222:401::-;8424:2;8406:21;;;8463:2;8443:18;;;8436:30;8502:34;8497:2;8482:18;;8475:62;-1:-1:-1;;;8568:2:9;8553:18;;8546:35;8613:3;8598:19;;8396:227::o;8628:400::-;8830:2;8812:21;;;8869:2;8849:18;;;8842:30;8908:34;8903:2;8888:18;;8881:62;-1:-1:-1;;;8974:2:9;8959:18;;8952:34;9018:3;9003:19;;8802:226::o;9033:408::-;9235:2;9217:21;;;9274:2;9254:18;;;9247:30;9313:34;9308:2;9293:18;;9286:62;-1:-1:-1;;;9379:2:9;9364:18;;9357:42;9431:3;9416:19;;9207:234::o;9446:177::-;9592:25;;;9580:2;9565:18;;9547:76::o;9628:983::-;;9938:3;9927:9;9923:19;9969:6;9958:9;9951:25;9995:2;10033:6;10028:2;10017:9;10013:18;10006:34;10076:3;10071:2;10060:9;10056:18;10049:31;10100:6;10135;10129:13;10166:6;10158;10151:22;10204:3;10193:9;10189:19;10182:26;;10243:2;10235:6;10231:15;10217:29;;10264:4;10277:195;10291:6;10288:1;10285:13;10277:195;;;10356:13;;-1:-1:-1;;;;;10352:39:9;10340:52;;10447:15;;;;10412:12;;;;10388:1;10306:9;10277:195;;;-1:-1:-1;;;;;;;10528:32:9;;;;10523:2;10508:18;;10501:60;-1:-1:-1;;;10592:3:9;10577:19;10570:35;10489:3;9899:712;-1:-1:-1;;;9899:712:9:o;10616:319::-;10818:25;;;10874:2;10859:18;;10852:34;;;;10917:2;10902:18;;10895:34;10806:2;10791:18;;10773:162::o;10940:184::-;11112:4;11100:17;;;;11082:36;;11070:2;11055:18;;11037:87::o;11129:128::-;;11200:1;11196:6;11193:1;11190:13;11187:2;;;11206:18;;:::i;:::-;-1:-1:-1;11242:9:9;;11177:80::o;11262:217::-;;11328:1;11318:2;;-1:-1:-1;;;11353:31:9;;11407:4;11404:1;11397:15;11435:4;11360:1;11425:15;11318:2;-1:-1:-1;11464:9:9;;11308:171::o;11484:168::-;;11590:1;11586;11582:6;11578:14;11575:1;11572:21;11567:1;11560:9;11553:17;11549:45;11546:2;;;11597:18;;:::i;:::-;-1:-1:-1;11637:9:9;;11536:116::o;11657:125::-;;11725:1;11722;11719:8;11716:2;;;11730:18;;:::i;:::-;-1:-1:-1;11767:9:9;;11706:76::o;11787:380::-;11872:1;11862:12;;11919:1;11909:12;;;11930:2;;11984:4;11976:6;11972:17;11962:27;;11930:2;12037;12029:6;12026:14;12006:18;12003:38;12000:2;;;12083:10;12078:3;12074:20;12071:1;12064:31;12118:4;12115:1;12108:15;12146:4;12143:1;12136:15;12000:2;;11842:325;;;:::o;12172:135::-;;-1:-1:-1;;12232:17:9;;12229:2;;;12252:18;;:::i;:::-;-1:-1:-1;12299:1:9;12288:13;;12219:88::o;12312:127::-;12373:10;12368:3;12364:20;12361:1;12354:31;12404:4;12401:1;12394:15;12428:4;12425:1;12418:15;12444:133;-1:-1:-1;;;;;12521:31:9;;12511:42;;12501:2;;12567:1;12564;12557:12"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "1961200",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"VERSION()": "360",
"_liquidityFee()": "1140",
"_marketingAddress()": "1114",
"_marketingFee()": "1118",
"_taxFee()": "1140",
"allowance(address,address)": "infinite",
"approve(address,uint256)": "22669",
"balanceOf(address)": "infinite",
"decimals()": "1092",
"decreaseAllowance(address,uint256)": "infinite",
"deliver(uint256)": "infinite",
"excludeFromFee(address)": "22225",
"excludeFromReward(address)": "infinite",
"includeInFee(address)": "22240",
"includeInReward(address)": "infinite",
"increaseAllowance(address,uint256)": "infinite",
"isExcludedFromFee(address)": "1366",
"isExcludedFromReward(address)": "1365",
"name()": "infinite",
"owner()": "1181",
"reflectionFromToken(uint256,bool)": "infinite",
"renounceOwnership()": "infinite",
"setLiquidityFeePercent(uint256)": "infinite",
"setMarketingFeePercent(uint256)": "infinite",
"setSwapAndLiquifyEnabled(bool)": "23306",
"setTaxFeePercent(uint256)": "infinite",
"swapAndLiquifyEnabled()": "1103",
"symbol()": "infinite",
"tokenFromReflection(uint256)": "infinite",
"totalFees()": "1141",
"totalSupply()": "1096",
"transfer(address,uint256)": "infinite",
"transferFrom(address,address,uint256)": "infinite",
"transferOwnership(address)": "infinite",
"uniswapV2Pair()": "1203",
"uniswapV2Router()": "1116"
},
"internal": {
"_approve(address,address,uint256)": "infinite",
"_getCurrentSupply()": "infinite",
"_getRValues(uint256,uint256,uint256,uint256,uint256)": "infinite",
"_getRate()": "infinite",
"_getTValues(uint256)": "infinite",
"_getValues(uint256)": "infinite",
"_reflectFee(uint256,uint256)": "infinite",
"_sendETHFee(uint256)": "infinite",
"_takeLiquidity(uint256)": "infinite",
"_takeMarketingFee(uint256)": "infinite",
"_tokenTransfer(address,address,uint256,bool)": "infinite",
"_transfer(address,address,uint256)": "infinite",
"_transferBothExcluded(address,address,uint256)": "infinite",
"_transferFromExcluded(address,address,uint256)": "infinite",
"_transferStandard(address,address,uint256)": "infinite",
"_transferToExcluded(address,address,uint256)": "infinite",
"addLiquidity(uint256,uint256)": "infinite",
"calculateLiquidityFee(uint256)": "infinite",
"calculateMarketingFee(uint256)": "infinite",
"calculateTaxFee(uint256)": "infinite",
"removeAllFee()": "79936",
"restoreAllFee()": "62427",
"swapAndLiquify(uint256)": "infinite",
"swapTokensForEth(uint256)": "infinite"
}
},
"methodIdentifiers": {
"VERSION()": "ffa1ad74",
"_liquidityFee()": "6bc87c3a",
"_marketingAddress()": "caac7934",
"_marketingFee()": "22976e0d",
"_taxFee()": "3b124fe7",
"allowance(address,address)": "dd62ed3e",
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"decimals()": "313ce567",
"decreaseAllowance(address,uint256)": "a457c2d7",
"deliver(uint256)": "3bd5d173",
"excludeFromFee(address)": "437823ec",
"excludeFromReward(address)": "52390c02",
"includeInFee(address)": "ea2f0b37",
"includeInReward(address)": "3685d419",
"increaseAllowance(address,uint256)": "39509351",
"isExcludedFromFee(address)": "5342acb4",
"isExcludedFromReward(address)": "88f82020",
"name()": "06fdde03",
"owner()": "8da5cb5b",
"reflectionFromToken(uint256,bool)": "4549b039",
"renounceOwnership()": "715018a6",
"setLiquidityFeePercent(uint256)": "8ee88c53",
"setMarketingFeePercent(uint256)": "457c194c",
"setSwapAndLiquifyEnabled(bool)": "c49b9a80",
"setTaxFeePercent(uint256)": "061c82d0",
"swapAndLiquifyEnabled()": "4a74bb02",
"symbol()": "95d89b41",
"tokenFromReflection(uint256)": "2d838119",
"totalFees()": "13114a9d",
"totalSupply()": "18160ddd",
"transfer(address,uint256)": "a9059cbb",
"transferFrom(address,address,uint256)": "23b872dd",
"transferOwnership(address)": "f2fde38b",
"uniswapV2Pair()": "49bd5a5e",
"uniswapV2Router()": "1694505e"
}
},
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "router_",
"type": "address"
},
{
"internalType": "address",
"name": "marketingAddress_",
"type": "address"
},
{
"internalType": "address",
"name": "devAddress_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "minTokensBeforeSwap",
"type": "uint256"
}
],
"name": "MinTokensBeforeSwapUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "tokensSwapped",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "ethReceived",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "tokensIntoLiqudity",
"type": "uint256"
}
],
"name": "SwapAndLiquify",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "SwapAndLiquifyEnabledUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "enum TokenType",
"name": "tokenType",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "version",
"type": "uint256"
}
],
"name": "TokenCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "VERSION",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_liquidityFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_marketingAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_marketingFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_taxFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "subtractedValue",
"type": "uint256"
}
],
"name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tAmount",
"type": "uint256"
}
],
"name": "deliver",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "excludeFromFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "excludeFromReward",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "includeInFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "includeInReward",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "addedValue",
"type": "uint256"
}
],
"name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "isExcludedFromFee",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "isExcludedFromReward",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tAmount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "deductTransferFee",
"type": "bool"
}
],
"name": "reflectionFromToken",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "liquidityFeeBps",
"type": "uint256"
}
],
"name": "setLiquidityFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "marketingFeeBps",
"type": "uint256"
}
],
"name": "setMarketingFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_enabled",
"type": "bool"
}
],
"name": "setSwapAndLiquifyEnabled",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "taxFeeBps",
"type": "uint256"
}
],
"name": "setTaxFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "swapAndLiquifyEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "rAmount",
"type": "uint256"
}
],
"name": "tokenFromReflection",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalFees",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "uniswapV2Pair",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "uniswapV2Router",
"outputs": [
{
"internalType": "contract IUniswapV2Router02",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
]
}
{
"compiler": {
"version": "0.8.1+commit.df193b15"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "router_",
"type": "address"
},
{
"internalType": "address",
"name": "marketingAddress_",
"type": "address"
},
{
"internalType": "address",
"name": "devAddress_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "minTokensBeforeSwap",
"type": "uint256"
}
],
"name": "MinTokensBeforeSwapUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "tokensSwapped",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "ethReceived",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "tokensIntoLiqudity",
"type": "uint256"
}
],
"name": "SwapAndLiquify",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "SwapAndLiquifyEnabledUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "enum TokenType",
"name": "tokenType",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "version",
"type": "uint256"
}
],
"name": "TokenCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "VERSION",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_liquidityFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_marketingAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_marketingFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_taxFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "subtractedValue",
"type": "uint256"
}
],
"name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tAmount",
"type": "uint256"
}
],
"name": "deliver",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "excludeFromFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "excludeFromReward",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "includeInFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "includeInReward",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "addedValue",
"type": "uint256"
}
],
"name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "isExcludedFromFee",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "isExcludedFromReward",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tAmount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "deductTransferFee",
"type": "bool"
}
],
"name": "reflectionFromToken",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "liquidityFeeBps",
"type": "uint256"
}
],
"name": "setLiquidityFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "marketingFeeBps",
"type": "uint256"
}
],
"name": "setMarketingFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_enabled",
"type": "bool"
}
],
"name": "setSwapAndLiquifyEnabled",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "taxFeeBps",
"type": "uint256"
}
],
"name": "setTaxFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "swapAndLiquifyEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "rAmount",
"type": "uint256"
}
],
"name": "tokenFromReflection",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalFees",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "uniswapV2Pair",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "uniswapV2Router",
"outputs": [
{
"internalType": "contract IUniswapV2Router02",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"allowance(address,address)": {
"details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."
},
"approve(address,uint256)": {
"details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."
},
"balanceOf(address)": {
"details": "Returns the amount of tokens owned by `account`."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
},
"totalSupply()": {
"details": "Returns the amount of tokens in existence."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/WaifInu.sol": "WaifInu"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
},
"sources": {
"@openzeppelin/contracts/access/Ownable.sol": {
"keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673",
"license": "MIT",
"urls": [
"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2",
"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y"
]
},
"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
"keccak256": "0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b",
"license": "MIT",
"urls": [
"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34",
"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"
]
},
"@openzeppelin/contracts/utils/Address.sol": {
"keccak256": "0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10",
"license": "MIT",
"urls": [
"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487",
"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"
]
},
"@openzeppelin/contracts/utils/Context.sol": {
"keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
"license": "MIT",
"urls": [
"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
]
},
"@openzeppelin/contracts/utils/math/SafeMath.sol": {
"keccak256": "0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e",
"license": "MIT",
"urls": [
"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65",
"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN"
]
},
"contracts/BaseToken.sol": {
"keccak256": "0x136c4efb9c753ce66ad44424e7f75a0c0cd3d06b5c43acc8bd77eb3eb9de53c4",
"license": "GPL-3.0",
"urls": [
"bzz-raw://46f03ce95c2fd040e35a5728df28412d6c872cfc27097d05f5df1670dae4fafe",
"dweb:/ipfs/QmWpwm6dvG2W7zhGK9Gjx5W6T6uKgx5ekHDWqftzoDmJUU"
]
},
"contracts/WaifInu.sol": {
"keccak256": "0x665fd6ccd11bd4b407941c8c446cdc8ddbf65f21dfd452984b3fdf9e6cd147fe",
"license": "GPL-3.0",
"urls": [
"bzz-raw://a6098801c633ee4ed68bef20544f91eb8aa0b2c8a5949e71763761b2e055a957",
"dweb:/ipfs/QmcDQaje7ESDEKsDhkQkgt7xL8eeadtCAtn7srV3hsSgLT"
]
},
"contracts/interfaces/IUniswapV2Factory.sol": {
"keccak256": "0xc04f9e666e9480a3dca6a12052c425cd8bbf13fc4b2d9c76ae099fdce2ab189d",
"license": "GPL-3.0",
"urls": [
"bzz-raw://dbabdbc7d794e6679c0d3478435abb035eb8b9a7753fa476a7040eae364bc573",
"dweb:/ipfs/QmbAVRAghvzXvXtujx7xJqLY4Jx7vS22BZpxo8UutukQM1"
]
},
"contracts/interfaces/IUniswapV2Router02.sol": {
"keccak256": "0x3048ff8f148c67e61647920f487f6f39e24267ea1853571056ea5397f8d956a1",
"license": "GPL-3.0",
"urls": [
"bzz-raw://c80e15ab96bdbb3191a2d114373708ec53ee2306c5b7cd380dcc90504c43b77e",
"dweb:/ipfs/QmV7nXo4qtCyr7zbx35gQBcf2crtcEQazPASx2n5CRVfwn"
]
}
},
"version": 1
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
enum TokenType {
standard,
antiBotStandard,
liquidityGenerator,
antiBotLiquidityGenerator,
baby,
antiBotBaby,
buybackBaby,
antiBotBuybackBaby
}
abstract contract BaseToken {
event TokenCreated(
address indexed owner,
address indexed token,
TokenType tokenType,
uint256 version
);
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "./interfaces/IUniswapV2Router02.sol";
import "./interfaces/IUniswapV2Factory.sol";
import "./BaseToken.sol";
contract WaifInu is IERC20, Ownable, BaseToken {
using SafeMath for uint256;
using Address for address;
uint256 public constant VERSION = 1;
mapping(address => uint256) private _rOwned;
mapping(address => uint256) private _tOwned;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private _isExcludedFromFee;
mapping(address => bool) private _isExcluded;
address[] private _excluded;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal;
uint256 private _rTotal;
uint256 private _tFeeTotal;
string private _name = "Waif Inu";
string private _symbol = "WFN";
uint8 private _decimals;
uint256 public _taxFee = 200;
uint256 private _previousTaxFee = _taxFee;
uint256 public _liquidityFee = 200;
uint256 private _previousLiquidityFee = _liquidityFee;
uint256 public _marketingFee = 400;
uint256 private _previousMarketingFee = _marketingFee;
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
address public _marketingAddress;
address private _devAddress;
bool inSwapAndLiquify;
bool public swapAndLiquifyEnabled;
uint256 private numTokensSellToAddToLiquidity;
event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
modifier lockTheSwap() {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor(
address router_,
address marketingAddress_,
address devAddress_
) {
require(
marketingAddress_ != address(0),
"Cant set marketing address to address 0"
);
_decimals = 18;
_tTotal = 100000000000000000000000000000000000;
_rTotal = (MAX - (MAX % _tTotal));
_previousTaxFee = _taxFee;
_previousLiquidityFee = _liquidityFee;
_marketingAddress = marketingAddress_;
_devAddress = devAddress_;
_previousMarketingFee = _marketingFee;
numTokensSellToAddToLiquidity = _tTotal.mul(5).div(10**4); // 0.05%
swapAndLiquifyEnabled = true;
_rOwned[owner()] = _rTotal;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_);
// Create a uniswap pair for this new token
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
// set the rest of the contract variables
uniswapV2Router = _uniswapV2Router;
// exclude owner and this contract from fee
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
emit Transfer(address(0), owner(), _tTotal);
emit TokenCreated(
owner(),
address(this),
TokenType.liquidityGenerator,
VERSION
);
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function transfer(address recipient, uint256 amount)
public
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender)
public
view
override
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(
sender,
_msgSender(),
_allowances[sender][_msgSender()].sub(
amount,
"ERC20: transfer amount exceeds allowance"
)
);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].add(addedValue)
);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].sub(
subtractedValue,
"ERC20: decreased allowance below zero"
)
);
return true;
}
function isExcludedFromReward(address account) public view returns (bool) {
return _isExcluded[account];
}
function totalFees() public view returns (uint256) {
return _tFeeTotal;
}
function deliver(uint256 tAmount) public {
address sender = _msgSender();
require(
!_isExcluded[sender],
"Excluded addresses cannot call this function"
);
(uint256 rAmount, , , , , , ) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rTotal = _rTotal.sub(rAmount);
_tFeeTotal = _tFeeTotal.add(tAmount);
}
function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
public
view
returns (uint256)
{
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferFee) {
(uint256 rAmount, , , , , , ) = _getValues(tAmount);
return rAmount;
} else {
(, uint256 rTransferAmount, , , , , ) = _getValues(tAmount);
return rTransferAmount;
}
}
function tokenFromReflection(uint256 rAmount)
public
view
returns (uint256)
{
require(
rAmount <= _rTotal,
"Amount must be less than total reflections"
);
uint256 currentRate = _getRate();
return rAmount.div(currentRate);
}
function excludeFromReward(address account) public onlyOwner {
// require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
require(!_isExcluded[account], "Account is already excluded");
if (_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function includeInReward(address account) external onlyOwner {
require(_isExcluded[account], "Account is already excluded");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
_excluded[i] = _excluded[_excluded.length - 1];
_tOwned[account] = 0;
_isExcluded[account] = false;
_excluded.pop();
break;
}
}
}
function _transferBothExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tMarketing
) = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_takeMarketingFee(tMarketing);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function excludeFromFee(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function setTaxFeePercent(uint256 taxFeeBps) external onlyOwner {
_taxFee = taxFeeBps;
require(
_taxFee + _liquidityFee + _marketingFee <= 10**4 / 4,
"Total fee is over 25%"
);
}
function setLiquidityFeePercent(uint256 liquidityFeeBps)
external
onlyOwner
{
_liquidityFee = liquidityFeeBps;
require(
_taxFee + _liquidityFee + _marketingFee <= 10**4 / 4,
"Total fee is over 25%"
);
}
function setMarketingFeePercent(uint256 marketingFeeBps)
external
onlyOwner
{
_marketingFee = marketingFeeBps;
require(
_taxFee + _liquidityFee + _marketingFee <= 10**4 / 4,
"Total fee is over 25%"
);
}
function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
swapAndLiquifyEnabled = _enabled;
emit SwapAndLiquifyEnabledUpdated(_enabled);
}
//to recieve ETH from uniswapV2Router when swaping
receive() external payable {}
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal.sub(rFee);
_tFeeTotal = _tFeeTotal.add(tFee);
}
function _getValues(uint256 tAmount)
private
view
returns (
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256
)
{
(
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tMarketing
) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
tAmount,
tFee,
tLiquidity,
tMarketing,
_getRate()
);
return (
rAmount,
rTransferAmount,
rFee,
tTransferAmount,
tFee,
tLiquidity,
tMarketing
);
}
function _getTValues(uint256 tAmount)
private
view
returns (
uint256,
uint256,
uint256,
uint256
)
{
uint256 tFee = calculateTaxFee(tAmount);
uint256 tLiquidity = calculateLiquidityFee(tAmount);
uint256 tMarketingFee = calculateMarketingFee(tAmount);
uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(
tMarketingFee
);
return (tTransferAmount, tFee, tLiquidity, tMarketingFee);
}
function _getRValues(
uint256 tAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tMarketing,
uint256 currentRate
)
private
pure
returns (
uint256,
uint256,
uint256
)
{
uint256 rAmount = tAmount.mul(currentRate);
uint256 rFee = tFee.mul(currentRate);
uint256 rLiquidity = tLiquidity.mul(currentRate);
uint256 rMarketing = tMarketing.mul(currentRate);
uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(
rMarketing
);
return (rAmount, rTransferAmount, rFee);
}
function _getRate() private view returns (uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply.div(tSupply);
}
function _getCurrentSupply() private view returns (uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (
_rOwned[_excluded[i]] > rSupply ||
_tOwned[_excluded[i]] > tSupply
) return (_rTotal, _tTotal);
rSupply = rSupply.sub(_rOwned[_excluded[i]]);
tSupply = tSupply.sub(_tOwned[_excluded[i]]);
}
if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
function _takeLiquidity(uint256 tLiquidity) private {
uint256 currentRate = _getRate();
uint256 rLiquidity = tLiquidity.mul(currentRate);
_rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
if (_isExcluded[address(this)])
_tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
}
function _takeMarketingFee(uint256 tMarketing) private {
if (tMarketing > 0) {
uint256 currentRate = _getRate();
uint256 rMarketing = tMarketing.mul(currentRate);
_rOwned[_marketingAddress] = _rOwned[_marketingAddress].add(
rMarketing
);
if (_isExcluded[_marketingAddress])
_tOwned[_marketingAddress] = _tOwned[_marketingAddress].add(
tMarketing
);
emit Transfer(_msgSender(), _marketingAddress, tMarketing);
}
}
function calculateTaxFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(_taxFee).div(10**4);
}
function calculateLiquidityFee(uint256 _amount)
private
view
returns (uint256)
{
return _amount.mul(_liquidityFee).div(10**4);
}
function calculateMarketingFee(uint256 _amount)
private
view
returns (uint256)
{
if (_marketingAddress == address(0)) return 0;
return _amount.mul(_marketingFee).div(10**4);
}
function removeAllFee() private {
if (_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return;
_previousTaxFee = _taxFee;
_previousLiquidityFee = _liquidityFee;
_previousMarketingFee = _marketingFee;
_taxFee = 0;
_liquidityFee = 0;
_marketingFee = 0;
}
function restoreAllFee() private {
_taxFee = _previousTaxFee;
_liquidityFee = _previousLiquidityFee;
_marketingFee = _previousMarketingFee;
}
function isExcludedFromFee(address account) public view returns (bool) {
return _isExcludedFromFee[account];
}
function _approve(
address owner,
address spender,
uint256 amount
) private {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer(
address from,
address to,
uint256 amount
) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
// is the token balance of this contract address over the min number of
// tokens that we need to initiate a swap + liquidity lock?
// also, don't get caught in a circular liquidity event.
// also, don't swap & liquify if sender is uniswap pair.
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinTokenBalance = contractTokenBalance >=
numTokensSellToAddToLiquidity;
if (
overMinTokenBalance &&
!inSwapAndLiquify &&
from != uniswapV2Pair &&
swapAndLiquifyEnabled
) {
contractTokenBalance = numTokensSellToAddToLiquidity;
//add liquidity
swapAndLiquify(contractTokenBalance);
}
_sendETHFee(amount);
//indicates if fee should be deducted from transfer
bool takeFee = true;
//if any account belongs to _isExcludedFromFee account then remove the fee
if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
takeFee = false;
}
//transfer amount, it will take tax, burn, liquidity fee
_tokenTransfer(from, to, amount, takeFee);
}
function _sendETHFee(uint256 _amount) private {
uint256 _ethFee = _amount.mul(400).div(10**4);
uint256 contractETHBalance = address(this).balance;
if (contractETHBalance > _ethFee) {
payable(_devAddress).transfer(_ethFee);
}
}
function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
// split the contract balance into halves
uint256 half = contractTokenBalance.div(2);
uint256 otherHalf = contractTokenBalance.sub(half);
// capture the contract's current ETH balance.
// this is so that we can capture exactly the amount of ETH that the
// swap creates, and not make the liquidity event include any ETH that
// has been manually sent to the contract
uint256 initialBalance = address(this).balance;
// swap tokens for ETH
swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
// how much ETH did we just swap into?
uint256 newBalance = address(this).balance.sub(initialBalance);
// add liquidity to uniswap
addLiquidity(otherHalf, newBalance);
emit SwapAndLiquify(half, newBalance, otherHalf);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
owner(),
block.timestamp
);
}
//this method is responsible for taking all fee, if takeFee is true
function _tokenTransfer(
address sender,
address recipient,
uint256 amount,
bool takeFee
) private {
if (!takeFee) removeAllFee();
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_transferFromExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_transferToExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
_transferStandard(sender, recipient, amount);
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_transferBothExcluded(sender, recipient, amount);
} else {
_transferStandard(sender, recipient, amount);
}
if (!takeFee) restoreAllFee();
}
function _transferStandard(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tMarketing
) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_takeMarketingFee(tMarketing);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferToExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tMarketing
) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_takeMarketingFee(tMarketing);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferFromExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tMarketing
) = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_takeMarketingFee(tMarketing);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
}
This file has been truncated, but you can view the full file.
{
"id": "f72bfab3135424cc726b8050605937f0",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.1",
"solcLongVersion": "0.8.1+commit.df193b15",
"input": {
"language": "Solidity",
"sources": {
"contracts/WaifInu.sol": {
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/Address.sol\";\nimport \"./interfaces/IUniswapV2Router02.sol\";\nimport \"./interfaces/IUniswapV2Factory.sol\";\nimport \"./BaseToken.sol\";\n\ncontract WaifInu is IERC20, Ownable, BaseToken {\n using SafeMath for uint256;\n using Address for address;\n\n uint256 public constant VERSION = 1;\n\n mapping(address => uint256) private _rOwned;\n mapping(address => uint256) private _tOwned;\n mapping(address => mapping(address => uint256)) private _allowances;\n\n mapping(address => bool) private _isExcludedFromFee;\n mapping(address => bool) private _isExcluded;\n address[] private _excluded;\n\n uint256 private constant MAX = ~uint256(0);\n uint256 private _tTotal;\n uint256 private _rTotal;\n uint256 private _tFeeTotal;\n\n string private _name = \"Waif Inu\";\n string private _symbol = \"WFN\";\n uint8 private _decimals;\n\n uint256 public _taxFee = 200;\n uint256 private _previousTaxFee = _taxFee;\n\n uint256 public _liquidityFee = 200;\n uint256 private _previousLiquidityFee = _liquidityFee;\n\n uint256 public _marketingFee = 400;\n uint256 private _previousMarketingFee = _marketingFee;\n\n IUniswapV2Router02 public uniswapV2Router;\n address public uniswapV2Pair;\n address public _marketingAddress;\n address private _devAddress;\n\n bool inSwapAndLiquify;\n bool public swapAndLiquifyEnabled;\n\n uint256 private numTokensSellToAddToLiquidity;\n\n event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);\n event SwapAndLiquifyEnabledUpdated(bool enabled);\n event SwapAndLiquify(\n uint256 tokensSwapped,\n uint256 ethReceived,\n uint256 tokensIntoLiqudity\n );\n\n modifier lockTheSwap() {\n inSwapAndLiquify = true;\n _;\n inSwapAndLiquify = false;\n }\n\n constructor(\n address router_,\n address marketingAddress_,\n address devAddress_\n ) {\n require(\n marketingAddress_ != address(0),\n \"Cant set marketing address to address 0\"\n );\n\n _decimals = 18;\n\n _tTotal = 100000000000000000000000000000000000;\n _rTotal = (MAX - (MAX % _tTotal));\n\n _previousTaxFee = _taxFee;\n\n _previousLiquidityFee = _liquidityFee;\n\n _marketingAddress = marketingAddress_;\n _devAddress = devAddress_;\n _previousMarketingFee = _marketingFee;\n\n numTokensSellToAddToLiquidity = _tTotal.mul(5).div(10**4); // 0.05%\n\n swapAndLiquifyEnabled = true;\n\n _rOwned[owner()] = _rTotal;\n\n IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_);\n // Create a uniswap pair for this new token\n uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())\n .createPair(address(this), _uniswapV2Router.WETH());\n\n // set the rest of the contract variables\n uniswapV2Router = _uniswapV2Router;\n\n // exclude owner and this contract from fee\n _isExcludedFromFee[owner()] = true;\n _isExcludedFromFee[address(this)] = true;\n\n emit Transfer(address(0), owner(), _tTotal);\n\n emit TokenCreated(\n owner(),\n address(this),\n TokenType.liquidityGenerator,\n VERSION\n );\n }\n\n function name() public view returns (string memory) {\n return _name;\n }\n\n function symbol() public view returns (string memory) {\n return _symbol;\n }\n\n function decimals() public view returns (uint8) {\n return _decimals;\n }\n\n function totalSupply() public view override returns (uint256) {\n return _tTotal;\n }\n\n function balanceOf(address account) public view override returns (uint256) {\n if (_isExcluded[account]) return _tOwned[account];\n return tokenFromReflection(_rOwned[account]);\n }\n\n function transfer(address recipient, uint256 amount)\n public\n override\n returns (bool)\n {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n function allowance(address owner, address spender)\n public\n view\n override\n returns (uint256)\n {\n return _allowances[owner][spender];\n }\n\n function approve(address spender, uint256 amount)\n public\n override\n returns (bool)\n {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(\n sender,\n _msgSender(),\n _allowances[sender][_msgSender()].sub(\n amount,\n \"ERC20: transfer amount exceeds allowance\"\n )\n );\n return true;\n }\n\n function increaseAllowance(address spender, uint256 addedValue)\n public\n virtual\n returns (bool)\n {\n _approve(\n _msgSender(),\n spender,\n _allowances[_msgSender()][spender].add(addedValue)\n );\n return true;\n }\n\n function decreaseAllowance(address spender, uint256 subtractedValue)\n public\n virtual\n returns (bool)\n {\n _approve(\n _msgSender(),\n spender,\n _allowances[_msgSender()][spender].sub(\n subtractedValue,\n \"ERC20: decreased allowance below zero\"\n )\n );\n return true;\n }\n\n function isExcludedFromReward(address account) public view returns (bool) {\n return _isExcluded[account];\n }\n\n function totalFees() public view returns (uint256) {\n return _tFeeTotal;\n }\n\n function deliver(uint256 tAmount) public {\n address sender = _msgSender();\n require(\n !_isExcluded[sender],\n \"Excluded addresses cannot call this function\"\n );\n (uint256 rAmount, , , , , , ) = _getValues(tAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rTotal = _rTotal.sub(rAmount);\n _tFeeTotal = _tFeeTotal.add(tAmount);\n }\n\n function reflectionFromToken(uint256 tAmount, bool deductTransferFee)\n public\n view\n returns (uint256)\n {\n require(tAmount <= _tTotal, \"Amount must be less than supply\");\n if (!deductTransferFee) {\n (uint256 rAmount, , , , , , ) = _getValues(tAmount);\n return rAmount;\n } else {\n (, uint256 rTransferAmount, , , , , ) = _getValues(tAmount);\n return rTransferAmount;\n }\n }\n\n function tokenFromReflection(uint256 rAmount)\n public\n view\n returns (uint256)\n {\n require(\n rAmount <= _rTotal,\n \"Amount must be less than total reflections\"\n );\n uint256 currentRate = _getRate();\n return rAmount.div(currentRate);\n }\n\n function excludeFromReward(address account) public onlyOwner {\n // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');\n require(!_isExcluded[account], \"Account is already excluded\");\n if (_rOwned[account] > 0) {\n _tOwned[account] = tokenFromReflection(_rOwned[account]);\n }\n _isExcluded[account] = true;\n _excluded.push(account);\n }\n\n function includeInReward(address account) external onlyOwner {\n require(_isExcluded[account], \"Account is already excluded\");\n for (uint256 i = 0; i < _excluded.length; i++) {\n if (_excluded[i] == account) {\n _excluded[i] = _excluded[_excluded.length - 1];\n _tOwned[account] = 0;\n _isExcluded[account] = false;\n _excluded.pop();\n break;\n }\n }\n }\n\n function _transferBothExcluded(\n address sender,\n address recipient,\n uint256 tAmount\n ) private {\n (\n uint256 rAmount,\n uint256 rTransferAmount,\n uint256 rFee,\n uint256 tTransferAmount,\n uint256 tFee,\n uint256 tLiquidity,\n uint256 tMarketing\n ) = _getValues(tAmount);\n _tOwned[sender] = _tOwned[sender].sub(tAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n _takeLiquidity(tLiquidity);\n _takeMarketingFee(tMarketing);\n _reflectFee(rFee, tFee);\n emit Transfer(sender, recipient, tTransferAmount);\n }\n\n function excludeFromFee(address account) public onlyOwner {\n _isExcludedFromFee[account] = true;\n }\n\n function includeInFee(address account) public onlyOwner {\n _isExcludedFromFee[account] = false;\n }\n\n function setTaxFeePercent(uint256 taxFeeBps) external onlyOwner {\n _taxFee = taxFeeBps;\n require(\n _taxFee + _liquidityFee + _marketingFee <= 10**4 / 4,\n \"Total fee is over 25%\"\n );\n }\n\n function setLiquidityFeePercent(uint256 liquidityFeeBps)\n external\n onlyOwner\n {\n _liquidityFee = liquidityFeeBps;\n require(\n _taxFee + _liquidityFee + _marketingFee <= 10**4 / 4,\n \"Total fee is over 25%\"\n );\n }\n\n function setMarketingFeePercent(uint256 marketingFeeBps)\n external\n onlyOwner\n {\n _marketingFee = marketingFeeBps;\n require(\n _taxFee + _liquidityFee + _marketingFee <= 10**4 / 4,\n \"Total fee is over 25%\"\n );\n }\n\n function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {\n swapAndLiquifyEnabled = _enabled;\n emit SwapAndLiquifyEnabledUpdated(_enabled);\n }\n\n //to recieve ETH from uniswapV2Router when swaping\n receive() external payable {}\n\n function _reflectFee(uint256 rFee, uint256 tFee) private {\n _rTotal = _rTotal.sub(rFee);\n _tFeeTotal = _tFeeTotal.add(tFee);\n }\n\n function _getValues(uint256 tAmount)\n private\n view\n returns (\n uint256,\n uint256,\n uint256,\n uint256,\n uint256,\n uint256,\n uint256\n )\n {\n (\n uint256 tTransferAmount,\n uint256 tFee,\n uint256 tLiquidity,\n uint256 tMarketing\n ) = _getTValues(tAmount);\n (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(\n tAmount,\n tFee,\n tLiquidity,\n tMarketing,\n _getRate()\n );\n return (\n rAmount,\n rTransferAmount,\n rFee,\n tTransferAmount,\n tFee,\n tLiquidity,\n tMarketing\n );\n }\n\n function _getTValues(uint256 tAmount)\n private\n view\n returns (\n uint256,\n uint256,\n uint256,\n uint256\n )\n {\n uint256 tFee = calculateTaxFee(tAmount);\n uint256 tLiquidity = calculateLiquidityFee(tAmount);\n uint256 tMarketingFee = calculateMarketingFee(tAmount);\n uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(\n tMarketingFee\n );\n return (tTransferAmount, tFee, tLiquidity, tMarketingFee);\n }\n\n function _getRValues(\n uint256 tAmount,\n uint256 tFee,\n uint256 tLiquidity,\n uint256 tMarketing,\n uint256 currentRate\n )\n private\n pure\n returns (\n uint256,\n uint256,\n uint256\n )\n {\n uint256 rAmount = tAmount.mul(currentRate);\n uint256 rFee = tFee.mul(currentRate);\n uint256 rLiquidity = tLiquidity.mul(currentRate);\n uint256 rMarketing = tMarketing.mul(currentRate);\n uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(\n rMarketing\n );\n return (rAmount, rTransferAmount, rFee);\n }\n\n function _getRate() private view returns (uint256) {\n (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();\n return rSupply.div(tSupply);\n }\n\n function _getCurrentSupply() private view returns (uint256, uint256) {\n uint256 rSupply = _rTotal;\n uint256 tSupply = _tTotal;\n for (uint256 i = 0; i < _excluded.length; i++) {\n if (\n _rOwned[_excluded[i]] > rSupply ||\n _tOwned[_excluded[i]] > tSupply\n ) return (_rTotal, _tTotal);\n rSupply = rSupply.sub(_rOwned[_excluded[i]]);\n tSupply = tSupply.sub(_tOwned[_excluded[i]]);\n }\n if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);\n return (rSupply, tSupply);\n }\n\n function _takeLiquidity(uint256 tLiquidity) private {\n uint256 currentRate = _getRate();\n uint256 rLiquidity = tLiquidity.mul(currentRate);\n _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);\n if (_isExcluded[address(this)])\n _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);\n }\n\n function _takeMarketingFee(uint256 tMarketing) private {\n if (tMarketing > 0) {\n uint256 currentRate = _getRate();\n uint256 rMarketing = tMarketing.mul(currentRate);\n _rOwned[_marketingAddress] = _rOwned[_marketingAddress].add(\n rMarketing\n );\n if (_isExcluded[_marketingAddress])\n _tOwned[_marketingAddress] = _tOwned[_marketingAddress].add(\n tMarketing\n );\n emit Transfer(_msgSender(), _marketingAddress, tMarketing);\n }\n }\n\n function calculateTaxFee(uint256 _amount) private view returns (uint256) {\n return _amount.mul(_taxFee).div(10**4);\n }\n\n function calculateLiquidityFee(uint256 _amount)\n private\n view\n returns (uint256)\n {\n return _amount.mul(_liquidityFee).div(10**4);\n }\n\n function calculateMarketingFee(uint256 _amount)\n private\n view\n returns (uint256)\n {\n if (_marketingAddress == address(0)) return 0;\n return _amount.mul(_marketingFee).div(10**4);\n }\n\n function removeAllFee() private {\n if (_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return;\n\n _previousTaxFee = _taxFee;\n _previousLiquidityFee = _liquidityFee;\n _previousMarketingFee = _marketingFee;\n\n _taxFee = 0;\n _liquidityFee = 0;\n _marketingFee = 0;\n }\n\n function restoreAllFee() private {\n _taxFee = _previousTaxFee;\n _liquidityFee = _previousLiquidityFee;\n _marketingFee = _previousMarketingFee;\n }\n\n function isExcludedFromFee(address account) public view returns (bool) {\n return _isExcludedFromFee[account];\n }\n\n function _approve(\n address owner,\n address spender,\n uint256 amount\n ) private {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n function _transfer(\n address from,\n address to,\n uint256 amount\n ) private {\n require(from != address(0), \"ERC20: transfer from the zero address\");\n require(to != address(0), \"ERC20: transfer to the zero address\");\n require(amount > 0, \"Transfer amount must be greater than zero\");\n\n // is the token balance of this contract address over the min number of\n // tokens that we need to initiate a swap + liquidity lock?\n // also, don't get caught in a circular liquidity event.\n // also, don't swap & liquify if sender is uniswap pair.\n uint256 contractTokenBalance = balanceOf(address(this));\n\n bool overMinTokenBalance = contractTokenBalance >=\n numTokensSellToAddToLiquidity;\n if (\n overMinTokenBalance &&\n !inSwapAndLiquify &&\n from != uniswapV2Pair &&\n swapAndLiquifyEnabled\n ) {\n contractTokenBalance = numTokensSellToAddToLiquidity;\n //add liquidity\n swapAndLiquify(contractTokenBalance);\n }\n _sendETHFee(amount);\n\n //indicates if fee should be deducted from transfer\n bool takeFee = true;\n\n //if any account belongs to _isExcludedFromFee account then remove the fee\n if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {\n takeFee = false;\n }\n\n //transfer amount, it will take tax, burn, liquidity fee\n _tokenTransfer(from, to, amount, takeFee);\n }\n\n function _sendETHFee(uint256 _amount) private {\n uint256 _ethFee = _amount.mul(400).div(10**4);\n uint256 contractETHBalance = address(this).balance;\n\n if (contractETHBalance > _ethFee) {\n payable(_devAddress).transfer(_ethFee);\n }\n }\n\n function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {\n // split the contract balance into halves\n uint256 half = contractTokenBalance.div(2);\n uint256 otherHalf = contractTokenBalance.sub(half);\n\n // capture the contract's current ETH balance.\n // this is so that we can capture exactly the amount of ETH that the\n // swap creates, and not make the liquidity event include any ETH that\n // has been manually sent to the contract\n uint256 initialBalance = address(this).balance;\n\n // swap tokens for ETH\n swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered\n\n // how much ETH did we just swap into?\n uint256 newBalance = address(this).balance.sub(initialBalance);\n\n // add liquidity to uniswap\n addLiquidity(otherHalf, newBalance);\n\n emit SwapAndLiquify(half, newBalance, otherHalf);\n }\n\n function swapTokensForEth(uint256 tokenAmount) private {\n // generate the uniswap pair path of token -> weth\n address[] memory path = new address[](2);\n path[0] = address(this);\n path[1] = uniswapV2Router.WETH();\n\n _approve(address(this), address(uniswapV2Router), tokenAmount);\n\n // make the swap\n uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(\n tokenAmount,\n 0, // accept any amount of ETH\n path,\n address(this),\n block.timestamp\n );\n }\n\n function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {\n // approve token transfer to cover all possible scenarios\n _approve(address(this), address(uniswapV2Router), tokenAmount);\n\n // add the liquidity\n uniswapV2Router.addLiquidityETH{value: ethAmount}(\n address(this),\n tokenAmount,\n 0, // slippage is unavoidable\n 0, // slippage is unavoidable\n owner(),\n block.timestamp\n );\n }\n\n //this method is responsible for taking all fee, if takeFee is true\n function _tokenTransfer(\n address sender,\n address recipient,\n uint256 amount,\n bool takeFee\n ) private {\n if (!takeFee) removeAllFee();\n\n if (_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferFromExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && _isExcluded[recipient]) {\n _transferToExcluded(sender, recipient, amount);\n } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {\n _transferStandard(sender, recipient, amount);\n } else if (_isExcluded[sender] && _isExcluded[recipient]) {\n _transferBothExcluded(sender, recipient, amount);\n } else {\n _transferStandard(sender, recipient, amount);\n }\n\n if (!takeFee) restoreAllFee();\n }\n\n function _transferStandard(\n address sender,\n address recipient,\n uint256 tAmount\n ) private {\n (\n uint256 rAmount,\n uint256 rTransferAmount,\n uint256 rFee,\n uint256 tTransferAmount,\n uint256 tFee,\n uint256 tLiquidity,\n uint256 tMarketing\n ) = _getValues(tAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n _takeLiquidity(tLiquidity);\n _takeMarketingFee(tMarketing);\n _reflectFee(rFee, tFee);\n emit Transfer(sender, recipient, tTransferAmount);\n }\n\n function _transferToExcluded(\n address sender,\n address recipient,\n uint256 tAmount\n ) private {\n (\n uint256 rAmount,\n uint256 rTransferAmount,\n uint256 rFee,\n uint256 tTransferAmount,\n uint256 tFee,\n uint256 tLiquidity,\n uint256 tMarketing\n ) = _getValues(tAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n _takeLiquidity(tLiquidity);\n _takeMarketingFee(tMarketing);\n _reflectFee(rFee, tFee);\n emit Transfer(sender, recipient, tTransferAmount);\n }\n\n function _transferFromExcluded(\n address sender,\n address recipient,\n uint256 tAmount\n ) private {\n (\n uint256 rAmount,\n uint256 rTransferAmount,\n uint256 rFee,\n uint256 tTransferAmount,\n uint256 tFee,\n uint256 tLiquidity,\n uint256 tMarketing\n ) = _getValues(tAmount);\n _tOwned[sender] = _tOwned[sender].sub(tAmount);\n _rOwned[sender] = _rOwned[sender].sub(rAmount);\n _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);\n _takeLiquidity(tLiquidity);\n _takeMarketingFee(tMarketing);\n _reflectFee(rFee, tFee);\n emit Transfer(sender, recipient, tTransferAmount);\n }\n}"
},
"contracts/BaseToken.sol": {
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.0;\n\nenum TokenType {\n standard,\n antiBotStandard,\n liquidityGenerator,\n antiBotLiquidityGenerator,\n baby,\n antiBotBaby,\n buybackBaby,\n antiBotBuybackBaby\n}\n\nabstract contract BaseToken {\n event TokenCreated(\n address indexed owner,\n address indexed token,\n TokenType tokenType,\n uint256 version\n );\n}"
},
"contracts/interfaces/IUniswapV2Factory.sol": {
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.0;\n\ninterface IUniswapV2Factory {\n event PairCreated(\n address indexed token0,\n address indexed token1,\n address pair,\n uint256\n );\n\n function feeTo() external view returns (address);\n\n function feeToSetter() external view returns (address);\n\n function getPair(address tokenA, address tokenB)\n external\n view\n returns (address pair);\n\n function allPairs(uint256) external view returns (address pair);\n\n function allPairsLength() external view returns (uint256);\n\n function createPair(address tokenA, address tokenB)\n external\n returns (address pair);\n\n function setFeeTo(address) external;\n\n function setFeeToSetter(address) external;\n}"
},
"contracts/interfaces/IUniswapV2Router02.sol": {
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.0;\n\ninterface IUniswapV2Router01 {\n function factory() external pure returns (address);\n\n function WETH() external pure returns (address);\n\n function addLiquidity(\n address tokenA,\n address tokenB,\n uint256 amountADesired,\n uint256 amountBDesired,\n uint256 amountAMin,\n uint256 amountBMin,\n address to,\n uint256 deadline\n )\n external\n returns (\n uint256 amountA,\n uint256 amountB,\n uint256 liquidity\n );\n\n function addLiquidityETH(\n address token,\n uint256 amountTokenDesired,\n uint256 amountTokenMin,\n uint256 amountETHMin,\n address to,\n uint256 deadline\n )\n external\n payable\n returns (\n uint256 amountToken,\n uint256 amountETH,\n uint256 liquidity\n );\n\n function removeLiquidity(\n address tokenA,\n address tokenB,\n uint256 liquidity,\n uint256 amountAMin,\n uint256 amountBMin,\n address to,\n uint256 deadline\n ) external returns (uint256 amountA, uint256 amountB);\n\n function removeLiquidityETH(\n address token,\n uint256 liquidity,\n uint256 amountTokenMin,\n uint256 amountETHMin,\n address to,\n uint256 deadline\n ) external returns (uint256 amountToken, uint256 amountETH);\n\n function removeLiquidityWithPermit(\n address tokenA,\n address tokenB,\n uint256 liquidity,\n uint256 amountAMin,\n uint256 amountBMin,\n address to,\n uint256 deadline,\n bool approveMax,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external returns (uint256 amountA, uint256 amountB);\n\n function removeLiquidityETHWithPermit(\n address token,\n uint256 liquidity,\n uint256 amountTokenMin,\n uint256 amountETHMin,\n address to,\n uint256 deadline,\n bool approveMax,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external returns (uint256 amountToken, uint256 amountETH);\n\n function swapExactTokensForTokens(\n uint256 amountIn,\n uint256 amountOutMin,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external returns (uint256[] memory amounts);\n\n function swapTokensForExactTokens(\n uint256 amountOut,\n uint256 amountInMax,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external returns (uint256[] memory amounts);\n\n function swapExactETHForTokens(\n uint256 amountOutMin,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external payable returns (uint256[] memory amounts);\n\n function swapTokensForExactETH(\n uint256 amountOut,\n uint256 amountInMax,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external returns (uint256[] memory amounts);\n\n function swapExactTokensForETH(\n uint256 amountIn,\n uint256 amountOutMin,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external returns (uint256[] memory amounts);\n\n function swapETHForExactTokens(\n uint256 amountOut,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external payable returns (uint256[] memory amounts);\n\n function quote(\n uint256 amountA,\n uint256 reserveA,\n uint256 reserveB\n ) external pure returns (uint256 amountB);\n\n function getAmountOut(\n uint256 amountIn,\n uint256 reserveIn,\n uint256 reserveOut\n ) external pure returns (uint256 amountOut);\n\n function getAmountIn(\n uint256 amountOut,\n uint256 reserveIn,\n uint256 reserveOut\n ) external pure returns (uint256 amountIn);\n\n function getAmountsOut(uint256 amountIn, address[] calldata path)\n external\n view\n returns (uint256[] memory amounts);\n\n function getAmountsIn(uint256 amountOut, address[] calldata path)\n external\n view\n returns (uint256[] memory amounts);\n}\n\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\n function removeLiquidityETHSupportingFeeOnTransferTokens(\n address token,\n uint256 liquidity,\n uint256 amountTokenMin,\n uint256 amountETHMin,\n address to,\n uint256 deadline\n ) external returns (uint256 amountETH);\n\n function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\n address token,\n uint256 liquidity,\n uint256 amountTokenMin,\n uint256 amountETHMin,\n address to,\n uint256 deadline,\n bool approveMax,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external returns (uint256 amountETH);\n\n function swapExactTokensForTokensSupportingFeeOnTransferTokens(\n uint256 amountIn,\n uint256 amountOutMin,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external;\n\n function swapExactETHForTokensSupportingFeeOnTransferTokens(\n uint256 amountOutMin,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external payable;\n\n function swapExactTokensForETHSupportingFeeOnTransferTokens(\n uint256 amountIn,\n uint256 amountOutMin,\n address[] calldata path,\n address to,\n uint256 deadline\n ) external;\n}"
},
"@openzeppelin/contracts/utils/Address.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n"
},
"@openzeppelin/contracts/utils/math/SafeMath.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)\n\npragma solidity ^0.8.0;\n\n// CAUTION\n// This version of SafeMath should only be used with Solidity 0.8 or later,\n// because it relies on the compiler's built in overflow checks.\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations.\n *\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\n * now has built in overflow checking.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n return a + b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n return a * b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator.\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b <= a, errorMessage);\n return a - b;\n }\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a / b;\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a % b;\n }\n }\n}\n"
},
"@openzeppelin/contracts/access/Ownable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"
},
"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `from` to `to` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address from,\n address to,\n uint256 amount\n ) external returns (bool);\n}\n"
},
"@openzeppelin/contracts/utils/Context.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"@openzeppelin/contracts/access/Ownable.sol": {
"Ownable": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.",
"kind": "dev",
"methods": {
"constructor": {
"details": "Initializes the contract setting the deployer as the initial owner."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"owner()": "8da5cb5b",
"renounceOwnership()": "715018a6",
"transferOwnership(address)": "f2fde38b"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.1+commit.df193b15\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}",
"storageLayout": {
"storage": [
{
"astId": 7,
"contract": "@openzeppelin/contracts/access/Ownable.sol:Ownable",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
}
}
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
"IERC20": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Interface of the ERC20 standard as defined in the EIP.",
"events": {
"Approval(address,address,uint256)": {
"details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."
},
"Transfer(address,address,uint256)": {
"details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."
}
},
"kind": "dev",
"methods": {
"allowance(address,address)": {
"details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."
},
"approve(address,uint256)": {
"details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."
},
"balanceOf(address)": {
"details": "Returns the amount of tokens owned by `account`."
},
"totalSupply()": {
"details": "Returns the amount of tokens in existence."
},
"transfer(address,uint256)": {
"details": "Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
},
"transferFrom(address,address,uint256)": {
"details": "Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"allowance(address,address)": "dd62ed3e",
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"totalSupply()": "18160ddd",
"transfer(address,uint256)": "a9059cbb",
"transferFrom(address,address,uint256)": "23b872dd"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.1+commit.df193b15\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/Address.sol": {
"Address": {
"abi": [],
"devdoc": {
"details": "Collection of functions related to the address type",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"@openzeppelin/contracts/utils/Address.sol\":194:8305 library Address {... */\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 mstore(0x00, shl(0xe0, 0x4e487b71))\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@openzeppelin/contracts/utils/Address.sol\":194:8305 library Address {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212201b42206843ca5a18939923818e8aa3fafef291f87a0417368d57e7ab0cbef0f964736f6c63430008010033\n}\n",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b42206843ca5a18939923818e8aa3fafef291f87a0417368d57e7ab0cbef0f964736f6c63430008010033",
"opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT 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 SHL TIMESTAMP KECCAK256 PUSH9 0x43CA5A18939923818E DUP11 LOG3 STATICCALL INVALID CALLCODE SWAP2 0xF8 PUSH27 0x417368D57E7AB0CBEF0F964736F6C634300080100330000000000 ",
"sourceMap": "194:8111:2:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:8111:2;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b42206843ca5a18939923818e8aa3fafef291f87a0417368d57e7ab0cbef0f964736f6c63430008010033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL TIMESTAMP KECCAK256 PUSH9 0x43CA5A18939923818E DUP11 LOG3 STATICCALL INVALID CALLCODE SWAP2 0xF8 PUSH27 0x417368D57E7AB0CBEF0F964736F6C634300080100330000000000 ",
"sourceMap": "194:8111:2:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "103",
"totalCost": "17303"
},
"internal": {
"functionCall(address,bytes memory)": "infinite",
"functionCall(address,bytes memory,string memory)": "infinite",
"functionCallWithValue(address,bytes memory,uint256)": "infinite",
"functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite",
"functionDelegateCall(address,bytes memory)": "infinite",
"functionDelegateCall(address,bytes memory,string memory)": "infinite",
"functionStaticCall(address,bytes memory)": "infinite",
"functionStaticCall(address,bytes memory,string memory)": "infinite",
"isContract(address)": "infinite",
"sendValue(address payable,uint256)": "infinite",
"verifyCallResult(bool,bytes memory,string memory)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 194,
"end": 8305,
"name": "PUSH #[$]",
"source": 2,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 194,
"end": 8305,
"name": "PUSH [$]",
"source": 2,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "B"
},
{
"begin": 194,
"end": 8305,
"name": "DUP3",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "DUP3",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "DUP3",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "CODECOPY",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "DUP1",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "MLOAD",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 194,
"end": 8305,
"name": "BYTE",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "73"
},
{
"begin": 194,
"end": 8305,
"name": "EQ",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH [tag]",
"source": 2,
"value": "1"
},
{
"begin": 194,
"end": 8305,
"name": "JUMPI",
"source": 2
},
{
"begin": -1,
"end": -1,
"name": "PUSH",
"source": -1,
"value": "4E487B71"
},
{
"begin": -1,
"end": -1,
"name": "PUSH",
"source": -1,
"value": "E0"
},
{
"begin": -1,
"end": -1,
"name": "SHL",
"source": -1
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 194,
"end": 8305,
"name": "MSTORE",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "4"
},
{
"begin": 194,
"end": 8305,
"name": "MSTORE",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "24"
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 194,
"end": 8305,
"name": "REVERT",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "tag",
"source": 2,
"value": "1"
},
{
"begin": 194,
"end": 8305,
"name": "JUMPDEST",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "ADDRESS",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 194,
"end": 8305,
"name": "MSTORE",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "73"
},
{
"begin": 194,
"end": 8305,
"name": "DUP2",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "MSTORE8",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "DUP3",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "DUP2",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "RETURN",
"source": 2
}
],
".data": {
"0": {
".auxdata": "a26469706673582212201b42206843ca5a18939923818e8aa3fafef291f87a0417368d57e7ab0cbef0f964736f6c63430008010033",
".code": [
{
"begin": 194,
"end": 8305,
"name": "PUSHDEPLOYADDRESS",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "ADDRESS",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "EQ",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "80"
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "40"
},
{
"begin": 194,
"end": 8305,
"name": "MSTORE",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "PUSH",
"source": 2,
"value": "0"
},
{
"begin": 194,
"end": 8305,
"name": "DUP1",
"source": 2
},
{
"begin": 194,
"end": 8305,
"name": "REVERT",
"source": 2
}
]
}
}
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.1+commit.df193b15\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/Context.sol": {
"Context": {
"abi": [],
"devdoc": {
"details": "Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.",
"kind": "dev",
"methods": {},
"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.8.1+commit.df193b15\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/math/SafeMath.sol": {
"SafeMath": {
"abi": [],
"devdoc": {
"details": "Wrappers over Solidity's arithmetic operations. NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler now has built in overflow checking.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"@openzeppelin/contracts/utils/math/SafeMath.sol\":482:6782 library SafeMath {... */\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 mstore(0x00, shl(0xe0, 0x4e487b71))\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@openzeppelin/contracts/utils/math/SafeMath.sol\":482:6782 library SafeMath {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220aaebc265343f4f1260838364587c0f227600081343fad1b2efaef491ab2816c964736f6c63430008010033\n}\n",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220aaebc265343f4f1260838364587c0f227600081343fad1b2efaef491ab2816c964736f6c63430008010033",
"opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT 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 0xAA 0xEB 0xC2 PUSH6 0x343F4F126083 DUP4 PUSH5 0x587C0F2276 STOP ADDMOD SGT NUMBER STATICCALL 0xD1 0xB2 0xEF 0xAE DELEGATECALL SWAP2 0xAB 0x28 AND 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD ADD STOP CALLER ",
"sourceMap": "482:6300:4:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;482:6300:4;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220aaebc265343f4f1260838364587c0f227600081343fad1b2efaef491ab2816c964736f6c63430008010033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA 0xEB 0xC2 PUSH6 0x343F4F126083 DUP4 PUSH5 0x587C0F2276 STOP ADDMOD SGT NUMBER STATICCALL 0xD1 0xB2 0xEF 0xAE DELEGATECALL SWAP2 0xAB 0x28 AND 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD ADD STOP CALLER ",
"sourceMap": "482:6300:4:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "103",
"totalCost": "17303"
},
"internal": {
"add(uint256,uint256)": "infinite",
"div(uint256,uint256)": "infinite",
"div(uint256,uint256,string memory)": "infinite",
"mod(uint256,uint256)": "infinite",
"mod(uint256,uint256,string memory)": "infinite",
"mul(uint256,uint256)": "infinite",
"sub(uint256,uint256)": "infinite",
"sub(uint256,uint256,string memory)": "infinite",
"tryAdd(uint256,uint256)": "infinite",
"tryDiv(uint256,uint256)": "infinite",
"tryMod(uint256,uint256)": "infinite",
"tryMul(uint256,uint256)": "infinite",
"trySub(uint256,uint256)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 482,
"end": 6782,
"name": "PUSH #[$]",
"source": 4,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 482,
"end": 6782,
"name": "PUSH [$]",
"source": 4,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "B"
},
{
"begin": 482,
"end": 6782,
"name": "DUP3",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "DUP3",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "DUP3",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "CODECOPY",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "DUP1",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "MLOAD",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 482,
"end": 6782,
"name": "BYTE",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "73"
},
{
"begin": 482,
"end": 6782,
"name": "EQ",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH [tag]",
"source": 4,
"value": "1"
},
{
"begin": 482,
"end": 6782,
"name": "JUMPI",
"source": 4
},
{
"begin": -1,
"end": -1,
"name": "PUSH",
"source": -1,
"value": "4E487B71"
},
{
"begin": -1,
"end": -1,
"name": "PUSH",
"source": -1,
"value": "E0"
},
{
"begin": -1,
"end": -1,
"name": "SHL",
"source": -1
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 482,
"end": 6782,
"name": "MSTORE",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "4"
},
{
"begin": 482,
"end": 6782,
"name": "MSTORE",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "24"
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 482,
"end": 6782,
"name": "REVERT",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "tag",
"source": 4,
"value": "1"
},
{
"begin": 482,
"end": 6782,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "ADDRESS",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 482,
"end": 6782,
"name": "MSTORE",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "73"
},
{
"begin": 482,
"end": 6782,
"name": "DUP2",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "MSTORE8",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "DUP3",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "DUP2",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "RETURN",
"source": 4
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220aaebc265343f4f1260838364587c0f227600081343fad1b2efaef491ab2816c964736f6c63430008010033",
".code": [
{
"begin": 482,
"end": 6782,
"name": "PUSHDEPLOYADDRESS",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "ADDRESS",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "EQ",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "80"
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "40"
},
{
"begin": 482,
"end": 6782,
"name": "MSTORE",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 482,
"end": 6782,
"name": "DUP1",
"source": 4
},
{
"begin": 482,
"end": 6782,
"name": "REVERT",
"source": 4
}
]
}
}
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.1+commit.df193b15\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations. NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler now has built in overflow checking.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"contracts/BaseToken.sol": {
"BaseToken": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "enum TokenType",
"name": "tokenType",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "version",
"type": "uint256"
}
],
"name": "TokenCreated",
"type": "event"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"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.8.1+commit.df193b15\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"TokenCreated\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BaseToken.sol\":\"BaseToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/BaseToken.sol\":{\"keccak256\":\"0x136c4efb9c753ce66ad44424e7f75a0c0cd3d06b5c43acc8bd77eb3eb9de53c4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://46f03ce95c2fd040e35a5728df28412d6c872cfc27097d05f5df1670dae4fafe\",\"dweb:/ipfs/QmWpwm6dvG2W7zhGK9Gjx5W6T6uKgx5ekHDWqftzoDmJUU\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"contracts/WaifInu.sol": {
"WaifInu": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "router_",
"type": "address"
},
{
"internalType": "address",
"name": "marketingAddress_",
"type": "address"
},
{
"internalType": "address",
"name": "devAddress_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "minTokensBeforeSwap",
"type": "uint256"
}
],
"name": "MinTokensBeforeSwapUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "tokensSwapped",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "ethReceived",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "tokensIntoLiqudity",
"type": "uint256"
}
],
"name": "SwapAndLiquify",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "SwapAndLiquifyEnabledUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "enum TokenType",
"name": "tokenType",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "version",
"type": "uint256"
}
],
"name": "TokenCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "VERSION",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_liquidityFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_marketingAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_marketingFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_taxFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "subtractedValue",
"type": "uint256"
}
],
"name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tAmount",
"type": "uint256"
}
],
"name": "deliver",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "excludeFromFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "excludeFromReward",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "includeInFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "includeInReward",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "addedValue",
"type": "uint256"
}
],
"name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "isExcludedFromFee",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "isExcludedFromReward",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tAmount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "deductTransferFee",
"type": "bool"
}
],
"name": "reflectionFromToken",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "liquidityFeeBps",
"type": "uint256"
}
],
"name": "setLiquidityFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "marketingFeeBps",
"type": "uint256"
}
],
"name": "setMarketingFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_enabled",
"type": "bool"
}
],
"name": "setSwapAndLiquifyEnabled",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "taxFeeBps",
"type": "uint256"
}
],
"name": "setTaxFeePercent",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "swapAndLiquifyEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "rAmount",
"type": "uint256"
}
],
"name": "tokenFromReflection",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalFees",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "uniswapV2Pair",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "uniswapV2Router",
"outputs": [
{
"internalType": "contract IUniswapV2Router02",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"allowance(address,address)": {
"details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."
},
"approve(address,uint256)": {
"details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."
},
"balanceOf(address)": {
"details": "Returns the amount of tokens owned by `account`."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
},
"totalSupply()": {
"details": "Returns the amount of tokens in existence."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"evm": {
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.)

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